Bài viết mới nhất

Tổng 2300 bài
Công cụ 22/09/2026 6 phút

git status và git diff so cái gì với cái gì — và cái bẫy .gitignore ai cũng dính

Bạn gõ git status và git diff hàng chục lần mỗi ngày nhưng ít khi hỏi chúng so những gì. Câu trả lời nằm ở ba vùng: working tree, index, HEAD. Bài này đo thật: git diff so working với index, git diff --cached so index với HEAD, git status --short đọc bằng hai cột, và vì sao thêm file vào .gitignore không gỡ được file đã theo dõi.

Công cụ 22/09/2026 6 phút

git bisect: tìm commit gây lỗi trong 5 lần thay vì 30 — và cách để máy tự làm

Một tính năng vừa hỏng mà bạn không biết commit nào gây ra, giữa hàng trăm commit. Dò tuần tự là ác mộng. git bisect tìm nhị phân: mỗi lần chia đôi số commit khả nghi. Bài này đo thật trên 31 commit — bisect tìm ra thủ phạm chỉ sau 5 lần kiểm thử, và git bisect run để máy tự chạy hết bằng một script.

Công cụ 22/09/2026 6 phút

cherry-pick và detached HEAD: bê một commit lẻ, và vì sao HEAD rời không đáng sợ

Bạn chỉ muốn một commit hotfix từ nhánh tính năng sang main, không phải cả nhánh — đó là cherry-pick. Và trạng thái detached HEAD mà bisect/checkout hay đẩy bạn vào khiến nhiều người hoảng. Bài này đo thật: cherry-pick tạo commit mới cùng nội dung khác SHA, và một commit tạo trong detached HEAD mất hay được cứu tùy bạn có đặt tên nhánh hay không.

Công cụ 22/09/2026 6 phút

git fetch và git push trao đổi gì với máy chủ: want, have, và pack protocol

Push và fetch không gửi toàn bộ repo mỗi lần — chúng thương lượng để chỉ truyền object còn thiếu. Bài cuối sê-ri Git nội bộ mổ xẻ giao thức: ref advertisement, đàm phán want/have, rồi pack protocol gói phần thiếu. Đo thật bằng GIT_TRACE_PACKET — client nói want một SHA, have những SHA đã có, server chỉ gửi packfile chênh lệch. Và vì sao push đôi khi bị từ chối.

Web 22/09/2026 5 phút

Một request HTTP đi qua dây cáp: thực ra chỉ là text gõ đúng khuôn trên TCP

Nhiều người dùng HTTP mỗi ngày qua thư viện mà chưa từng thấy một request thô trông thế nào. Sự thật đơn giản đến bất ngờ: HTTP là vài dòng text kết thúc bằng CRLF, gửi qua một socket TCP. Bài này xem thô bằng curl --trace-ascii, rồi tự gõ tay một request bằng socket Python không dùng thư viện HTTP nào — và server vẫn trả lời.

Web 22/09/2026 5 phút

Ba header HTTP quyết định: Host, Content-Type, và Content-Length vs chunked

Vì sao hàng nghìn website chung một địa chỉ IP vẫn phân biệt được nhau? Vì sao có response biết trước độ dài, có response gửi theo từng khúc? Bài này đo thật ba header cốt lõi: Host cho virtual hosting, Content-Type quyết client hiểu body thế nào, và cặp loại trừ Content-Length vs Transfer-Encoding chunked — xem tận byte khung chunk.