我有一个跟踪几个远程分支的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
的输出显示您有一个名为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
然后,不会有任何歧义,当你试图设置master
的上游时,Git会遵守。
refs/origin/master
为避免歧义,只需指定您希望设置为master
上游的分支的完整引用名称:
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 / origin / master”。 “refs / heads / master”是你的本地主人,“refs / remotes / origin / master”是你的远程分支引用,而“refs / origin / master”可能是一个让你搞砸的错误。
你只需删除该引用(git update-ref -d),事情就会重新开始。
我有一个非常类似的问题,因为一个名为“master”的意外标签,在git show-ref master
显示为refs/tags/master
。这种情况下的修复是:
git tag -d master
几天前我遇到了同样的问题,那里有多个引用创建了同一个分支。
我试过的事情:
> git show-ref (will give you the list of references, from the
> references list you can check if there are multiple references created
> for the branch you are working on or not.)
如果创建了多个引用,则只需删除它
rm .git/refs/heads/master
删除引用后,只有当你在其中推送了一些内容时才可以从远程源检出分支,否则你必须重做你在分支中所做的一切
git fetch origin
git checkout origin/branchName
在模糊分支的情况下,这个解决方案适合我。