为什么我需要做`

我在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

......你第一次推动那个分支。 你只需要做一次,然后以与git branch --set-upstream相同的方式设置分支和origin分支之间的关联。

我个人认为,必须明确地建立分支和远程分支之间的关联是一件好事。 对于git pushgit pull来说,这些规则是不同的,这只是一种耻辱。


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

更新2012-10-11:显然我不是唯一一个容易犯错的人! 感谢VonC指出,git 1.8.0引入了更明显的git branch --set-upstream-to ,如果你在分支my_branch上,可以按如下方式使用my_branch

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

...或者选择较短的选项:

git branch -u origin/my_branch

这个变化及其推理在git 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部分的origin my_branch ,因此你可以这样做:

git push -u

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


你可以简单地

git checkout -b my-branch origin/whatever

首先。 如果将branch.autosetupmergebranch.autosetuprebase (我的最爱)设置为always (默认为true ), my-branch会自动跟踪origin/whatever

请参阅git help config

链接地址: http://www.djcxy.com/p/4539.html

上一篇: Why do I need to do `

下一篇: Python's in