1. ホーム
  2. git

git refname 'origin/master' はあいまいです。

2023-08-05 22:45:40

質問

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

このコマンドはブランチを作成します。 master という名前のブランチを作成します。 origin/master の直下に住んでいますが refs/ の直下に住んでいる、つまり の外側 refs/heads/ という名前空間の外側で、通常ローカルブランチが存在する場所です。かなり怪しい... そんなつもりだったのでしょうか?

そのようなブランチは git branch -a . しかし、Git は混乱しています。というのも、2 つのブランチの refname が origin/master :

  • refs/remotes/origin/master は、あなたのリモート追跡用ブランチと
  • refs/origin/master の外に (偶然) 作ったローカルブランチです。 refs/heads/ .

解決方法

もし、あなたが ではなく を作成することを意味します。 refs/origin/master

単純に削除してください。

git update-ref -d refs/origin/master

そうすれば、曖昧さがなくなり、Gitはあなたが master を上流に設定しようとしたときに、Git はそれに従います。

もし、あなたが refs/origin/master

曖昧さを避けるために、単純に フル として設定したいブランチの参照名を指定します。 master の上流に設定したいブランチです。

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.