git refname'origin / master'是不明确的 [英] git refname 'origin/master' is ambiguous
问题描述
我有一个跟踪几个远程分支的git仓库:
$ git branch -a
* master
遥控器/ git-svn
遥控器/原产地/主控制器
遥控器/后备箱
当我尝试设置默认值时,出现以下错误:
$ git branch --set-upstream -to = origin / master master
警告:refname'origin / master'不明确。
致命的:模糊的对象名称:'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 / heads /
之外创建(无意)创建的本地分支。
解决方案
如果 不是则表示创建
refs / origin / master
git update-ref -d refs / origin / master
然后,当你尝试设置 master
的上游时,Git会遵守。
如果你的意思是创建 refs / origin / master
为了避免歧义,只需指定完整您希望设置为的分行的名称 master
的上游:
git branch --set-upstream-to = re fs / 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 - > ;原产地/大师
遥控器/原产地/主人
$ git show-ref主人
15b28ec22dfb072ff4369b35ef18df51bb55e900参考资料/首页/主人
15b28ec22dfb072ff4369b35ef18df51bb55e900参考文献/ origin / master
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs / remotes / origin / HEAD
15b28ec22dfb072ff4369b35ef18df51bb55e900 refs / remotes / origin / master
$ git branch --set-upstream-to = origin / master master
warning:refname 'origin / master'含糊不清。
致命的:模糊的对象名称:'origin / master'。
$ git update-ref -d refs / origin / master
$ git branch --set-upstream-to = origin / master master
设置分支主机来跟踪远程分支主从原产地。
I have a git repository that is tracking several remote branches:
$ git branch -a
* master
remotes/git-svn
remotes/origin/master
remotes/trunk
When I try to setup a default one I get the following error:
$ git branch --set-upstream-to=origin/master master
warning: refname 'origin/master' is ambiguous.
fatal: Ambiguous object name: 'origin/master'.
I would like to kremove some of the remote master branches but the master references are still there. How can I remove them to be able to set the default upstream branch to 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
The output of git branch -a
shows that you have a remote-tracking branch called origin/master
. Perfectly normal.
However, the output of git show-ref master
contains
6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/origin/master
which indicates that you most likely ran something like the following low-level command:
git update-ref refs/origin/master master
This command creates a branch (pointing at the same commit as master
) called origin/master
, but living directly under refs/
, i.e. outside the refs/heads/
namespace, where local branches normally live. Did you mean to do that?
Such a branch won't get listed by git branch -a
. However, Git gets confused because it sees two branches whose refnames end with origin/master
:
refs/remotes/origin/master
, your remote-tracking branch, andrefs/origin/master
, the local branch that you created (by accident) outsiderefs/heads/
.
Solution
If you did not mean to create refs/origin/master
Simply delete it:
git update-ref -d refs/origin/master
Then, there won't be any ambiguity, and Git will comply when you try to set master
's upstream.
If you did mean to create refs/origin/master
To avoid ambiguity, simply specify the full refname of the branch you wish to set as master
's upstream:
git branch --set-upstream-to=refs/remotes/origin/master master
To fix ideas, here is some code that reproduces the situation in one of my GitHub repos:
$ 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.
这篇关于git refname'origin / master'是不明确的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!