如何避免使用 'git branch --set-upstream' 并默认自动设置远程跟踪

如何避免使用 ‘git branch –set-upstream’ 并默认自动设置远程跟踪

技术背景

在使用Git进行版本控制时,当我们创建新分支并首次推送到远程仓库时,通常需要手动设置远程跟踪分支,如使用 git branch --set-upstreamgit push -u 命令。这一操作在每次创建新分支时都要重复,较为繁琐。因此,我们希望找到一种方法来避免每次都手动设置,实现自动设置远程跟踪。

实现步骤

Git v2.37.1及以上版本

使用新的配置项 push.autoSetupRemote 来自动设置远程跟踪:

1
git config --global push.autoSetupRemote true

设置之后,执行 git push 时会自动设置跟踪,无需使用 git push -u origin my_branch

首次推送分支时的快捷方式

在首次推送分支时,可以使用 -u 选项:

1
git push -u origin my_branch

或者推送当前分支:

1
git push -u origin HEAD

使用 -u 选项一次即可设置本地分支与远程分支的关联,效果等同于 git branch --set-upstream

使用 git branch --set-upstream-to

Git 1.8.0 引入了更直观的 git branch --set-upstream-to 命令。如果当前位于 my_branch 分支,可以使用以下命令:

1
git branch --set-upstream-to origin/my_branch

或者使用短选项:

1
git branch -u origin/my_branch

配置 push.default

可以更改 push 的工作方式:

1
git config --global push.default current

这样在执行 git push -u 时,会创建同名的远程分支并进行跟踪。

其他设置方法

  • 创建分支时设置跟踪
1
git checkout -b my-branch -t origin/my-branch
  • 设置全局配置自动关联上游分支
1
git config --global branch.autosetupmerge always

如果采用更注重变基的工作流程,也可以使用 branch.autosetuprebase

1
git config --global branch.autosetuprebase always

核心代码

配置自动设置远程跟踪

1
git config --global push.autoSetupRemote true

首次推送分支并设置跟踪

1
git push -u origin my_branch

设置分支的上游分支

1
git branch -u origin/my_branch

最佳实践

使用别名简化操作

可以在 .gitconfig 文件中设置别名:

1
2
[alias]
pushup = "!git push --set-upstream origin $(git symbolic-ref --short HEAD)"

.bashrc.zshrc 文件中设置别名:

1
2
3
4
alias gpo="git pushup"
alias gpof="gpo -f"
alias gf="git fetch"
alias gp="git pull"

自动化拉取操作

创建一个 git-pulldown 函数,实现自动检测并设置远程合并目标,然后进行拉取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
git-pulldown() {
head="$(git rev-parse --abbrev-ref HEAD)"

if [[ $(git config "branch.$head.merge") ]]; then
git pull
else
if [[ $(git ls-remote --heads origin $head) ]]; then
git branch --set-upstream-to origin/$head
git pull
else
echo "Branch $head has no upstream or merge target! You will likely have to push first, or manually configure it"
return 1
fi
fi
}

常见问题

配置不生效

如果 git config --global push.default current 不生效,可能是项目有本地的 Git 配置,可以更新项目的本地配置:

1
git config --local push.default current

忘记使用 -u 选项

如果在首次推送分支时忘记使用 -u 选项,可以使用以下命令设置上游分支:

1
git branch --set-upstream-to=origin/$(git branch --show-current)

然后可以使用 git reset --hard @{u} 重置本地更改到远程分支的状态。


如何避免使用 'git branch --set-upstream' 并默认自动设置远程跟踪
https://119291.xyz/posts/how-to-avoid-git-branch-set-upstream/
作者
ww
发布于
2025年5月22日
许可协议