您的配置指定要与远程服务器上的<分支名称>合并,但是没有获取任何此类引用。


201

我收到拉动此错误:

您的配置指定要与远程的ref'refs / heads / feature / Sprint4 / ABC-123-Branch'合并,但未获取此类ref。

其他任何分支都不会出现此错误。
该分支的特殊之处在于它是从另一个分支的上一次提交创建的。

我的配置文件如下所示:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

您可以共享用于合并的命令吗?
dchayka '16

1
当远程分支已被删除时,可能会发生此问题。仔细检查它是否真的存在。
Benny Neugebauer

4
未来的读者:如果您知道远程分支存在,请检查是否忽略大小写。我已经设置了一个本地分支来跟踪一个远程分支,但是以所有小写字母键入了远程的名称。只需重新配置本地即可跟踪origin / BranchName而不是origin / branchname
Jerreck

我只是遇到了这个错误,问题比下面的答案要简单得多,我失去了VPN连接。因此,如果git无法访问远程原始服务器,这也是您得到的错误。
本·瑟利

我的git服务器已退出。这就是原因。
德拉萨维亚

Answers:


147

这是什么意思

您的上游(即您呼叫的远程origin站点)不再具有,或者可能从未拥有(不可能仅从此信息中得知)一个名为的分支feature/Sprint4/ABC-123-Branch。有一个特别普遍的原因:有人(可能不是您,或者您会记得)删除了另一个Git存储库中的分支。

该怎么办

这取决于您想要什么。请参阅下面的讨论部分。您可以:

  • 在远程上创建或重新创建分支,或者
  • 删除您的本地分支,或
  • 您能想到的其他任何东西。

讨论区

您必须正在运行git pull(如果正在运行git merge,则会收到其他错误消息,或者根本没有错误消息)。

当您运行时git fetch,您的Git将url根据[remote "origin"]您配置部分下面的内容与另一个Git联系。这混帐运行一个命令(upload-pack),除其他事项外,将您的 Git的所有分支的列表。您可以git ls-remote用来查看其工作原理(尝试一下,这是有教育意义的)。这是我自己在Git存储库上运行时得到的代码片段git

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

这些refs/heads/条目列出了存在于远程服务器上的所有分支1以及相应的提交ID(对于refs/tags/条目,这些ID可能指向标记对象而不是提交)。

您的Git会获取每个分支名称,并根据同一部分中的行进行更改。在这种情况下,你的Git替代用,例如。您的Git使用遇到的每个分支名称来执行此操作。fetchremoterefs/heads/masterrefs/remotes/origin/master

它还将原始名称记录在特殊文件中FETCH_HEAD(如果您查看自己的.git目录,则可以看到此文件)。此文件保存获取的名称和ID。

git pull命令是为了方便快捷:它git fetch在适当的远程上运行,然后git merge(如指示git rebase)使用所需的参数(如本[branch ...]节所述)合并(或变基)。在这种情况下,您的[branch "feature/Sprint4/ABC-123-Branch"]部分说要从中获取origin,然后与在名称下找到的ID合并refs/heads/feature/Sprint4/ABC-123-Branch

由于没有发现该名称,因此git pull抱怨并停止。

如果将其作为两个单独的步骤运行,git fetch然后再执行git merge(或git rebase)操作,则Git会查看您缓存的remotes/origin/远程跟踪分支,以查看要与之合并或以其为基础的内容。如果在同一时间这样的一个分支,你仍然可以拥有远程跟踪分支。在这种情况下,您不会收到错误消息。如果从来没有这样的分支,或者如果您git fetch使用过它--prune(它删除了无效的远程跟踪分支),那么您就没有相应的远程跟踪分支,您会收到投诉,但会引用它origin/feature/Sprint4/ABC-123-Branch

无论哪种情况,我们都可以得出结论,feature/Sprint4/ABC-123-Branch在名为的远程上现在不存在origin

它可能确实存在一次,并且您可能是从远程跟踪分支创建了本地分支。如果是这样,您可能仍然具有远程跟踪分支。您可能会进行调查,以了解谁从远程站点删除了该分支机构,以及原因,或者您可能只是推送了一些内容以重新创建它,或者删除了远程跟踪分支机构和/或本地分支机构。


1好吧,至少它要接受的所有内容。但是除非他们特别隐藏了一些引用,否则列表将包括所有内容。


感谢您解释git pull命令的实际作用。我能够通过运行git fetch然后合并来解决我的问题。
fizch

11
要删除本地存储库中不存在的远程分支引用,请使用git remote prune origin
Yoav

1
@ Ben-Uri:是的,或者在您的配置中运行git fetch --prune origin或设置fetch.prunetrue(三个都打算做相同的事情,尽管在Git的一些版本中,其中一些并不十分可靠)。
torek

