Branch cơ bản: con trỏ tới commit
Git Branches: Pointers to Commits
Nhiều người nghĩ tạo một branch là phải sao chép cả thư mục dự án. Trong Git thì không phải vậy. Hiểu branch thực sự là gì sẽ giúp bạn dùng nó thoải mái mà không sợ "làm hỏng" mọi thứ.
Branch thực chất là gì?
Mỗi commit trong Git có một mã băm (hash) riêng và trỏ ngược về commit cha của nó. Chuỗi các commit này tạo thành lịch sử dự án.
Một branch không phải là một bản sao của code — nó chỉ là một con trỏ nhẹ trỏ tới một commit. Khi bạn tạo thêm commit mới trên branch đang đứng, con trỏ branch đó tự động dời lên commit mới nhất.
HEAD là một con trỏ đặc biệt cho biết bạn đang đứng ở branch nào.
Bình thường HEAD trỏ tới tên branch (ví dụ main), và branch đó trỏ tới commit hiện tại.
Tạo và chuyển branch
Lệnh hiện đại để chuyển branch là git switch:
# Xem các branch hiện có (dấu * là branch đang đứng)
git branch
# Tạo branch mới tên feature-login (chưa chuyển sang)
git branch feature-login
# Chuyển sang branch đó
git switch feature-login
# Tạo branch mới VÀ chuyển sang ngay
git switch -c feature-login
Lệnh cũ git checkout vẫn dùng được: git checkout -b feature-login tương đương git switch -c feature-login.
Git tách switch (chuyển branch) và restore (khôi phục file) ra để rõ nghĩa hơn checkout vốn làm quá nhiều việc.
switch vs checkout
git switch chỉ làm một việc: chuyển branch. git checkout cũ làm cả việc chuyển branch lẫn khôi phục file nên dễ gây nhầm. Với người mới, ưu tiên git switch và git restore.
Vì sao branch trong Git lại rẻ?
Vì branch chỉ là một con trỏ tới commit, tạo một branch mới chỉ là ghi một mã hash 40 ký tự vào một file nhỏ — gần như tức thì, không phụ thuộc kích thước dự án.
So với các hệ thống cũ phải sao chép toàn bộ thư mục cho mỗi branch, Git rẻ hơn rất nhiều. Điều này khuyến khích một thói quen tốt: tạo branch riêng cho mỗi tính năng hoặc mỗi lần sửa lỗi, làm xong thì gộp lại rồi xóa branch.
| Khái niệm | Bản chất |
|---|---|
| Commit | Ảnh chụp trạng thái + trỏ về commit cha |
| Branch | Con trỏ nhẹ tới một commit |
| HEAD | Con trỏ cho biết đang đứng ở branch nào |
| Tạo branch | Chỉ ghi một hash → cực nhanh, cực rẻ |
Trọng tâm thi
Khi đề mô tả branch là "một con trỏ di động tới một commit" và hỏi vì sao tạo branch nhanh → vì Git không sao chép code, chỉ tạo thêm một con trỏ. Tạo branch là thao tác hằng số, không phụ thuộc kích thước repo.
Tóm tắt
- Branch là con trỏ nhẹ tới một commit, không phải bản sao thư mục.
- Khi commit mới, con trỏ branch tự dời lên commit mới nhất;
HEADcho biết đang đứng ở branch nào. - Dùng
git switch <branch>để chuyển,git switch -c <branch>để tạo và chuyển. - Branch rẻ vì chỉ ghi một hash → hãy tạo branch riêng cho mỗi tính năng/sửa lỗi.