Domain 3 · 8 phút đọc

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 switchgit 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ệmBản chất
CommitẢnh chụp trạng thái + trỏ về commit cha
BranchCon trỏ nhẹ tới một commit
HEADCon trỏ cho biết đang đứng ở branch nào
Tạo branchChỉ 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; HEAD cho 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.