问题描述
这意味着什么
您的上游(您调用的远程origin
设备)不再有,或者可能从未有过(仅从这些信息中无法判断)名为feature/Sprint4/ABC-123-Branch
.
有一个特别常见的原因:有人(可能不是你,或者你记得)删除了另一个 Git 存储库中的分支。
该怎么办
这取决于你 想要 什么。请参阅下面的讨论部分。你可以:
- 在远程创建或重新创建分支,或者
- 删除您的本地分支,或
- 你能想到的任何其他东西。
讨论
您必须正在运行git pull
(如果您正在运行git merge
,您将收到不同的错误消息或根本没有错误消息)。
当您运行时,您的 Git 会根据您的配置部分下的行git fetch
联系另一个 Git 。该 Git 运行一个命令 ( ),除其他外,该命令向 您的
Git 发送所有分支的列表。你可以用它来看看它是如何工作的(试试看,它很有教育意义)。这是我在 Git
存储库上运行它时得到的片段:url``[remote "origin"]``upload-pack
__git ls-remote``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
对遇到的每个分支名称都执行此操作。fetch``remote``refs/heads/master``refs/remotes/origin/master
它还在特殊文件中记录了原始名称FETCH_HEAD
(如果您查看自己的.git
目录,可以看到此文件)。此文件保存获取的名称和 ID。
该git pull
命令是一种方便快捷的方式:它git fetch
在适当的遥控器上运行,然后git merge
(或者,如果有这样的指示,
)使用任何所需的参数来按照该部分git rebase
的指示进行合并(或变基) 。[branch ...]
在这种情况下,您的[branch
"feature/Sprint4/ABC-123-Branch"]
部分说从 fetch origin
,然后与在 name 下找到的任何 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好吧,至少它要 承认的一切。 但除非他们特别隐藏了一些参考文献,否则该列表包括所有内容。
有一个新的 fetch 协议可以避免列出 所有内容 ,并且只列出 Git 说它正在寻找的名称。这可以帮助具有大量分支和/或标签的存储库。但是,如果您的 Git 对所有可能的名称感兴趣,您仍然会在此处获得所有名称。
解决方法
我收到这个错误拉:
您的配置指定与远程的 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