Git — Mô Hình Dữ Liệu & Quy Trình Làm Việc Trực Quan — Lộ Trình Chi Tiết
Nhìn thấy đồ thị commit di chuyển, không chỉ học thuộc lệnh
Hầu hết người dùng Git học theo kiểu "gõ lệnh này khi gặp tình huống kia" — thuộc lòng
git merge, git rebase, git reset --hard mà không thực sự hiểu
điều gì đang xảy ra bên dưới. Hậu quả là khi gặp tình huống lạ (conflict phức tạp, lỡ tay
reset --hard, rebase nhầm nhánh public), phản xạ duy nhất là hoảng loạn hoặc xoá repo làm
lại. Series này đi từ gốc: Git chỉ là một đồ thị không chu trình có hướng (DAG) gồm các
đối tượng bất biến, và mọi lệnh chỉ đơn giản là di chuyển vài con trỏ trên đồ thị đó.
Bạn sẽ tự tay dựng đồ thị commit qua từng lệnh, xem branch chỉ là 1 con trỏ 40-ký-tự-hex, quan sát three-way merge tính toán vùng xung đột, so sánh graph trước/sau rebase, và "làm hỏng rồi tự cứu" bằng reflog — tất cả bằng một bộ mô phỏng Git chạy hoàn toàn trong trình duyệt, không cần cài đặt Git thật.
Về Series này
Mỗi bài có một Git Graph Simulator tương tác: gõ lệnh giả lập (commit,
branch, merge, rebase...) và xem đồ thị commit, con trỏ
HEAD/branch, và trạng thái 3 cây (Working Dir/Staging/HEAD) cập nhật ngay lập tức — không
có bước nào "diễn ra trong bóng tối".
3 Dịch chuyển Tư duy quan trọng (Mindset Shifts)
Để dùng Git tự tin thay vì học thuộc lệnh, bạn cần chuyển đổi tư duy qua 3 điểm mấu chốt:
reflog gần như luôn
giữ lại dấu vết của bất kỳ commit nào bạn từng tạo ra trên máy — kể cả sau reset --hard
hay rebase nhầm. Hiểu cơ chế "garbage collection trì hoãn" này giúp bạn thao tác Git tự tin hơn nhiều,
thay vì né tránh các lệnh "nguy hiểm".
Bảng thuật ngữ nền tảng (Glossary)
Để dễ dàng theo dõi loạt bài viết, bạn cần ghi nhớ các định nghĩa kỹ thuật sau:
| Thuật ngữ (EN) | Dịch nghĩa (VI) | Định nghĩa ngắn gọn |
|---|---|---|
| Blob | Đối tượng nội dung | Lưu nội dung 1 file (không lưu tên file), định danh bằng hash nội dung. |
| Tree | Đối tượng cây thư mục | Ánh xạ tên file/thư mục con tới blob/tree khác — đại diện 1 snapshot thư mục. |
| Commit | Bản ghi lịch sử | Trỏ tới 1 tree gốc và (các) commit cha, các commit nối lại tạo thành DAG lịch sử. |
| Detached HEAD | HEAD tách rời | HEAD trỏ thẳng tới 1 commit thay vì tới 1 branch — commit mới tạo ra có thể mất dấu nếu không gán nhánh. |
| Fast-forward | Tiến nhanh | Merge không tạo commit mới khi nhánh đích là tổ tiên trực tiếp — chỉ di chuyển con trỏ. |
| Reflog | Nhật ký tham chiếu | Lịch sử di chuyển của HEAD/branch trên máy cục bộ — dùng để cứu commit tưởng đã mất. |
Lộ trình 13 bài học Git trực quan chuyên sâu
Dưới đây là chi tiết lộ trình 13 bài viết thực chiến giúp bạn làm chủ mô hình dữ liệu và quy trình làm việc của Git:
Bài 1: Mô Hình Đối Tượng Git — Blob, Tree, Commit
Đối tượng content-addressable định danh bằng SHA, vì sao Git lưu snapshot chứ không lưu diff. Trình
xem cấu trúc bên trong .git/objects của một commit mẫu.
Bài 2: Three Trees & Staging — Working Dir, Index, HEAD
Vòng đời add/commit qua 3 cây song song. Trực quan hoá file di chuyển qua
Working Directory → Staging → HEAD từng bước.
Bài 3: Branch & HEAD — Con Trỏ, Không Phải Bản Sao
Branch chỉ là con trỏ 41 byte, HEAD tách rời (detached), điều kiện fast-forward. Đồ thị commit tạo nhánh và di chuyển HEAD trực quan theo từng lệnh.
Bài 4: Merge & Conflict — Three-Way Merge Hoạt Động Thế Nào
Merge base, thuật toán three-way merge, cơ chế phát sinh xung đột dòng-đối-dòng. Demo merge tạo commit hợp nhất và tô sáng vùng conflict.
Bài 5: Rebase & Viết Lại Lịch Sử
Rebase vs merge, --onto, interactive rebase (squash/fixup/reorder) và "golden rule"
không rebase nhánh public. So sánh đồ thị commit trước/sau rebase cùng một kịch bản.
Bài 6: Cherry-pick — Chọn Lọc Commit Cụ Thể
Nhặt 1 commit từ nhánh khác mà không merge cả nhánh — cơ chế tạo commit mới cùng nội dung nhưng khác SHA. Đồ thị 2 nhánh minh hoạ "nhặt" commit và xử lý xung đột khi pick.
Bài 7: Undo & Phục Hồi — reset, revert, reflog
Khác biệt reset --soft/mixed/hard, revert, và cách reflog
cứu một commit tưởng đã mất. Demo "làm hỏng rồi tự cứu" bằng reflog.
Bài 8: Git Bisect — Tìm Commit Lỗi Bằng Tìm Kiếm Nhị Phân
Dò lỗi giữa hàng trăm commit bằng tìm kiếm nhị phân (good/bad), tự động hoá với
bisect run. Danh sách commit giả lập giấu 1 "thủ phạm", quan sát thuật toán hội tụ.
Bài 9: Remote & Collaboration — fetch, pull, push
Tracking branch, upstream, mô hình Pull Request, và khi nào chọn merge hay rebase khi làm việc nhóm. Mô phỏng 2 remote đồng bộ, minh hoạ diverge & sync.
Bài 10: Subtree & Submodule — Quản Lý Đa Kho Mã Nguồn
Nhúng 1 repo bên trong repo khác: submodule (con trỏ tới 1 commit) vs subtree (nhúng thẳng lịch sử). Mô phỏng repo chính + thư viện, so sánh trực quan 2 cách tiếp cận.
Bài 11: Hooks & Worktree — Tự Động Hoá & Làm Việc Song Song
Git hooks chạy tự động tại các mốc (pre-commit/pre-push), worktree checkout song song
nhiều nhánh không cần clone lại. Demo hook chặn commit lỗi + visualizer 2 worktree.
Bài 12: Tags & Aliases Nâng Cao
Lightweight vs annotated tag, Semantic Versioning, git alias/config tuỳ
biến workflow cá nhân. Bảng so sánh tag trực quan và "alias builder" ghép lệnh dài thành alias.
Bài 13: Dự Án — Git Kata Trainer
Bộ thử thách: cho trước trạng thái đồ thị đích, người học gõ lệnh để đạt được. Trò chơi luyện Git chấm điểm tự động theo đồ thị kết quả, tổng hợp toàn bộ 12 bài trước.