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

Tim*_*Tim 71 git

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

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

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

Mag*_*nus 87

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

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

rm .git/master
Run Code Online (Sandbox Code Playgroud)

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

git update-ref refs/heads/mybranchname mytargetbranch
Run Code Online (Sandbox Code Playgroud)

不要忘记"refs/heads"部分!

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

git branch -f myBranchToMove destinationBranchOrHash

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

  • 我做了完全相同的事情.但是,该命令似乎没有做任何事情,所以我添加了"refs/heads"部分并没有意识到它在.git目录中留下了残留物. (3认同)
  • 如果您只想在提交之间移动分支,最好删除该分支(branch -d)并在另一个提交上重新创建它(checkout -b)。这不需要摆弄裁判。 (2认同)

Von*_*onC 25

正如" Git:refname' master'中含义模糊 "中所述,这意味着,除此之外heads/master,您还可以在git repo中的以下命名空间之一中拥有另一个主服务器:

refs/<refname> 
refs/tags/<refname>
refs/heads/<refname>
refs/remotes/<refname>
refs/remotes/<refname>/HEAD
Run Code Online (Sandbox Code Playgroud)

甚至./<refname>,正如马格努斯回答中所提到的那样.

  • 或者只是马格努斯提到的`./ <refname>`.(这是我的情况) (2认同)

man*_*man 12

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

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


山茶树*_*葡萄树 5

git fetch --prune

git pull origin branch-name
Run Code Online (Sandbox Code Playgroud)

应该解决您的问题。


Sco*_*ren 5

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

这帮助我删除了标签/sf/answers/383620471/

git push --delete origin tagname
Run Code Online (Sandbox Code Playgroud)