1
您需要git checkout <your remote branch>一切都很好(在某些情况下)。
Alexander Shtang '19年

2
@JonathanBenn:您可以使用git branch --set-upstream-to=origin/master master来为本地切换上游设置master。删除并重新创建具有副作用(假设您使用DWIM样式git checkout master来创建它),另外还有迫使您master匹配的副作用origin/master
托雷克(Torek)

71

如果您/某人重命名了分支,也会发生这种情况。因此,请按照以下步骤操作(如果您知道分支名称已重命名),假设先前的分支名称为as,wrong-branch-name并且有人将其重命名为correct-branch-nameSo。

git checkout correct-branch-name

git pull (您将看到此“您的配置已指定..”)

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (您不会收到较早的消息)


1
甚至没有必要,git push如果当前分支位于其远程站点后面,它将无法正常工作。git pull origin correct-branch-name足够。
皮埃尔

1
上面设置上游的命令是错误的。在--unset-upstream操作之后执行git pull,在pull的输出中可以看到一个错误,使用命令设置上游,如下所示,git branch --set-upstream-to = origin / <branch > mybranch
Ankit Marothi,

从我的存储库中删除了一些大文件之后,我需要很好的工作,并且需要回退到我刚刚创建的新存储库
larrytech

40

检查您的远程分支是否可拉。我遇到了同样的问题,最终意识到有人删除了远程分支。


4
对我来说也是一样!
Aerin

3
在请求请求之后,合并(即执行合并的人员)可以选择删除已合并到目标分支中的分支。如果您尝试在此时拉,则会收到此错误。
Artokun

没错:)
Malhaar Punjabi

7

对我来说,这是一个区分大小写的问题。我的本地分支是Version_feature2,而不是Version_Feature2。我使用正确的大小写重新检查了分支,然后git pull起作用了。


2
原来这也是我的问题。对于相当长/复杂的分支名称,这不是显而易见的。
哈康K. Olafsen

6

当原始分支名称存在大小写问题时,也可能会收到此错误。

例如:origin分支为team1-Team,而本地分支的结帐为team1-team。然后,这T-Teamt-team能引起这样的错误。以我为例。因此,通过使用origin分支的名称更改本地名称,解决了该错误。


6

以我为例,我只是在远程分支上缺少初始提交,因此本地分支没有找到任何要提取的内容,并且正在给出该错误消息。

我做了:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

当实际原因是磁盘已满时,我遇到了类似的错误。删除一些文件后,git pull开始按预期工作。


4

我一直遇到这个问题。就我而言,@ Jerreck关于分支名称中大小写差异的评论是导致此错误的原因。一些Windows工具不区分大小写。

要在git中关闭区分大小写,请运行以下命令:

git config --global core.ignorecase true

请注意,这不仅会影响分支名称。例如,如果您在同一目录中有“ Foo.h”和“ foo.h”(在为Windows构建软件时不是一个好主意),那么我怀疑您无法关闭区分大小写的功能。



1

就我而言,我删除了当前分支所源自的原始分支。所以在.git / config文件中,我有:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5已删除。我用相同的分支名称替换了它:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

而且有效


1

您可以通过运行以下命令轻松地将本地分支链接到远程分支:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

对我来说,发生这种情况是因为我使用Web界面将一个分支dev合并到master中,然后尝试使用在dev分支上打开的VSCode进行同步/拉动(很奇怪,如果没有这个错误,我无法更改为master。)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

没找到refs / heads / dev很有道理-对我来说,删除本地文件夹并再次克隆更容易。


0

在磁盘已满时执行“ git pull”时,我刚好收到此错误。创建了一些空间,一切又开始正常工作。


0

您可以~/.gitconfig在主文件夹中编辑文件。这是所有--global设置的保存位置。

或者,使用git config --global --unset-all remote.origin.url并在运行git fetch库URL 后运行。


0

我遇到了同样的问题,即我当前的分支是dev,而我正在签到MR分支,然后进行git pull。我采取的一个简单的解决方法是,我为MR Branch创建了一个新文件夹,并在其中进行了git pull和git clone的操作。

因此,基本上我维护了用于将代码推送到不同分支的不同文件夹。


0

当我没有使用正确的大小写时,我只是遇到了同样的错误。我可以签出“集成”。Git告诉我执行一个git pull更新我的分支。我做到了,但是收到了提到的错误。正确的分支名称为“ Integration”,大写字母“ I”。当我签出该分支并将其拉出时,它可以正常工作。


-2

如果另一个拉动起作用,则表明您的互联网没有连接。


许多不赞成票,但这是我收到此错误的原因。我有Internet,但已将VPN丢失到git服务器。重新连接到VPN后,拉动效果很好。
Ben Thurley
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.