使用GIT的模糊名称?

时间:2011-03-15 05:45:14

标签: git branch

我正在尝试查看我当地的一个分支机构,名为TEAM20-lab2-release。当我尝试这样做时,我得到一个模糊的refname错误:

$ git branch TEAM20-lab2-release
warning: refname 'TEAM20-lab1-release' is ambiguous.
fatal: Ambiguous object name: 'TEAM20-lab1-release'.

以下是我的分支列表:

$ git branch -a
  TEAM20-lab1
* TEAM20-lab1-release
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

3 个答案:

答案 0 :(得分:7)

通常是因为您在另一个名称空间中使用了相同的名称(而不是您的分支)

  • 与“远程”命名空间类似:远程仓库的名称,如此SO question所示。
    (因此davitenio在评论中要求git branch -a
  • 或“标记”命名空间“:拥有以分支命名的标记也可以触发该消息(请参阅此blog post

2016年更新:如果分支机构和标签共享相同的名称,Git 2.12(2017年第1季度)将不会显示任何错误。

commit b284495Dennis Kaarsemaker (seveas)(2016年10月31日) 请commit eef2bda查看Junio C Hamano (gitster)(2016年10月28日) Junio C Hamano -- gitster --于2016年12月27日commit 6c18dd4合并)

  

push:不要使用可能不明确的默认refspec

     

当用户执行惰性“git push”且没有参数且push.default设置为“upstream”,“simple”或“current时“,我们在内部生成了一个refspec,它在源端具有当前分支名称并用它来推送。

     

但是,分支名称(例如“test”)可能是一个含糊不清的引用名称   源存储库的上下文---可能有一个标记   例如,同名   这将触发不必要的错误,而不会在最终用户方面出现任何错误。

     

明确并提供完整的refname作为源端以避免   歧义。
  使用“current”推送时,目的地方只发送了分支的名称并强制接收端猜测,这是同一个问题。
  在那里也要明确。

答案 1 :(得分:4)

让你开始找到含糊不清的参考资料

function branchid() 
{ 
    echo $(basename "$(dirname "$1")")/$(basename "$1"); 
}

for ref in $(git for-each-ref | cut -f2)
    do echo -e "$ref\t$(branchid "$ref")"
done | 
    sort --key 2 | uniq -Df 2

答案 2 :(得分:1)

尝试为本地分支设置上游分支时,我收到了相同的错误消息。

cgd@flavia-cgd-mobi:~/Projects/reporter$ git status
On branch master

nothing to commit, working directory clean
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch --set-upstream-to gerrit/master master
warning: refname 'gerrit/master' is ambiguous.
fatal: Ambiguous object name: 'gerrit/master'.
cgd@flavia-cgd-mobi:~/Projects/reporter$ git remote -vv
gerrit  ssh://cgd@gerrit.server:29418/reporter (fetch)
gerrit  ssh://cgd@gerrit.server:29418/reporter (push)
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch -a
  gerrit/master
* master
  remotes/gerrit/master
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch -d gerrit/master
Deleted branch gerrit/master (was 1234567).
cgd@flavia-cgd-mobi:~/Projects/reporter$ git branch --set-upstream-to gerrit/master master
Branch master set up to track remote branch master from gerrit.

cgd@flavia-cgd-mobi:~/Projects/reporter$ git fetch
cgd@flavia-cgd-mobi:~/Projects/reporter$ git status
On branch master
Your branch is up-to-date with 'gerrit/master'.

nothing to commit, working directory clean

正如你所看到的,我以某种方式创建了一个名为gerrit / master的本地分支,这引起了冲突,因为git无法决定是跟踪本地分支还是远程分支。删除错误的分支修复了这件事,让我再次开心。