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 -a
或git 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.