您的配置指定合并分支名称>从遥控器,但没有这样的裁判。

我得到这个错误拉:

您的配置指定与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
410478 次浏览

这意味着什么

你的上游——你调用__abc0的远程——不再有,或者可能从来没有(仅从这个信息无法判断)一个名为feature/Sprint4/ABC-123-Branch的分支。有一个特别常见的原因:有人(可能不是您,或者您应该记得)删除了另一个Git存储库中的分支。

该怎么做

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

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

讨论

你必须运行git pull(如果你运行git merge,你会得到一个不同的错误消息或根本没有错误消息)。

当你运行git fetch时,你的Git会根据你配置的[remote "origin"]部分下的url行联系另一个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获取每个分支名称,并根据同一remote节中的fetch行对其进行变化。例如,在这种情况下,Git会用refs/remotes/origin/master替换refs/heads/master。Git对遇到的每个分支名称都这样做。

它还在特殊文件FETCH_HEAD中记录原始名称(如果你查看自己的.git目录,就可以看到这个文件)。该文件保存获取的名称和id。

git pull命令是一种方便的捷径:它在适当的远程上运行git fetch,然后按照[branch ...]部分的指示,运行git merge(或者,如果有指示,则运行git rebase)与合并(或重基)所需的任何参数。在这种情况下,你的[branch "feature/Sprint4/ABC-123-Branch"]节表示从origin中获取,然后与在refs/heads/feature/Sprint4/ABC-123-Branch名称下找到的任何ID合并。

由于在该名称下没有找到任何东西,git pull报错并停止。

如果你把它作为两个独立的步骤运行,git fetchgit merge(或git rebase),你的Git会查看你缓存的remotes/origin/远程跟踪分支,看看要合并什么或基于什么。如果有这样一个分支,你可能仍然有远程跟踪分支。在这种情况下,您将不会得到错误消息。如果从来没有这样的分支,或者如果你已经用--prune运行了git fetch(它删除了死亡的远程跟踪分支),所以你没有相应的远程跟踪分支,你会得到一个投诉,但它会引用origin/feature/Sprint4/ABC-123-Branch

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

它可能曾经存在过,并且您可能从远程跟踪分支创建了本地分支。如果是这样,您可能仍然拥有远程跟踪分支。您可能会调查是谁从远程中删除了分支,以及为什么,或者您可能只是推送一些东西来重新创建它,或者删除远程跟踪分支和/或本地分支。


__abc0好吧,至少它要承认去。但除非他们特别隐藏了一些裁判,这个列表包括了一切。

编辑,2020年7月:有一个新的获取协议,可以避免列出一切,只列出你的Git说它正在寻找的名称。这对于具有大量分支和/或标记的存储库很有帮助。但是,如果Git对所有可能的名称都感兴趣,那么仍然可以在这里获得所有名称。

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

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

我做了:

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

如果再拉一次还能用,说明你的网络没有连接。

对我来说,这是因为我合并了一个分支开发到主使用web界面,然后尝试同步/拉使用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 -对我来说,它更容易删除本地文件夹,并再次克隆。

对我来说,这是一个个案敏感性问题。我的本地分支是Version_feature2而不是Version_feature2。我重新检查了我的分支使用正确的套管,然后git拉工作。

检查您的远程分支是否可用。 我也有同样的问题,最后意识到远程分支被某人删除了。< / p >

当源分支名称有大小写问题时,也会收到此错误。

例如:原点分支是team1-Team,本地分支已经签出为team1-team。然后,-Team中的T-team中的t会导致这样的错误。我的情况就是这样。因此,通过用起源分支的名称更改本地名称,错误就得到了解决。

如果你/某人重命名了分支,也会发生这种情况。 因此,请遵循以下步骤(如果您知道分支名称已重命名) 假设之前的分支名称为wrong-branch-name,有人将其重命名为correct-branch-name
git checkout correct-branch-name

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

git branch --unset-upstream


git branch --set-upstream-to=origin/correct-branch-name

旧版本的git git push --set-upstream origin correct-branch-name

git pull(你不会得到之前的消息)

检查一下是否有人远程删除了分支。

当我的磁盘已满时,我刚刚得到了这个错误。创造了一些空间,一切又开始正常工作了。

您可以在主文件夹中编辑~/.gitconfig文件。这是保存所有全局设置的地方。

或者,使用git config --global --unset-all remote.origin.url,然后运行带有存储库url的git fetch

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

关闭git中的大小写敏感功能:

git config --global core.ignorecase true

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

我面临着同样的问题,我当前的分支是开发,我正在检查到MR分支,然后做git拉。我采取的一个简单的解决办法是,我为MR Branch创建了一个新文件夹,并在那里进行git拉,然后进行git克隆。

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

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

