git refname' origin / master'很暧昧

时间:2014-09-25 19:37:22

标签: git git-svn

我有一个跟踪多个远程分支的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

5 个答案:

答案 0 :(得分:68)

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/ 1}}命名空间,本地分支通常存在。很可疑......你的意思是这样做吗?

这样的分支不会被git branch -a列出。但是Git很困惑,因为它看到两个分支的引用名以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.

答案 1 :(得分:21)

你可能不小心创建了一个名为&origin; master'

的本地引用 例如,如果你这样做了

git branch origin/master

这会导致这个问题。这个看起来很可疑" refs / origin / master"。 "参考文献/头/主"是你当地的主人," refs / remotes / origin / master"是您的远程分支参考," refs / origin / master"可能是一个让你搞砸的错误。

你只需删除该引用(git update-ref -d),事情就会重新开始。

答案 2 :(得分:5)

由于名为“master”的意外标记,我遇到了一个非常类似的问题,在git show-ref master中显示为refs/tags/master。在这种情况下的解决方案是:

git tag -d master

答案 3 :(得分:0)

几天前,我遇到了相同的问题,在同一分支中创建了多个引用。

我尝试过的事情:

> 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

在分支不明确的情况下,这种解决方案对我有效。

答案 4 :(得分:0)

检查您的 .git/config 文件。如果您有多个配置相同的远程存储库,您可能会遇到此问题:

fetch = +refs/heads/*:refs/remotes/origin/*

另一个远程服务器应该有一个不同的名字,例如:

fetch = +refs/heads/*:refs/remotes/another_repo/*