当我使用本地分支
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 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 的行为)并且您还希望设置上游跟踪,那么它非常有用。最有可能从此选项中受益的工作流程是简单的中央工作流程,其中所有分支在远程上都应具有相同的名称。
一种可能的解决方案是将 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 行为。
这不是 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
时,您会收到提醒)。