私はいくつかのリモートブランチを追跡している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 -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/master
、refs/heads/
の外部に(誤って)作成したローカルブランチ。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.
「Origin/master」というローカル参照を誤って作成した可能性があります
たとえば、これをした場合
git branch Origin/master
それはこの問題につながるでしょう。これは「refs/Origin/master」と疑われるようです。 「refs/heads/master」はローカルマスター、「refs/remotes/Origin/master」はリモートブランチリファレンス、「refs/Origin/master」はおそらく間違いを犯している間違いです。
その参照(git update-ref -d)を削除するだけで、作業が再開されます。
「master」という名前の誤ったタグがgit show-ref master
as refs/tags/master
。この場合の修正は次のとおりです。
git tag -d master
数日前、同じブランチから複数の参照が作成されるという同じ問題に直面しました。
私が試したもの:
> 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
このソリューションは、曖昧なブランチの場合にうまくいきました。