我已经研究了所有其他不明确的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>
,例如master
、heads/master
、refs/heads/master
符号引用名称。例如,
master
通常表示由refs/heads/master
引用的提交对象
如果您碰巧同时拥有heads/master
和tags/master
,您可以显式地说出heads/master
来告诉git您的意思是哪一个
当歧义时,<refname>
通过以下规则中的第一个匹配来消除歧义:如果
$GIT_DIR/<refname>
存在,那就是你的意思(这通常只对HEAD
、FETCH_HEAD
、ORIG_HEAD
、MERGE_HEAD
和CHERRY_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/*