我收到了拉错误:
您的配置指定与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
答案 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
分支移至另一个名称,例如main
,primary
,default
,root
, reference
,latest
等,如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
分支的行,并注意将远程回购称为origin
,upstream
还是其他名称。
然后使用该信息,将分支名称更改为新名称,例如如果显示您当前正在跟踪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
中的-Team
和t
中的-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
答案 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)
如果另一个拉动正常,则表示您的互联网未连接。