Khái niệm cốt lõi
Giải thích ngắn gọn, dễ hiểu các khái niệm và định nghĩa quan trọng cần nắm cho kỳ thi. Mỗi bài đi kèm ví dụ và mẹo ghi nhớ.
Domain 1 · Nền tảng Git
Version Control
Version Control
Quản lý phiên bản ghi lại lịch sử thay đổi của dự án; Git theo mô hình phân tán nên khác hẳn các VCS tập trung như SVN.
4 phút đọcRepository
Repository
Repository là một dự án được Git theo dõi; toàn bộ lịch sử, branch và cấu hình nằm trong thư mục ẩn .git tại gốc dự án.
4 phút đọcWorking Tree
Working Tree
Working tree là thư mục làm việc thật nơi bạn mở và sửa file; mỗi file ở đây có thể untracked hoặc modified.
5 phút đọcStaging Area (Index)
Staging Area (Index)
Staging area là vùng tạm chứa thay đổi bạn chọn cho commit kế tiếp; git add đưa file vào đây trước khi commit.
5 phút đọcCommit
Commit
Commit là một snapshot bất biến của dự án, có mã SHA định danh duy nhất và trỏ tới parent để tạo thành chuỗi lịch sử.
4 phút đọcHEAD
HEAD
HEAD là con trỏ cho biết bạn đang đứng ở commit hoặc branch nào; tạo commit mới thì branch và HEAD cùng tiến lên.
Domain 2 · Thay đổi & Lịch sử
Git Diff
Git Diff
git diff so sánh thay đổi giữa working directory, staging area và HEAD; --staged xem thay đổi sắp commit.
5 phút đọcReset vs Revert
Reset vs Revert
reset dời con trỏ nhánh và viết lại lịch sử (dùng khi chưa push); revert tạo commit đảo ngược, an toàn cho nhánh chung.
4 phút đọcGit Restore
Git Restore
git restore khôi phục file trong working directory về HEAD; --staged gỡ file khỏi staging mà vẫn giữ nội dung.
4 phút đọcGit Stash
Git Stash
git stash cất tạm thay đổi chưa commit để làm việc khác, sau đó pop/apply để lấy lại.
5 phút đọcGit Tag
Git Tag
git tag đánh dấu một commit là phiên bản phát hành; phân biệt lightweight và annotated, và cần push tag riêng.
5 phút đọcgitignore
gitignore
File .gitignore khai báo pattern các file Git cần bỏ qua; chỉ áp dụng cho file chưa track, file đã commit cần git rm --cached.
Domain 3 · Branching & Merging
Branch
Branch
Branch là một con trỏ di động trỏ tới một commit; tạo branch rất rẻ vì Git chỉ ghi thêm một con trỏ chứ không sao chép code.
5 phút đọcMerge vs Rebase
Merge vs Rebase
Hai cách tích hợp thay đổi giữa các branch: merge giữ lịch sử thật và tạo merge commit, rebase viết lại thành lịch sử thẳng với hash mới.
4 phút đọcFast-forward Merge
Fast-forward Merge
Khi branch đích chưa có commit mới, merge chỉ cần dời con trỏ tiến lên commit cuối của branch nguồn — không tạo merge commit, lịch sử vẫn thẳng.
5 phút đọc3-way Merge
3-way Merge
Khi hai branch đã phân kỳ, Git gộp dựa trên ba commit (tổ tiên chung và commit cuối của mỗi branch) rồi tạo một merge commit có hai commit cha.
5 phút đọcMerge Conflict
Merge Conflict
Xung đột xảy ra khi hai branch cùng sửa một chỗ trong một file; Git chèn conflict markers và nhờ bạn chọn nội dung đúng, rồi git add và git merge --continue.
4 phút đọcDetached HEAD
Detached HEAD
Trạng thái khi HEAD trỏ thẳng tới một commit thay vì trỏ tới một branch; commit tạo ra ở đây dễ bị mất nếu bạn không gắn chúng vào một branch.
Domain 4 · Remote & Cộng tác
Remote
Remote
Remote là bản sao repo trên server, được đăng ký bằng một tên ngắn và một URL để repo local trao đổi commit với nó.
5 phút đọcOrigin vs Upstream
Origin vs Upstream
Origin là remote mặc định (thường là fork của bạn); upstream là repo gốc mà bạn kéo về để đồng bộ — chỉ là quy ước đặt tên.
5 phút đọcFetch vs Pull
Fetch vs Pull
Fetch chỉ tải commit về và cập nhật nhánh remote, không đụng nhánh local; pull = fetch rồi merge, gộp ngay vào nhánh hiện tại.
5 phút đọcTracking Branch
Tracking Branch
Tracking branch là nhánh local liên kết với một nhánh remote (upstream), nhờ đó git pull/push trống vẫn biết đồng bộ với đâu và hiện trạng thái ahead/behind.
5 phút đọcPull Request
Pull Request
Pull Request là đề nghị gộp một nhánh vào nhánh khác, kèm nơi để review và thảo luận trước khi merge — cơ chế cộng tác chuẩn trên GitHub/GitLab.
5 phút đọcFork vs Clone
Fork vs Clone
Clone là bản sao repo về máy local (lệnh Git); fork là bản sao repo trên tài khoản bạn ở server (thao tác của nền tảng) — dùng để đóng góp khi không có quyền push gốc.
Domain 5 · Nâng cao & Production
Reflog
Reflog
Nhật ký ghi lại mọi dịch chuyển của HEAD, là phao cứu sinh để khôi phục commit hay branch tưởng đã mất.
4 phút đọcCherry-pick
Cherry-pick
Áp đúng một commit cụ thể từ nhánh này sang nhánh khác, tạo ra một commit mới với cùng nội dung thay đổi.
5 phút đọcBisect
Bisect
Dùng tìm kiếm nhị phân để tìm chính xác commit đầu tiên gây bug giữa một mốc tốt và một mốc lỗi.
4 phút đọcGit Hook
Git Hook
Script tự chạy theo sự kiện Git như commit hay push, dùng để tự động hóa kiểm tra chất lượng code.
5 phút đọcSubmodule
Submodule
Một repo Git được nhúng vào trong một repo khác, repo cha ghim submodule ở đúng một commit cụ thể.
5 phút đọcInteractive Rebase
Interactive Rebase
Viết lại và dọn nhiều commit cùng lúc bằng git rebase -i: squash, fixup, reword, drop, reorder.