git - 为什么我需要做'--set-upstream '所有的时间?

  显示原文与译文双语对照的内容

我在Git中创建了一个新分支:

 
git branch my_branch

 

按下它:


git push origin my_branch

现在说有人在服务器上做了一些更改,我想从 origin/my_branch 拉。 我知道:

 
git pull

 

但我得到了:


You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

 [branch"my_branch"]
 remote = <nickname>
 merge = <remote-ref>

 [remote"<nickname>"]
 url = <url>
 fetch = <refspec>

See git-config(1) for details.

我了解到我可以让它使用:


git branch --set-upstream my_branch origin/my_branch

但是为什么我需要为我创建的每个分支做这个? 如果我把 my_branch 推入 origin/my_branch,那么我想把 origin/my_branch 拉到 my_branch? 如何使它的成为默认行为?

时间:

一个快捷方式,它不依赖于 git branch --set-upstream的语法 1 就是:


git push -u origin my_branch

你第一次推那个树枝。 你只需要做一次,你就可以在你的分支和 origin 之间建立关联,与 git branch --set-upstream 一样。

就个人而言,我认为最好是设置分支之间的关联,并显式地设置远程。 于 git push 相关和 git pull, 它只不过是一种浪费可耻的行为,这些条款是会有所不同,


1 这听起来可能很傻,但我经常忘记指定当前分支,假设是默认的- 它不是,结果最令人困惑:)

更新 2012-10-11: 显然我不是唯一发现容易出错的人 ! 多亏了 VonC,你可以指出 git 1.8.0引入了更明显的git branch --set-upstream-to,如果你在分支 my_branch 上,可以使用它:


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

。或者使用短选项:


git branch -u origin/my_branch

这里更改及其推理在 1.8.0发行说明中描述,发布候选 1:

这很有吸引力 git branch --set-upstream origin/master 但是,这告诉Git安排本地分支 origin/master 与当前签出的分支集成,这很可能是用户所不希望的。 这里选项已经过时;请改用新的--set-upstream-to ( 使用 short-and-sweet -u ) 选项。

你可以通过较少的键入来实现这种情况。 首先,改变你的推送方式:


git config --global push.default current

这将推断 origin my_branch 部件,因此你可以:

 
git push -u

 

这将创建具有相同名称的远程分支并跟踪它。

你可以简单


git checkout -b my-branch origin/whatever

首先,如果你将 branch.autosetupmerge 或者 branch.autosetuprebase ( 我的收藏) 设置为 always ( 默认为 true ),my-branch 将自动跟踪 origin/whatever

查看 git help config

你也可以显式地告诉 git pull 哪个远程分支要请求( 就像在错误消息中提到的):

git pull <remote-name> <remote-branch>

但是,你要小心, 如果你是在不同的分支和一个显式的做下拉,refspec你拉将被合并到分支轮到你们了 !

如果你试图跟踪远程计算机上已经存在的分支,请执行以下操作。 原始/somebranch ),但还没有在本地签出,你可以:


$ git checkout --track origin/somebranch

注意:'-t'是'--track'选项的缩短版本。

这将在蝙蝠上建立相同的关联。

你可以通过两种方式设置上游简单。 首先创建分支:


git branch -u origin my_branch

或者在创建分支之后,你可以使用这里命令。


git push -u origin my_branch

你还可以在一个命令中分支,签出和设置上游:


git checkout -b mybranch --track origin/mybranch

我个人的偏好是在two-step命令中执行这里操作:


git checkout -b mybranch
git push -u origin mybranch

...