让现有Git分支跟踪远程分支的方法
技术背景
在使用Git进行版本控制时,经常需要让本地分支跟踪远程分支,这样可以方便地进行代码的拉取和推送操作。不同版本的Git提供了不同的命令来实现这一功能。
实现步骤
Git 1.8.0及更高版本
- 若当前分支为
foo
,要跟踪upstream
远程仓库的foo
分支,可使用以下命令:
1
| git branch -u upstream/foo
|
1
| git branch -u upstream/foo foo
|
1 2
| git branch --set-upstream-to=upstream/foo git branch --set-upstream-to=upstream/foo foo
|
Git 1.7.0 - 1.8.0 版本
使用以下命令让本地分支foo
跟踪upstream
远程仓库的foo
分支:
1
| git branch --set-upstream foo upstream/foo
|
其他情况
1
| git remote add origin ssh://...
|
- 配置`master`分支跟踪远程分支:
1 2
| git config branch.master.remote origin git config branch.master.merge refs/heads/master
|
- 推送代码:
1
| git push -u origin branch-name
|
其等效的长选项为--set-upstream
。
- 解决
origin
不存在foo
分支的问题:- 确保
origin
确实有foo
分支。 - 确保
remote.origin.fetch
变量设置为+refs/heads/*:refs/remotes/origin/*
:
1 2
| git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' git config --get remote.origin.fetch
|
3. 运行`git fetch -v`:
4. 成功后,使用`git branch -avv`查看跟踪情况:
1 2
| git branch -u origin/foo git branch -avv
|
核心代码
以下是不同场景下让本地分支跟踪远程分支的核心代码示例:
Git 1.8.0及以上版本
1
| git branch -u upstream/foo
|
Git 1.7.0 - 1.8.0 版本
1
| git branch --set-upstream foo upstream/foo
|
设置远程仓库并推送
1 2 3 4
| git remote add origin ssh://... git config branch.master.remote origin git config branch.master.merge refs/heads/master git push origin master
|
使用-u
选项推送
1
| git push -u origin branch-name
|
最佳实践
- 尽量使用较新的Git版本,新的语法更直观易记。
- 在设置跟踪关系前,先运行
git fetch
获取远程仓库的最新信息。 - 设置
push.default
为upstream
,避免不必要的合并问题:
1
| git config --global push.default upstream
|
常见问题
“error: the requested upstream branch ‘origin/foo’ does not exist”
解决方法:
- 确保
origin
确实有foo
分支。 - 确保
remote.origin.fetch
变量设置为+refs/heads/*:refs/remotes/origin/*
。 - 运行
git fetch -v
更新远程分支信息。
旧版本Git的push.default
问题
旧版本Git的push.default
默认值为matching
,可能会导致意外的合并操作。建议将其设置为upstream
:
1
| git config --global push.default upstream
|