git refname'origin / master'是不明确的

我有一个跟踪几个远程分支的git存储库:

$ git branch -a
* master
  remotes/git-svn
  remotes/origin/master
  remotes/trunk

当我尝试设置默认值时,出现以下错误:

$ git branch --set-upstream-to=origin/master master
warning: refname 'origin/master' is ambiguous.
fatal: Ambiguous object name: 'origin/master'.

我想删除一些远程主分支,但主引用仍然存在。 我如何删除它们以便能够将默认的上游分支设置为origin/master

$ git show-ref master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/heads/master
6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
d83f025cd3800ed7acd76b2e52ae296e33f1cd07 refs/original/refs/heads/master
cba97a58c99743c355b569bbf35636c8823c2d96 refs/remotes/origin/master

git branch -a的输出git branch -a显示你有一个叫做origin/master的远程追踪分支。 非常正常。

但是, git show-ref master的输出包含

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master

这表明你很可能运行了类似下面的低级命令:

git update-ref refs/origin/master master

这个命令创建了一个分支(指向与master相同的提交),称为origin/master ,但直接位于refs/ ,即位于refs/heads/命名空间之外的地方分支通常存在的地方。 你有意这么做吗?

这样的分支不会被git branch -a列出。 但是,Git会感到困惑,因为它看到两个分支的refnames以origin/master结尾:

  • refs/remotes/origin/master ,远程追踪分支,和
  • refs/origin/master ,你创建的本地分支(意外)在refs/heads/
  • 如果你不打算创建refs/origin/master

    简单地删除它:

    git update-ref -d refs/origin/master
    

    然后,不会有任何歧义,Git会在您尝试设置master的上游时遵守。

    如果你的意思是创建refs/origin/master

    为避免歧义,只需指定您希望设置master上游的分支的完整refname:

    git branch --set-upstream-to=refs/remotes/origin/master master
    

    为了解决这些问题,下面是一些代码,它重现了我的一个GitHub仓库中的情况:

    $ cd ~/Desktop
    $ git clone https://github.com/Jubobs/gitdags && cd gitdags
    
    $ git update-ref refs/origin/master
    
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    
    $ git show-ref master
    15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/heads/master
    15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/origin/master
    15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/HEAD
    15b28ec22dfb072ff4369b35ef18df51bb55e900 refs/remotes/origin/master
    
    $ git branch --set-upstream-to=origin/master master
    warning: refname 'origin/master' is ambiguous.
    fatal: Ambiguous object name: 'origin/master'.
    
    $ git update-ref -d refs/origin/master
    $ git branch --set-upstream-to=origin/master master
    Branch master set up to track remote branch master from origin.
    

    你可能无意中创建了一个名为“origin / master”的本地裁判

    例如,如果你这样做

    git branch origin/master
    

    这会导致这个问题。 这一个看起来可疑“裁判/起源/主”。 “refs / heads / master”是你的本地主人,“refs / remotes / origin / master”是你的远程分支引用,而“refs / origin / master”可能是一个错误,会让你感到困扰。

    您只需要删除该引用,并且事情将再次开始工作。


    由于一个名为“master”的意外标签,我有一个非常类似的问题,在git show-ref masterrefs/tags/master 。 在这种情况下的修复是:

    git tag -d master
    
    链接地址: http://www.djcxy.com/p/90427.html

    上一篇: git refname 'origin/master' is ambiguous

    下一篇: Git: refname 'master' is ambiguous