您的配置指定与远程的<branch name =“”>合并,但是没有提取此类引用。

时间:2016-05-02 14:03:05

标签: git branch bitbucket tortoisegit pull

我收到了拉错误:

  

您的配置指定与ref合并   'refs / heads / feature / Sprint4 / ABC-123-Branch'来自遥控器,但没有   引用了这样的参考文献。

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

我的配置文件如下:

[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

22 个答案:

答案 0 :(得分:73)

这意味着什么

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

怎么做

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

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

讨论

您必须正在运行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)根据{{​​1}}部分的指示,需要合并(或变基)所需的任何参数。在这种情况下,您的[branch ...]部分表示要从[branch "feature/Sprint4/ABC-123-Branch"]获取,然后与名称origin下找到的任何ID合并。

由于在该名称下找不到任何内容,refs/heads/feature/Sprint4/ABC-123-Branch会抱怨并停止。

如果您将其作为两个单独的步骤git pull然后git fetch(或git merge)运行,那么您的Git会查看您的缓存git rebase远程跟踪分支机构看看要合并或重组的内容。如果一次这样的分支,您可能仍然拥有远程跟踪分支。在这种情况下,您不会收到错误消息。如果从未有过这样的分支,或者您已经remotes/origin/运行了git fetch(删除了死亡的远程跟踪分支),那么您没有相应的远程跟踪分支,那么您会收到投诉,但它会引用--prune

在任何一种情况下,我们都可以得出结论,origin/feature/Sprint4/ABC-123-Branch目前在名为feature/Sprint4/ABC-123-Branch的遥控器上不存在。{/ p>

它可能确实存在,您可能已经从远程跟踪分支创建了本地分支。如果是这样,您可能仍然拥有远程跟踪分支。您可能会调查以查看谁从远程移除了分支,以及为什么,或者您可能只是推送某些内容来重新创建它,或者删除远程跟踪分支和/或本地分支。

1 好吧,它至少会承认。但除非他们专门隐藏了一些引用,否则列表中包含所有内容。

答案 1 :(得分:32)

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

答案 2 :(得分:32)

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

git checkout correct-branch-name

git pull(您将看到这个&#34;您的配置指定了...&#34;)

git branch --unset-upstream

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

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

答案 3 :(得分:4)

这是一个更常见的错误,因为许多项目将其master分支移至另一个名称,例如mainprimarydefaultrootreferencelatest等,如Github plans to replace racially insensitive terms like ‘master’ and ‘whitelist’所述。

要修复此问题,请先找出项目正在使用的内容,您可以通过其github,gitlab或其他git服务器找到它们。

然后执行以下操作以捕获当前配置:

$ git branch -vv
...
* master  968695b [origin/master] Track which contest a ballot was sampled for (#629)
...

找到描述master分支的行,并注意将远程回购称为originupstream还是其他名称。

然后使用该信息,将分支名称更改为新名称,例如如果显示您当前正在跟踪origin/master,请替换为main

git branch master --set-upstream-to origin/main

您还可以重命名自己的分支,以避免将来造成混乱:

git branch -m main

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

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

答案 7 :(得分:2)

在我的情况下,我只是缺少远程分支上的初始提交,因此本地分支没有找到任何东西来提取并且它正在给出该错误消息。

我做了:

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

答案 8 :(得分:2)

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

答案 9 :(得分:1)

我在 master/main 分支上遇到了类似的问题。就我而言,我的硬盘上没有足够的可用空间。释放一些空间后,它起作用了。

我认为这是因为文件 /.git 需要一些空间来编辑其文件。 例如文件:'refs/heads/feature/Sprint4/ABC-123-Branch'

答案 10 :(得分:1)

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

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

git config --global core.ignorecase true

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

答案 11 :(得分:0)

在我的情况下,无法在新项目中获取 master。

在我把它放在命令行后它就起作用了,

git config --global http.sslVerify false

参考:https://confluence.atlassian.com/bitbucketserverkb/can-t-access-bitbucket-server-with-git-issuer-certificate-is-invalid-779171808.html

答案 12 :(得分:0)

检查或区分大小写

就我而言,我的分支名称(远程)有大写字母,例如:BranchName。 一不小心,我在本地机器上创建了一个分支branchname(全部小写)并将上游设置为相同,出现了这个错误。

解决办法: 我删除了本地存储库,再次克隆它,然后检出到 BranchName

答案 13 :(得分:0)

就我而言,我重命名了 Github 上的分支,作为回报,它告诉我执行以下命令:

默认分支已重命名!

main is now named <new_name>

如果你有一个本地克隆,你可以通过运行来更新它:

git branch -m main <new_name>
git fetch origin
git branch -u origin/<new_name> <new_name>
git remote set-head origin -a

答案 14 :(得分:0)

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

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

答案 15 :(得分:0)

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

答案 16 :(得分: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

成功了

答案 17 :(得分:0)

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

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

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

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

答案 20 :(得分: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 - 对我来说,删除本地文件夹并再次克隆更容易。

答案 21 :(得分:-1)

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