← Quay lại Trang Chủ Blog
Git Internals

Git — Mô Hình Dữ Liệu & Quy Trình Làm Việc Trực Quan — Lộ Trình Chi Tiết

3 tháng 7, 2026 · Lộ trình 13 bài học

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:

🔬 Bước 1: Từ "học lệnh" sang "hiểu mô hình đối tượng bất biến"
Mọi thứ trong Git — file, thư mục, commit — là một đối tượng bất biến định danh bằng hash nội dung (content-addressable). Không đối tượng nào bị sửa đổi sau khi tạo; "sửa file" thực chất là tạo đối tượng mới rồi trỏ lại. Một khi hiểu điều này, phần lớn lệnh Git chỉ là các cách khác nhau để tạo đối tượng mới và di chuyển con trỏ — không có phép màu nào cả.
ℹ️ Bước 2: Từ "branch là bản sao" sang "branch chỉ là 1 con trỏ"
Trong nhiều hệ quản lý phiên bản cũ, tạo nhánh nghĩa là sao chép toàn bộ file. Trong Git, branch chỉ là một file 41 byte chứa hash của 1 commit — tạo nhánh gần như tức thời và không tốn thêm dung lượng đáng kể. Hiểu điều này giải thích vì sao Git khuyến khích tạo nhánh liên tục cho mọi tính năng nhỏ.
💡 Bước 3: Từ "sợ làm hỏng" sang "gần như mọi thứ đều cứu được"
Vì các đối tượng cũ không bị xoá ngay (chỉ mất tham chiếu tới chúng), 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:

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

07

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.

08

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ụ.

09

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.

10

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.

11

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.

12

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.

13

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.