git refname 'origin/master' 不明确

Posted

技术标签:

【中文标题】git refname \'origin/master\' 不明确【英文标题】:git refname 'origin/master' is ambiguousgit refname 'origin/master' 不明确 【发布时间】:2014-11-20 16:56:08 【问题描述】:

我有一个 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 -l 告诉你什么? git tag呢? git branch -l 给了我master。存储库中没有标签。 试试git branch --set-upstream-to=refs/remotes/origin/master master @Jubobs 成功了,谢谢! 【参考方案1】:

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

例如,如果你这样做了

git branch origin/master

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

你只需要删除那个引用(git update-ref -d),一切就会重新开始。

【讨论】:

如果是这种情况,git branch -a 的输出将包含一个读取 origin/master 的条目。 通常情况下是的,我看到人们创建了一些奇怪的引用,但这些引用没有出现在 git branch 输出中 谢谢,看来这是问题所在。 那是我的问题 @AndrewC:很好的答案,对我有用。但是您也应该在答案中添加“删除该引用”的命令。【参考方案2】:

git branch -a 的输出表明您有一个名为origin/master 的远程跟踪分支。完全正常。

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

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master

这表明您很可能运行了类似于以下低级命令的内容:

git update-ref refs/origin/master master

此命令创建一个名为origin/master 的分支(指向与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

那么,不会有任何歧义,当您尝试设置 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.

【讨论】:

相关:***.com/questions/948354/… push.default 应设置为upstream(因为matching 会不明确) 谢谢。通过解释原因、解决方案和复制症状得到很好的回答。 我的问题是相同的根本原因,但我必须以不同的方式到达那里。解释很清楚,我能够根据我的情况进行调整。写得很好的解释。有很多关于 SO 的技术文章,有些很棒,有些则不然。这是一篇很棒的技术文章。 @MatthewPoer 感谢您的好评;我很感激。 @jub0bs - 可以确认它确实会导致问题【参考方案3】:

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

git tag -d master

【讨论】:

【参考方案4】:

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

我尝试过的事情:

> 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

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

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

【参考方案6】:

如果.git 目录本身包含一个名为master 的引用,即.git/master,您将看到相同的错误消息。这里令人讨厌的问题是,您不会通过诸如git branch -agit show-ref master 之类的命令报告此引用。 (git 版本 2.30.0.windows.2)

【讨论】:

以上是关于git refname 'origin/master' 不明确的主要内容,如果未能解决你的问题,请参考以下文章

git checkout 报错 refname 'origin/branch-name' is ambiguous

Git Error: warning: refname 'origin/branch-name' is ambiguous.

git hook 自动部署

warning: refname 'HEAD' is ambiguous解决方法

python 速度测试获取refname和hash

Git查看分支的创建人