如何让已有的本地分支跟踪远程分支
设置跟踪关系:git branch --set-upstream-to=origin/<远程分支> <本地分支>;推送时顺便设置用 git push -u origin <分支>。设好后 git status 显示领先/落后,git pull/push 免参数。
一条命令:git branch --set-upstream-to=origin/远程分支 本地分支名。推送的同时设置也行:git push -u origin 分支名。建好后裸 git pull/git push 就有明确目标了。
设置跟踪
# 站在该分支上
git branch --set-upstream-to=origin/feature-x
# 或指定本地分支名
git branch --set-upstream-to=origin/feature-x feature-x
# 推送时一步搞定
git push -u origin feature-x
验证
git branch -vv
# * feature-x a1b2c3d [origin/feature-x: ahead 1] 提交说明
git status
# Your branch is ahead of 'origin/feature-x' by 1 commit.
修改与取消
git branch --set-upstream-to=origin/another-branch # 改跟踪目标
git branch --unset-upstream # 取消跟踪
常见问题(FAQ)
Q:设置时报 "no such branch"?
远程还没有这个分支(或没 fetch)。先 git fetch,或 git push -u origin 分支名 顺带创建。
Q:本地和远程分支名不一样能跟踪吗?
能,--set-upstream-to 的两边名字随意对应。但长期协作建议同名。
Q:checkout 远程分支自动建跟踪是什么原理?
那是 Git 的 DWIM 行为:git checkout feature-x 发现本地没有、origin 恰好有一个,就自动 checkout -b + 跟踪。手动设 upstream 是当自动机制不适用(多远程、不同名)时的手段。