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

Git là một cơ sở dữ liệu nội dung địa chỉ hoá: blob, tree, commit

Đa số người dùng Git như một hộp đen với add/commit/push. Nhưng bên dưới, Git chỉ là một key-value store đơn giản: khoá là SHA của nội dung, giá trị là object. Bài này mổ xẻ ba loại object (blob, tree, commit) bằng lệnh git thật — tự tính ra khoá SHA của Git và chứng minh nó băm nội dung, không phải tên file.

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

Ba vùng của Git: working directory, index (staging) và repository

Ai cũng gõ git add rồi git commit, nhưng ít người biết index (staging) thực chất là gì. Bài này mổ xẻ ba vùng của Git bằng lệnh thật: index là một file nhị phân lưu SHA blob + mode + path, git add ghi blob mới và cập nhật index, và hai lệnh diff soi hai khe khác nhau — hiểu điều này giúp bạn đọc đúng git status và dùng đúng git reset.

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

Ref, HEAD và branch trong Git: một nhánh chỉ là một con trỏ 41 byte

Nhiều người tưởng tạo branch là sao chép cả dự án, nên ngại tạo nhánh. Thực ra một branch chỉ là một file 41 byte chứa SHA của commit. Bài này chứng minh bằng lệnh thật: HEAD trỏ tới ref, ref trỏ tới commit, tạo branch = ghi 41 byte, chuyển branch = đổi con trỏ HEAD — và vì sao Git khuyến khích bạn tạo nhánh thoải mái.

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

Lịch sử Git là một DAG: commit trỏ cha, và lưu snapshot chứ không lưu diff

Nhiều người tưởng Git lưu 'các thay đổi' (diff) giữa các commit. Thực ra mỗi commit lưu một ảnh chụp (snapshot) toàn bộ cây, và trỏ tới commit cha — tạo thành một đồ thị có hướng không chu trình (DAG). Bài này chứng minh bằng lệnh thật: file không đổi dùng lại cùng blob qua nhiều commit, và merge tạo commit hai cha.

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

Merge ba chiều trong Git: base, ours, theirs — và vì sao có xung đột

Nhiều người sợ merge vì không hiểu Git làm gì. Thực ra merge của Git là 'ba chiều': nó tìm commit tổ tiên chung (merge base) rồi so với hai phía để biết bên nào đã đổi gì. Bài này chứng minh bằng lệnh thật: thay đổi khác vùng tự gộp, thay đổi cùng dòng gây xung đột, và index giữ cả ba phiên bản (base/ours/theirs).

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

Rebase trong Git: vì sao nó viết lại lịch sử — chứng minh bằng SHA thật

Nhiều người dùng rebase mà không hiểu nó khác merge chỗ nào, rồi hoảng khi thấy commit 'biến mất'. Sự thật: rebase KHÔNG di chuyển commit cũ — nó tạo commit MỚI với SHA khác vì đổi parent. Bài này chứng minh bằng lệnh thật: cùng nội dung, cùng message, nhưng SHA đổi hoàn toàn; lịch sử thẳng thay vì rẽ nhánh; và commit cũ vẫn nằm trong reflog để cứu.