90

我看到有几个人在这里问同样的问题,但他们的建议似乎都不适用于我。我收到了标题中的警告,但我没有任何名为“master”的标签。这是结果git branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

知道这里可能出了什么问题吗?我现在只使用 git 几个月了,所以它主要是让我担心这种歧义可能会在未来与 repo 混淆。

4

6 回答 6

106

对我来说,当我错误地发出“update-ref”命令时,我很早就找到了这个警告的来源。如果您忘记在第一个 arg 中指定完整的 refs/heads/mybranchname 路径,则会创建一个文件 .git/mybranchname,稍后当您尝试切换到该分支时会导致此警告。

只需删除 .git/mybranchname 即可解决,例如:

rm .git/master

作为参考,update-ref 命令的正确格式是:

git update-ref refs/heads/mybranchname mytargetbranch

不要忘记“refs/heads”部分!

此外,我最常见的 update-ref 用例只是手动移动一个分支以指向另一个提交,我发现了一种更简单的语法:

git branch -f myBranchToMove destinationBranchOrHash

这种语法对我来说更容易,因为它不需要容易出错的 refs/heads 路径限定符。

于 2013-04-30T14:24:20.030 回答
31

如“ Git: refname ' master' is ambiguous ”中所述,这意味着,heads/master在 git repo 的以下命名空间之一中,您还有另一个 master:

refs/<refname> 
refs/tags/<refname>
refs/heads/<refname>
refs/remotes/<refname>
refs/remotes/<refname>/HEAD

甚至./<refname>,正如Magnus回答中提到的那样。

于 2012-10-26T08:44:20.330 回答
15

为了将来参考,我遇到了同样的问题,最终对我有用的是这里描述的解决方案。基本上,当您收到Git: warning: refname 'xxx' is ambiguous警告时,您可以使用:git show-ref xxx检查对xxx分支的引用并验证哪些存在冲突。

xxx在我的场景中,它是一个名称和分支名称相同的标签。该标签是错误制作的,已从服务器中删除,所以我需要做的就是更新我的本地标签以匹配服务器:git fetch -p -P。此命令在此处详细说明

于 2019-01-28T18:49:28.853 回答
6
git fetch --prune

git pull origin branch-name

应该解决你的问题。

于 2018-01-09T05:46:50.153 回答
5

当我创建一个与标签同名的分支时,我遇到了类似的问题(不是 master)。

这帮助我删除了标签https://stackoverflow.com/a/5480292/150953

git push --delete origin tagname
于 2018-10-10T23:47:49.713 回答
3

检查你的.git/config文件。如果您配置了多个远程仓库,您可能会遇到此问题:

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

另一个远程服务器应具有不同的名称,例如:

fetch = +refs/heads/*:refs/remotes/another_repo/*

于 2021-02-20T09:51:23.173 回答