使用git自动跟踪远程分支

lim*_*imp 12 git

当我使用本地分支时mybranch,我希望能够origin mybranch使用git pushand和push git pull.正因为如此,我不得不不厌其烦地写出来git push origin mybranchgit 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
Run Code Online (Sandbox Code Playgroud)

如果我进入git branch --set-upstream-to=origin/mybranch mybranch,那么它的工作原理.但这几乎和以前的命令一样乏味.我可以让git做这个默认行为吗?我已经看到了类似的问题并且答案倾向于建议更新版本的git这样做,但我使用git版本2.1.3,这是相当新的,所以它不能只是那样.

Lor*_*ren 578

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

运行以更新您的配置:

git config --global --add --bool push.autoSetupRemote true
Run Code Online (Sandbox Code Playgroud)

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

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

文档:

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

推.autoSetupRemote

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

  • 我添加了有关全局的解释。 (9认同)
  • 为什么使用“--add”标志?这个设置可以有多个选项吗?在这种情况下也不需要 `--bool` 。 (9认同)
  • 我发现告诉用户使用“--global”而不告诉用户他们更改了机器上**所有**存储库的配置是很危险的。 (4认同)

tor*_*rek 12

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

如果您正在创建mybranch本地与git checkout 它已经存在,如origin/mybranch在你的本地库,你可以简单地git checkout mybranch和当地的git会看到origin/mybranch存在并创建本地mybranchorigin/mybranch作为其上游.

另一方面,如果origin/mybranch还不存在并且您在mybranch本地创建git checkout -b或者类似,则无法将其设置为跟踪尚不存在的上游分支(您可以配置为跟踪该分支但是您将偶尔抱怨上游版本不存在).

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

git push -u origin mybranch
Run Code Online (Sandbox Code Playgroud)

告诉你的本地git推mybranch送到,origin 并且一旦完成,就设置origin/mybranch为跟踪分支mybranch.

请注意,这与运行相同git branch --set-upstream-to:您只需执行一次,然后在本地设置它,您不必再次执行此操作.它更方便,因为你可以与push创建分支的人一起做origin.但是你仍然需要记住这样做(一次;当你git push没有时,你会得到提醒-u origin mybranch).


izo*_*ica 12

一种可能的解决方案是将你的git推送行为修改为current(注意,这也会产生一些其他的副作用).您可以通过~/.gitconfig直接修改(作为文件并假设您使用的是Linux)或执行以下操作来执行此操作:

git config --global push.default current
Run Code Online (Sandbox Code Playgroud)

现在,当你push,git将自动将你当前的分支推送到具有相同名称的远程分支,即使你没有明确指定它.此外,如果您当前的分支没有远程等效项,则将创建一个远程分支,并设置当前分支以跟踪它(git push -u origin new_branch与单个相同git push).还要看一下这个问题,其中详细描述了git push行为.

  • 和`git config --global pull.default current`一起自动拉动分支,其名称与原始分支的名称相同. (5认同)
  • @AlexanderRodin 不工作,仍然要求使用 git `2.15.0` 设置上游 (3认同)
  • 我将 `push.default` 设置为 `current`,但这并没有在第一次推送时设置远程跟踪。`git config --global push.default upstream` 可能会有所帮助。 (3认同)
  • @AlexanderRodin此配置选项无处记录。您确定它存在吗? (2认同)