git refname'origin/master'含糊不清

Mig*_*rro 51 git git-svn

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

$ git branch -a
* master
  remotes/git-svn
  remotes/origin/master
  remotes/trunk
Run Code Online (Sandbox Code Playgroud)

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

$ git branch --set-upstream-to=origin/master master
warning: refname 'origin/master' is ambiguous.
fatal: Ambiguous object name: 'origin/master'.
Run Code Online (Sandbox Code Playgroud)

我想删除一些远程主分支,但主引用仍然存在.如何删除它们才能将默认上游分支设置为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
Run Code Online (Sandbox Code Playgroud)

jub*_*0bs 77

git branch -a显示您有远程跟踪分支的输出origin/master.完全正常.

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

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
Run Code Online (Sandbox Code Playgroud)

这表明您最有可能运行类似以下低级命令:

git update-ref refs/origin/master master
Run Code Online (Sandbox Code Playgroud)

此命令创建一个master被调用的分支(指向同一个提交)origin/master,但直接位于命名空间之下refs/,即本地分支通常存在的命名空间之外refs/heads/.很可疑......你的意思是这样做的吗?

这样的分支不会被列出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
Run Code Online (Sandbox Code Playgroud)

然后,不会有任何歧义,当你试图设置master上游时,Git会遵守.

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

为避免歧义,只需指定要设置为上游的分支的完整引用名称master:

git branch --set-upstream-to=refs/remotes/origin/master master
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,这里有一些代码可以在我的一个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.
Run Code Online (Sandbox Code Playgroud)


And*_*w C 24

你可能不小心创建了一个名为'origin/master'的本地引用

例如,如果你这样做了

git branch origin/master
Run Code Online (Sandbox Code Playgroud)

这会导致这个问题.这个看起来很可疑"refs/origin/master"."refs/heads/master"是你的本地主人,"refs/remotes/origin/master"是你的远程分支引用,而"refs/origin/master"可能是一个让你搞砸的错误.

您只需要删除该引用,事情就会重新开始.

  • 通常是的,我已经看过人们创建了奇怪的引用但不会出现在`git branch`输出中的情况 (3认同)
  • 如果是这种情况,`git branch -a`的输出将包含一个读取`origin/master`的条目. (2认同)

rym*_*ymo 6

我有一个非常类似的问题,因为一个名为"master"的意外标签,显示git show-ref masterrefs/tags/master.这种情况下的修复是:

git tag -d master
Run Code Online (Sandbox Code Playgroud)


Sum*_*oor 6

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

我尝试过的事情:

> 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.)
Run Code Online (Sandbox Code Playgroud)

如果创建了多个引用,则只需将其删除

rm .git/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

删除引用后,您可以从远程源结帐分支,只有在其中推送了某些内容,否则您必须重做您在分支中所做的一切

git fetch origin
git checkout origin/branchName
Run Code Online (Sandbox Code Playgroud)

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