Domain 4 · 8 phút đọc

Tracking branch và upstream

Tracking Branches and Upstream

Khi bạn gõ git pull hay git push mà không ghi rõ remote và nhánh, Git vẫn biết phải đồng bộ với đâu. Đó là nhờ tracking branch — liên kết giữa nhánh local của bạn và một nhánh trên remote.

Tracking branch là gì

Một tracking branch (nhánh theo dõi) là nhánh local được liên kết với một nhánh remote, gọi là upstream của nó. Ví dụ main local thường theo dõi origin/main.

Khi đã có upstream, bạn có thể gõ gọn:

# Git tự biết kéo từ / đẩy lên upstream đã thiết lập
git pull
git push

thay vì phải ghi đầy đủ git pull origin main mỗi lần.

Thiết lập upstream với git push -u

Khi bạn tạo một nhánh mới local và đẩy lần đầu, Git chưa biết nó nên theo dõi nhánh remote nào. Dùng cờ -u (viết tắt của --set-upstream) để vừa push vừa thiết lập liên kết:

# Tạo nhánh mới
git switch -c feature/login

# Push lần đầu và đặt upstream = origin/feature/login
git push -u origin feature/login

Từ lần sau, trên nhánh đó bạn chỉ cần git pushgit pull trống là đủ.

Xem upstream với git branch -vv

git branch -vv (very verbose) liệt kê các nhánh local kèm upstream của chúng và trạng thái ahead/behind:

git branch -vv
* feature/login 7a3f9c1 [origin/feature/login: ahead 2] Add form
  main          e1b2c3d [origin/main: behind 3] Initial setup

Đọc kết quả:

  • [origin/feature/login: ahead 2]: nhánh local có 2 commit mà remote chưa có — bạn cần push.
  • [origin/main: behind 3]: remote có 3 commit mà local chưa có — bạn cần pull.
  • Có thể vừa ahead vừa behind cùng lúc khi cả hai bên đều có commit mới.

Ahead và behind nghĩa là gì

Trạng tháiÝ nghĩaHành động
ahead NLocal có N commit remote chưa cógit push
behind NRemote có N commit local chưa cógit pull
ahead X, behind YCả hai bên đều có commit riênggit pull (gộp) rồi git push
(không hiện gì)Đã đồng bộKhông cần làm gì

Fetch trước để số liệu chính xác

ahead/behind được tính dựa trên dữ liệu remote mà local đã biết. Nếu lâu không fetch, con số có thể cũ. Chạy git fetch trước rồi git branch -vv để thấy trạng thái mới nhất.

Thiết lập tự động -u

Đặt git config --global push.autoSetupRemote true để Git tự thiết lập upstream khi push nhánh mới lần đầu, khỏi cần gõ -u mỗi lần.

Trọng tâm thi

Tracking branch liên kết nhánh local với một nhánh remote (upstream). git push -u origin <nhanh> thiết lập liên kết đó. git branch -vv xem upstream và trạng thái: ahead = local đi trước (cần push), behind = local tụt lại (cần pull).

Tóm tắt

  • Tracking branch là nhánh local liên kết với một nhánh remote (upstream của nó).
  • Có upstream rồi thì git pull / git push trống vẫn biết đồng bộ với đâu.
  • git push -u origin <nhanh> đẩy lần đầu và thiết lập upstream.
  • git branch -vv xem upstream cùng trạng thái ahead/behind.
  • ahead = cần push; behind = cần pull; cả hai = pull để gộp rồi push.
  • Nên git fetch trước khi đọc ahead/behind để số liệu chính xác.