Git:警告:refname'master'含糊不清

时间:2012-10-25 16:26:46

标签: git

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

的结果
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

知道这里可能出现什么问题吗?我现在只使用git几个月了,所以它主要让我担心这种模糊性可能会影响到未来的回购。

6 个答案:

答案 0 :(得分:82)

对我来说,当我错误地发出“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

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

答案 1 :(得分:21)

详见“Git: refname 'master' is ambiguous”,这意味着,在heads/master旁边,您在git repo中的以下命名空间之一中有另一个主人:

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

甚至是./<refname>,如Magnusanswer中所述。

答案 2 :(得分:5)

git fetch --prune

git pull origin branch-name

应该解决你的问题。

答案 3 :(得分:2)

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

在我的情况下,它是一个名为xxx的标记,并且分支名称具有相同的名称。该标签是错误制作的,已从服务器中删除,因此我要做的就是更新本地标签以匹配服务器:git fetch -p -Phere

详细说明了此命令。

答案 4 :(得分:1)

检查您的 .git/config 文件。如果您有多个配置相同的远程存储库,您可能会遇到此问题:

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

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

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

答案 5 :(得分:0)

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

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

git push --delete origin tagname