Git:refname'master'含糊不清

Max*_*Max 48 git

我查看了所有其他模棱两可的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
$ 
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 63

TL; DR:保存并删除标签,如Ashutosh Jindal 评论(参见" 在git中重命名标签? "):

git tag tag-master master
git tag -d master
Run Code Online (Sandbox Code Playgroud)

原始答案:

我看到的大多数资源(如本常见问题解答)指出了同样的原因:

当您尝试签出本地分支时,您会得到一个

warning: refname 'branch-name' is ambiguous
Run Code Online (Sandbox Code Playgroud)

如果您创建了一个与远程标记同名的本地分支,则会发生这种情况.
Git应该检查你的本地分支,但它试图检查标签,它会混淆.

几棵树的初始导入是有问题的,因为它们包含相同名称的分支和标签.我们通过重命名标记解决了很多这些问题.

在您的情况下,您没有远程,但名为您的分支的本地标记就足够了.

模糊性在gitrevision中指定

<refname>例如master,heads/master,refs/heads/master

一个象征性的引用名称.例如,master通常表示引用的提交对象refs/heads/master.
如果你碰巧有两个heads/mastertags/master,你可以明确地说heads/master要告诉混帐你的意思是哪一个.
当含糊不清时,<refname>通过采用以下规则中的第一个匹配来消除歧义:

如果$GIT_DIR/<refname>存在,那就是你的意思(这通常是有用的,只有为HEAD,FETCH_HEAD,ORIG_HEAD,MERGE_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模式检出分支.请参阅" 为什么git checkout使用显式' refs/heads/branch'给予分离的HEAD? ".

为了避免这种情况,仍然使用明确的引用,键入:

git checkout -B master heads/master
Run Code Online (Sandbox Code Playgroud)

  • refs的搜索顺序很有帮助.`$ GIT_DIR/master`由于某种原因确实存在(不知道它指向的是什么或它是如何创建的).删除它修复了警告. (7认同)
  • 谢谢!所以我的解决方法是 `git tag tag-master master ; git tag -d master`(这也很有帮助:http://stackoverflow.com/questions/1028649/rename-a-tag-in-git) (2认同)

Tre*_*ude 26

虽然这不适用于OP的情况,但是在我refname is ambiguous意外地做了一个git branch origin/branch而不是一个git checkout origin/branch.这创建了一个名为的本地分支origin/branch,这使得它与远程分支不一致.解决问题很简单git branch -D origin/branch(安全,因为-D在本地分支上运行).


Gar*_*ryO 17

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

  • 这是因为当你忘记了update-ref命令的"refs/heads"部分时(无论如何我都是这样).请参阅我对http://stackoverflow.com/questions/13073062/git-warning-refname-master-is-ambiguous/16302266#16302266的回答 (15认同)