今天遇到一个git名字ambiguous的问题。

warning: refname ‘origin/master’ is ambiguous.

git checkout -b newb origin/master
warning: refname 'origin/master' is ambiguous.

正常来说,这名字应该不会有歧义。通过git show-ref命令查看:

$ git show-ref origin/master
b73e1c8fd21c28926884c8ac61d0666172930fef refs/heads/origin/master (wrong one)
aea283f55e75242cf57134c824e05007df4fab06 refs/remotes/origin/master

原来是有一个本地分支名称被命名称origin/master了。这样当引用origin/master时,gitf就无法确定是要用本地分支origin/master还是origin命名空间下的master分支。

实际上这个本地分支origin/master是被错误的创建的,所以只需要简单的将其删除即可。

git branch -d origin/master

上命的命令是可以正常工作的,没有报ambiguous的错误,大概是因为remote命名空间下的分支不能通过这个命令删除。所以这个命令才正常工作吧。

另外想精确的指定这个origin/master分支,可以通过git update-ref这个命令来实现:

$ git update-ref -d refs/heads/origin/master

注:本地分支都是在heads命名空间下的。