web-dev-qa-db-ja.com

git refname 'Origin / master'はあいまいです

私はいくつかのリモートブランチを追跡している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
48

git branch -aの出力は、Origin/masterというリモート追跡ブランチがあることを示しています。完全に正常です。

ただし、git show-ref masterの出力には

6726b4985107e2ddc7539f95e1a6aba536d35bc6 refs/Origin/master

これは、次の低レベルコマンドのようなものを実行した可能性が高いことを示しています。

git update-ref refs/Origin/master master

このコマンドは、Origin/masterというブランチ(masterと同じコミットを指す)を作成しますが、refs/の直下、つまりoutside the refs/heads/名前空間。ローカルブランチは通常存在します。かなり疑わしい...それをするつもりでしたか?

そのようなブランチは、git branch -aによってリストされません。ただし、Gitでは、refnameがOrigin/masterで終わる2つのブランチが見られるため、混乱しています。

  • refs/remotes/Origin/master、リモート追跡ブランチ、および
  • refs/Origin/masterrefs/heads/の外部に(誤って)作成したローカルブランチ。

溶液

notを作成した場合refs/Origin/masterを作成することを意味します

削除するだけです:

git update-ref -d refs/Origin/master

そうすれば、あいまいさはなくなり、masterのアップストリームを設定しようとするとGitが準拠します。

refs/Origin/masterを作成するつもりだった場合

あいまいさを回避するには、masterのアップストリームとして設定するブランチのfull refnameを指定するだけです。

git branch --set-upstream-to=refs/remotes/Origin/master master

アイデアを修正するために、ここに私のGitHubリポジトリの1つで状況を再現するコードをいくつか示します。

$ 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.
72
jub0bs

「Origin/master」というローカル参照を誤って作成した可能性があります

たとえば、これをした場合

git branch Origin/master

それはこの問題につながるでしょう。これは「refs/Origin/master」と疑われるようです。 「refs/heads/master」はローカルマスター、「refs/remotes/Origin/master」はリモートブランチリファレンス、「refs/Origin/master」はおそらく間違いを犯している間違いです。

その参照(git update-ref -d)を削除するだけで、作業が再開されます。

24
Andrew C

「master」という名前の誤ったタグがgit show-ref master as refs/tags/master。この場合の修正は次のとおりです。

git tag -d master
5
rymo

数日前、同じブランチから複数の参照が作成されるという同じ問題に直面しました。

私が試したもの:

> 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

参照を削除した後、何かをプッシュした場合にのみリモートOriginからブランチのチェックアウトを取ることができます。そうでなければ、ブランチで行ったすべてをやり直す必要があります

git fetch Origin
git checkout Origin/branchName

このソリューションは、曖昧なブランチの場合にうまくいきました。

1
Sumit Kapoor