您的配置指定与合并 从遥控器,但没有这样的参考。

问题描述 投票:104回答:14

我得到这个错误拉:

您的配置指定从远程参考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
git branch bitbucket tortoisegit pull
14个回答
79
投票

What this means

你的上游 - 你称之为origin的遥控器 - 不再拥有,或者从来没有(仅从这些信息中无法分辨)一个名为feature/Sprint4/ABC-123-Branch的分支。有一个特别常见的原因:有人(可能不是你,或者你记得)删除了其他Git存储库中的分支。

What to do

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

  • 在遥控器上创建或重新创建分支,或
  • 删除您的本地分支,或
  • 你能想到的任何其他事情。

Discussion

您必须运行git pull(如果您运行git merge,您将收到不同的错误消息,或根本没有错误消息)。

当你运行git fetch时,你的Git会根据你配置的url部分下面的[remote "origin"]行与另一个Git联系。那个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获取每个分支名称,并根据同一个fetch部分中的remote行更改它。在这种情况下,你的Git用refs/heads/master替换refs/remotes/origin/master。你的Git会对每个遇到的分支名称执行此操作。

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

git pull命令是一个方便捷径:它在适当的遥控器上运行git fetch,然后git merge(或者,如果这样指示,git rebase),需要根据[branch ...]部分的指示合并(或变基)所需的任何参数。在这种情况下,你的[branch "feature/Sprint4/ABC-123-Branch"]部分说从origin获取,然后合并在refs/heads/feature/Sprint4/ABC-123-Branch名下找到的任何ID。

由于在这个名字下没有找到任何东西,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,它至少应该承认所有这一切。但除非他们专门隐藏了一些引用,否则列表中包含所有内容。


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文件。这是所有 - 全局设置被保存的地方。

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


0
投票

我面临同样的问题,我现在的分支是开发人员,我正在检查MR分支并随后进行git pull。我采取的一个简单的解决方法是我为MR Branch创建了一个新文件夹,然后git拉到那里然后是git clone。

所以基本上我维护了不同的文件夹,用于将代码推送到不同


0
投票

在我的情况下,我删除了我当前分支派生自的原始分支。所以在.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

它起作用了


-2
投票

如果另一个拉动正常,则表示您的互联网未连接。


35
投票

检查您的远程分支是否可用。我有同样的问题,终于意识到远程分支被某人删除了。


34
投票

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

git checkout correct-branch-name

git pull(你会看到这个“你的配置指定..”)

git branch --unset-upstream

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

git pull(你不会得到更早的消息)


3
投票

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


3
投票

当原始分支名称出现一些问题时,也可以收到此错误。

例如:origin分支是team1-Team,本地分支已经结帐为team1-team。然后,T中的-Teamt中的-team会导致这样的错误。这发生在我的情况下。因此,通过使用origin分支的名称更改本地名称,错误得以解决。


2
投票

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


2
投票

在我的情况下,我只是缺乏远程分支上的初始提交,因此本地分支没有找到任何拉动,它给出了错误消息。

我做了:

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

2
投票

只需检查是否有人在远程删除了分支。


1
投票

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

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

git config --global core.ignorecase true

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

© www.soinside.com 2019 - 2024. All rights reserved.