【问题标题】:You asked me to pull without telling me which branch you want to merge with你让我拉而不告诉我你想合并哪个分支
【发布时间】:2011-11-15 08:10:26
【问题描述】:

TL;DR:我有一个无法拉出的“跟踪”分支。

所以我在“bucket-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 (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 "bucket-4"]
    remote = <nickname>
    merge = <remote-ref>

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

See git-config(1) for details.

嗯,奇怪,我以为我已经添加了“bucket-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)

确实,bucket-4 被标记为“已跟踪”,但不知何故,它被配置为推送,而不是拉取。

查看我的.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

我看到这里可能的解决方案是在我的配置文件中为 bucket-4 添加remote/merge 条目。但是如果没有这个,它怎么被认为是“跟踪”的呢? bucket-4 是在本地创建的,然后从这个 repo 推送到服务器,所以我怀疑我没有为这个分支正确设置跟踪。

我可以添加一些配置以使所有本地分支机构将来都能正确跟踪其遥控器吗?

【问题讨论】:

  • 这个问题为我指明了正确的方向,我只需要在我的 .git/config 文件中为我试图拉取的分支添加一个条目,然后它就可以正常工作了。
  • 是的,我也是,方法如下 Mark Longair 所述,使用 git branch --set-upstream bucket-4 origin/bucket-4

标签: git git-pull


【解决方案1】:

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

origin 中设置bucket-4bucket-4 之间的关联的最简单方法是确保下次推送时,您这样做:

git push -u origin bucket-4

或者,您可以这样做:

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

直接回答您的几个问题:

如果没有这个,它怎么会被认为是“被跟踪的”?

在这种情况下,它不是 - 如果您的 git 配置中没有 branch.bucket-4.mergebranch.bucket-4.remote,它不会在任何意义上跟踪远程跟踪分支。 git remote show origin 的输出只是向您展示了默认情况下分支将被推送到哪里。

我可以添加一些配置以使所有本地分支机构将来都能正确跟踪他们的遥控器吗?

我认为没有。当您在本地创建 bucket-4 时,正如我假设的那样,远程跟踪分支不存在,因此无法在此时设置它 - 这将是非常令人困惑的默认行为。您只需要记住将 -u 添加到该分支的第一个 git push 到其上游存储库。

希望对你有所帮助。

【讨论】:

  • git branch --set-upstream 在拉动之前为我工作得很好
  • git branch --set-upstream bucket-4 origin/bucket-4 为我工作:-)
  • 不想推送怎么办?我有同样的问题,但我不想从发生此问题的存储库中推送。我刚刚切换了远程来源,我想为显然不再被跟踪的分支拉下最新的 HEAD(即使它在我切换远程来源之前被跟踪)。最后我删除了有问题的克隆并从新的来源重新克隆。
  • 实际上,在尝试git --set-upstream &lt;branch&gt; origin/&lt;branch&gt; 时,您会收到一个错误,因为该标志已被弃用。建议使用git branch --track origin/&lt;branch&gt;--set-upstream-to 作为建议的第二个答案。我想答案可能会更新,@MarkLongair?
  • 感谢您的建议,@AymDev - 我已经做出了改变。
【解决方案2】:

git branch --set-upstream &lt;branch&gt; origin/&lt;branch&gt; 至少从 1.8.2.3(我的版本)开始被弃用。

请改用git branch --set-upstream-to=origin/&lt;branch&gt; &lt;branch&gt;

【讨论】:

猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
相关资源
最近更新 更多