这个方法奏效了

我只是得到了相同的错误,当我没有使用正确的情况。 我可以签出'integration'。Git告诉我执行git pull来更新我的分支。我这样做了,但收到了提到的错误。 正确的分支名称是“Integration”加上大写的“I”。 当我检查并拉动那个树枝时,它毫无问题地工作了

您可以通过运行以下命令轻松地将本地分支与远程分支连接起来:

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

这是现在更常见的错误,因为许多项目正在将它们的master分支移动到另一个名称,如mainprimarydefaultrootreferencelatest等,如所讨论的。

要修复它,首先要找出项目现在使用的是什么,你可以通过他们的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

在我的情况下,我重命名了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

我在主/主分支上也有类似的问题。在我的情况下,我的硬盘上没有足够的空闲空间。在腾出一些空间后,它起作用了。

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

检查大小写敏感性

在我的例子中,我的分支名称(remote)是大写字母,例如:BranchName。 意外地,我在我的本地机器上创建了一个分支branchname(全部小写),并将上游设置为相同,出现此错误 < p >解决方案: 我删除了本地存储库,再次克隆它,并签出到BranchName

在我的情况下,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

  1. 重命名本地分支
git branch -m temp
  1. 显示所有分支
git branch -a
  1. 签出特定的远程分支
git checkout main
  1. 删除临时分支
git branch -d temp

分支在Github回购中的拉请求被批准了,它被合并到开发分支中,不再存在。

在我的情况下,回购是暂时不可用的(在维护中)。

我得到了这个确切的错误,但没有一个建议的答案(可能是大小写敏感)是问题。它们可能适用于99%的问题,但还剩下1%。

事实证明,混合使用WSL / Linux文件共享和Windows基目录是问题所在。我正在运行WSL (Ubuntu 20.04),并有一个从Windows访问/编辑的repo,但代码是在WSL上运行的。我可能已经从WSL方面做了一些git状态检查。

回购是存在的,案例是正确的,互联网工作正常,没有一个分支被删除,等等。然而,我也得到了错误您的配置指定从远程合并,但没有这样的引用被获取。

我的修复是,是确保所有的项目都被推送/所有的更改都被记录,然后我只是删除了目录,并再次从Windows中做了一个“git克隆”。然后'git checkout'就可以正常工作了。我知道这不是一个真正的答案,但它确实起作用了。

我在做Linux开发,代码库可以自动执行某些操作,包括“git克隆”;然而,我通常在Windows上进行代码推送。我的猜测是。git文件夹不是跨平台兼容的(并不是我有任何期望)。然而,它通常是有效的。是bug吗?争议。

Git偶尔也会试图做一个漂亮的和蒙面的行尾;这是一个不同的问题(与宗教相近)。我是不可知论者。是的,有一个设定。)

我发现当从默认master分支已重命名为main的回购中提取更新时,经常发生此错误。 在2020年将master分支重命名为main分支的趋势之后,遇到了很多这种情况

因此,如果你之前用默认的master分支克隆了一个repo,并且该分支已经被重命名为main,一种修复方法是简单地将你的上游从master指向main:

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

如果该命令成功,您应该看到如下消息:

分支'master'设置为从'origin'跟踪远程分支'main'。

然后,你可以用git branch -m master main将你的本地分支从master重命名为main(以保持与远程分支名称一致)

我在用yarn安装包时遇到的。自己的依赖项将分支main重命名为master。仅在依赖项上更新上游并不能修复它,我还必须清理yarn缓存。

  1. 项目A重命名主分支(main ->master)。项目A是项目B的一个依赖项。

  2. yarn install在项目B <——导致错误

  3. 推送更新的上游在项目A

  4. yarn install在项目B <——导致错误

  5. < p > yarn cache clean

  6. yarn install在项目B <-工作现在

我刚刚遇到了“no such ref was fetched"”的问题,上面的建议都没有帮助。我解决这个问题的方法是改变我的本地配置

remote.origin.fetch=+refs/heads/master:refs/remotes/origin/master

remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

我不知道为什么会起作用,但确实起了作用。经过这个改变,我可以拉,得到我所期望的。

如果我把它改回来,我再次得到“no such ref was fetched"试着拉的时候。所以这绝对是修复(不是无用的互联网,或案件差异,或全驱动器,或删除远程分支,或默认分支没有命名为“大师”,等等)。

非正式的,但是删除我的本地项目并重新克隆是有效的。

我这样做是安全的,因为我从来没有为合并开发过分支。

我在远程中被合并和删除的分支中。在一家存在的分行结账,然后取款,这对我有帮助。