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 push và git 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ầnpush.[origin/main: behind 3]: remote có 3 commit mà local chưa có — bạn cầnpull.- 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ĩa | Hành động |
|---|---|---|
ahead N | Local có N commit remote chưa có | git push |
behind N | Remote có N commit local chưa có | git pull |
ahead X, behind Y | Cả hai bên đều có commit riêng | git 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 pushtrố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 -vvxem 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 fetchtrước khi đọc ahead/behind để số liệu chính xác.