使用git自动跟踪远程分支

问题描述 投票:0回答:4

当我使用本地分支

mybranch
时,我希望能够仅使用
origin mybranch
git push
git pull
推送和拉取。事实上,我必须繁琐地写出
git push origin mybranch
git pull origin mybranch
。例如,如果我尝试仅使用
git pull
,我会得到:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> mybranch

如果我输入

git branch --set-upstream-to=origin/mybranch mybranch
,那么它就起作用了。但这几乎和前面的命令一样乏味。我可以让 git 将其作为默认行为吗?我见过类似的问题,答案往往表明较新版本的 git 可以做到这一点,但我使用的是 git 版本 2.1.3,这是相当新的,所以它不能只是这样。

git
4个回答
612
投票

从 git 2.37.0 开始,现在可以通过 git 配置实现这一点。

运行以更新您的配置:

git config --global --add --bool push.autoSetupRemote true

然后

git push
将自动设置远程分支。

注意:

--global
标志意味着这将适用于您计算机上的所有 git 命令(无论它是哪个存储库),您可以省略该标志以使其特定于您计算机上的单个存储库。

文档:

https://git-scm.com/docs/git-config#Documentation/git-config.txt-pushautoSetupRemote

push.autoSetupRemote

如果设置为“true”,则当当前分支不存在上游跟踪时,假设 --set-upstream 默认推送;此选项与 push.default 选项 simple、upstream 和 current 一起生效。如果默认情况下您希望将新分支推送到默认远程(如 push.default=current 的行为)并且您还希望设置上游跟踪,那么它非常有用。最有可能从此选项中受益的工作流程是简单的中央工作流程,其中所有分支在远程上都应具有相同的名称。


60
投票

一种可能的解决方案是将 git Push 行为修改为

current
(请注意,这还会产生一些其他副作用)。您可以通过直接修改
~/.gitconfig
(作为文件,假设您使用的是 Linux)或执行:

来做到这一点
git config --global push.default current

现在,当您

push
时,git 会自动将您当前的分支推送到具有相同名称的远程分支,即使您没有明确指定。此外,如果您当前的分支没有等效的远程分支,则会创建一个远程分支,并将您当前的分支设置为跟踪它(与
git push -u origin new_branch
相同,但只有一个
git push
)。另请查看 this Question,其中详细描述了 git Push 行为。


23
投票

这不是 github,而是你本地的 git,它完成了这一切。

如果您使用

mybranch
在本地创建 
git checkout 并且 它已经作为
origin/mybranch
存在于本地存储库中,您可以简单地
git checkout mybranch
,您的本地 git 将看到
origin/mybranch
存在并创建本地
mybranch 
origin/mybranch
作为其上游。

另一方面,如果

origin/mybranch
尚不存在,并且您正在使用
mybranch
或类似工具在本地创建
git checkout -b
,则您无法真正将其设置为跟踪尚不存在的上游分支(您可以配置它来跟踪该分支,但您偶尔会收到上游版本不存在的抱怨)。

在这种特殊情况下,在first推送(将在上游创建分支的推送)上,您可以使用:

git push -u origin mybranch

它告诉你本地的git将

mybranch
推送到
origin
,完成后,将
origin/mybranch
设置为
mybranch
的跟踪分支。

请注意,这与运行

git branch --set-upstream-to
相同:您执行一次,之后它会在本地设置,您无需再次执行。它更方便,因为您可以与在 push
 创建分支的 
origin
 一起执行此操作。但您仍然必须记住执行一次(一次;当您运行 
git push
 而不使用 
-u origin mybranch
 时,您会收到提醒)。


0
投票
以下是在

.gitconfig

 文件中进行设置的示例:

[init] defaultBranch = main [pull] rebase = false [push] # Automatically set origin as the remote for current branch autoSetupRemote = true

注意:为了简单起见,我排除了配置文件中的其他部分。

PS,如果能看到包含所有选项的配置参考,那真是太酷了。我发现了这个:

https://web.mit.edu/git/www/git-config.html

© www.soinside.com 2019 - 2024. All rights reserved.