你要求我不要告诉我你想合并哪个分支

TL; DR:我有一个“追踪”分支,我不能拉。

所以在这里,我在“桶-4”:

$ git branch -v bucket-1 410f7b5 * gh-53 * gh-48 * "Share App" bucket-2 7ed70a2 * upgrade to SOLR 3.3.0 bucket-3 400ffe4 * emergency fix prod issue * bucket-4 64c2414 Merge branch 'bucket-3' into bucket-4 master 8dc4854 [ahead 1] * gh-73 

我想从我的遥控器中进行更改:

 $ git pull You asked me to pull without telling me which branch you want to merge with, and 'branch.bucket-4.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 (eg '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 "bucket-4"] remote = <nickname> merge = <remote-ref> [remote "<nickname>"] url = <url> fetch = <refspec> See git-config(1) for details. 

嗯,奇怪,我以为我已经加了“桶-4”作为跟踪分支。 让我们来看看:

 $ git remote show origin * remote origin Fetch URL: git@github.com:abcd/main.git Push URL: git@github.com:abcd/main.git HEAD branch (remote HEAD is ambiguous, may be one of the following): bucket-3 master Remote branches: bucket-1 tracked bucket-2 tracked bucket-3 tracked bucket-4 tracked master tracked Local branches configured for 'git pull': bucket-1 merges with remote bucket-1 bucket-2 merges with remote bucket-2 bucket-3 merges with remote bucket-3 master merges with remote master Local refs configured for 'git push': bucket-1 pushes to bucket-1 (up to date) bucket-2 pushes to bucket-2 (up to date) bucket-3 pushes to bucket-3 (up to date) bucket-4 pushes to bucket-4 (local out of date) master pushes to master (fast-forwardable) 

事实上,桶4被标记为“跟踪”,但不知何故它被configuration为推,但不拉。

看看我的.git/config文件,我发现我的大部分分支都有“远程”和“合并”条目,但是对于bucket-4没有。 如果没有这个,它甚至被认为是“跟踪的”?

 [remote "origin"] url = git@github.com:abcd/main.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [branch "rel-2011-07-07"] remote = origin merge = refs/heads/rel-2011-07-07 [branch "bucket-1"] remote = origin merge = refs/heads/bucket-1 [branch "bucket-2"] remote = origin merge = refs/heads/bucket-2 [branch] autosetupmerge = true [branch "bucket-3"] remote = origin merge = refs/heads/bucket-3 

我看到这里可能的解决scheme是在我的configuration文件中为bucket-4添加remote/merge条目。 但是如果没有这个,它被认为是“跟踪的”? 桶-4是在本地创build的,然后从这个回购推送到服务器,所以我怀疑,我没有设置适当的跟踪这个分支。

为了让所有地方分支机构能够在将来正确跟踪他们的遥控器,是否可以添加一些configuration?

它说bucket-4 pushes to bucket-4只是因为推送分支时的默认方式是将它推到远程的名字上。 (请注意, 即使本地分支正在跟踪远程跟踪分支,并且远程跟踪分支对应于远程存储库中名称不同的分支,这仍然是默认设置。)

最简单的方式来设置你的bucket-4bucket-4之间的联系origin是确保下次你推,你做:

 git push -u origin bucket-4 

或者,你可以这样做:

 git branch --set-upstream bucket-4 origin/bucket-4 

直接回答你的一些问题:

如果没有这个,它甚至被认为是“跟踪的”?

在这种情况下,它不是 – 它不跟踪远程跟踪分支,如果没有branch.bucket-4.mergebranch.bucket-4.remote在你的gitconfiguration。 从git remote show origin的输出只是显示分支默认推送的位置。

为了让所有地方分支机构能够在将来正确跟踪他们的遥控器,是否可以添加一些configuration?

我不认为有。 在本地创buildbucket-4 ,如我所假设的那样,远程跟踪分支不存在,因此无法在此处设置 – 这将是非常混乱的默认行为。 你只需要记住添加-u到你的第一个分支的git push到它的上游仓库。

我希望这是一些帮助。

git branch --set-upstream <branch> origin/<branch>已被弃用,至less从1.8.2.3(我的版本)开始。

改用git branch --set-upstream-to=origin/<branch> <branch>