引用名称"主人"是模棱两可的



我已经研究了所有其他不明确的refname问题,但似乎都没有帮助。为什么我收到这个警告?

$ git checkout master
warning: refname 'master' is ambiguous.
$ git show-ref master
eef61c00da690f093063ac5a728e22fd21648104 refs/heads/master
$ git branch -a
  checkers
  exercises
* master
$ git remote -v
$ 

TL;DR:保存并删除标记,如Ashutosh Jindal评论(请参阅"重命名git中的标记?"):

git tag tag-master master
git tag -d master

原始答案:

我看到的大多数来源(比如这个常见问题解答)都指向相同的原因:

当你试图在当地分行结账时,你会得到一个

warning: refname 'branch-name' is ambiguous

如果您创建了一个与远程标记同名的本地分支,就会发生这种情况
Git应该检查你的本地分支,但它却试图检查标签,结果弄糊涂了。

最初导入几棵树是有问题的,因为它们包含相同名称的分支和标记。此后,我们通过重命名标签解决了许多此类问题。

在您的情况下,您没有远程标签,但像您的分支一样命名的本地标签就足够了。

模糊性在gitrevision中指定

<refname>,例如masterheads/masterrefs/heads/master

符号引用名称。例如,master通常表示由refs/heads/master引用的提交对象
如果您碰巧同时拥有heads/mastertags/master,您可以显式地说出heads/master来告诉git您的意思是哪一个
当歧义时,<refname>通过以下规则中的第一个匹配来消除歧义:

如果$GIT_DIR/<refname>存在,那就是你的意思(这通常只对HEADFETCH_HEADORIG_HEADMERGE_HEADCHERRY_PICK_HEAD有用);

  • 否则,如果存在refs/<refname>
  • 否则,如果存在refs/tags/<refname>
  • 否则,如果存在refs/heads/<refname>
  • 否则,如果存在refs/remotes/<refname>
  • 否则,如果存在refs/remotes/<refname>/HEAD

因此,请检查您的回购中master的位置。

git checkout heads/master将始终有效
警告:默认情况下,这将以DETACHED HEAD模式签出分支。请参阅"为什么带有显式'refs/heads/branch'的git checkout会产生分离的HEAD?"。

要避免这种情况,并且仍然使用明确的ref,请键入:

git checkout -B master heads/master

虽然这不适用于OP的情况,但在意外执行git branch origin/branch而不是git checkout origin/branch后,我收到了refname is ambiguous警告。这创建了一个名为origin/branch的本地分支,这使得它与远程分支不明确。解决问题就像git branch -D origin/branch一样简单(因为-D在本地分支上操作,所以是安全的)。

这件事刚刚发生在我身上。不知怎么的,我有一个包含sha的文件.git/master。不知道这是怎么发生的,但当我删除它时,错误就消失了。如果你仔细阅读接受的答案,这是"预期行为",但如果你这样做,你不会看到。git/master,例如git-show-ref-master,因为它遵循稍微不同的规则。

如果您错误地配置了两个具有相同名称的远程服务器,也会出现此消息,这会产生歧义。

检查您的.git/config文件。如果您有多个远程回购配置了相同的:

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

您应该将其中一个更改为其他名称,例如:

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

相关内容

最新更新