我收到这个错误 pull :
Your configuration specifies to merge with the ref 'refs/heads/feature/Sprint4/ABC-123-Branch' from the remote, but no such ref was fetched.
这个错误不会出现在任何其他分支上。这个分支的特殊之处在于它是从另一个分支的先前提交中创建的。
我的配置文件看起来像:
[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
最佳答案
这意味着什么
您的上游——您调用的远程 origin
— 不再有,或者可能从未有过(仅凭这些信息无法判断)名为 feature/Sprint4/ABC-123-Branch
的分支.有一个特别常见的原因:有人(可能不是你,或者你记得)删除了另一个 Git 存储库中的分支。
该怎么办
这取决于你想要什么。请参阅下面的讨论部分。你可以:
讨论
您必须正在运行
git pull
(如果您正在运行 git merge
,您将收到不同的错误消息,或者根本没有错误消息)。当您运行时
git fetch
,你的 Git 联系另一个 Git,基于 url
线下[remote "origin"]
您的配置部分。该 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
在适当的 Remote 上,然后 git merge
(或者,如果有指示, git rebase
)以及按照 [branch ...]
的指示 merge (或 rebase )所需的任何参数部分。在这种情况下,您的 [branch "feature/Sprint4/ABC-123-Branch"]
部分说从 origin
获取,然后与在名称 refs/heads/feature/Sprint4/ABC-123-Branch
下找到的任何 ID merge .由于在该名称下没有发现任何内容,
git pull
提示和停止。如果您将其作为两个单独的步骤运行,
git fetch
然后 git merge
(或 git rebase
),你的 Git 会查看你缓存的 remotes/origin/
远程跟踪分支以查看要 merge 或 rebase 的内容。如果曾经有这样一个分支,你可能仍然有远程跟踪分支。在这种情况下,您不会收到错误消息。如果从来没有这样的分支,或者如果你运行了 git fetch
与 --prune
(删除死的远程跟踪分支),因此您没有相应的远程跟踪分支,您会收到投诉,但它会引用origin/feature/Sprint4/ABC-123-Branch
反而。无论哪种情况 ,我们可以得出结论
feature/Sprint4/ABC-123-Branch
现在在名为 origin
的远程服务器上不存在.它可能曾经存在过,并且您可能从远程跟踪分支创建了本地分支。如果是这样,您可能仍然拥有远程跟踪分支。您可能会调查以查看谁从远程删除了分支以及原因,或者您可能只是推送某些内容来重新创建它,或者删除您的远程跟踪分支和/或您的本地分支。
1好吧,至少它会承认所有这些。但是除非他们特别 stash 了一些引用文献,否则该列表包含所有内容。
2020 年 7 月编辑:有一个新的 fetch 协议(protocol)可以避免列出所有内容,只列出 Git 说它要查找的名称。这可以帮助具有大量分支和/或标签的存储库。但是,如果您的 Git 对所有可能的名称感兴趣,您仍然会在此处获得所有名称。
关于git - 您的配置指定与远程的 <branch name> merge ,但未获取此类引用。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36984371/