Git:警告:refname'master'不明确


79

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

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

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


2
哪个命令发出警告?
CharlesB 2012年

1
stackoverflow.com/a/12225704/6309中提到的可能的“主”列表会有所帮助吗?Agit checkout heads/master应该可以正常工作(无警告)
VonC 2012年

2
请显示的输出git show-ref
CB Bailey

@CharlesBailey对不起,这里的延迟,但是输出的git show-ref一堆东​​西在这里不适合。我相信可能有两句话以“ master”结尾:refs / remotes / origin / master,refs / heads / master
Tim

Answers:


95

对我而言,当我错误地发出“ 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路径限定符。


4
我做了完全一样的事情。但是,该命令似乎没有执行任何操作,因此我添加了“ refs / heads”部分,但没有意识到它在.git目录中留下了残留物。
约翰·亚历山大

git update-ref -d master一旦意识到由update-ref命令创建了重复的ref,它也可以工作。
Dan Berindei

如果只想在提交之间移动分支,则最好删除该分支(分支-d),然后在另一个提交(checkout -b)上重新创建它。不需要摆弄引用。
伊森·德布尔

26

如“ Git:refname' master'含糊不清”所述,这意味着,在heads/mastergit repo中,以下名称空间之一中还有另一个master:

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

甚至./<refname>就像马格努斯回答中提到的。


2
或就像./<refname>马格努斯提到的那样。(这是我的情况)
没关系说


5

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.