我查看了所有其他模棱两可的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
$
答案 0 :(得分:58)
TL; DR:保存并删除标记,Ashutosh Jindal comments(请参阅“Rename a tag in git?”):
git tag tag-master master
git tag -d master
原始答案:
我看到的大多数资源(如this FAQ)都指向同一个原因:
当您尝试签出本地分支时,您会得到一个
warning: refname 'branch-name' is ambiguous
如果您创建了与远程标记同名的本地分支,则会发生这种情况。
Git应该检查你的本地分支,但是它试图检查标记,并且它会混淆。几棵树的初始导入是有问题的,因为它们包含相同名称的分支和标签。我们已经通过 renaming away the tags 解决了很多这些问题。
在您的情况下,您没有远程,但是名为分支的本地标记就足够了。
歧义在 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
和{{1} }});
- 否则,
CHERRY_PICK_HEAD
如果存在;- 否则,
refs/<refname>
如果存在;- 否则,
refs/tags/<refname>
如果存在;- 否则,
refs/heads/<refname>
如果存在;- 否则,
refs/remotes/<refname>
如果存在。
请检查您的回购邮件中refs/remotes/<refname>/HEAD
的位置。
并且master
始终有效
警告:默认情况下,这会检出DETACHED HEAD mode中的分支。请参阅“Why does git checkout
with explicit 'refs/heads/branch
' give detached HEAD?”。
为了避免这种情况,仍然使用明确的引用,请输入:
git checkout heads/master
答案 1 :(得分:22)
虽然这不适用于OP的情况,但在意外执行refname is ambiguous
而不是git branch origin/branch
后,我收到了git checkout origin/branch
警告。这创建了一个名为origin/branch
的本地分支,这使得它与远程分支不明确。解决问题就像git branch -D origin/branch
一样简单(安全因为-D
在本地分支上运行)。
答案 2 :(得分:16)
这恰好发生在我身上。我不知何故有一个包含sha的文件.git / master。不确定那是怎么回事,但当我删除它时,错误就消失了。如果您仔细阅读接受的答案,这是“预期的行为”,但如果您这样做,您将看不到.git / master。 git show-ref master因为它遵循略有不同的规则。
答案 3 :(得分:0)
如果您错误地配置了两个具有相同名称的远程服务器,从而导致歧义,也会出现此消息。
检查您的 String getAddress = holder.address.getText().toString();
文件。如果您有多个配置相同的远程存储库:
.git/config
。
您应该将其中一个更改为不同的名称,例如:
fetch = +refs/heads/*:refs/remotes/origin/*