59

他のあいまいな refname の質問をすべて調べましたが、どれも役に立たないようです。この警告が表示されるのはなぜですか?

$ git checkout master
warning: refname 'master' is ambiguous.
$ git show-ref master
eef61c00da690f093063ac5a728e22fd21648104 refs/heads/master
$ git branch -a
  checkers
  exercises
* master
$ git remote -v
$ 
4

4 に答える 4

84

TL;DR: Ashutosh Jindalの コメントとして、タグを保存して削除します(「git でタグの名前を変更しますか?」を参照):

git tag tag-master master
git tag -d master

元の答え:

私が目にするソースのほとんど (この FAQなど) は、同じ原因を指摘しています。

ローカルブランチをチェックアウトしようとすると、

warning: refname 'branch-name' is ambiguous

これは、リモート タグと同じ名前のローカル ブランチを作成した場合に発生する可能性があります
Git はローカル ブランチをチェックアウトする必要がありますが、代わりにタグをチェックアウトしようとしており、混乱しています。

いくつかのツリーの最初のインポートは、同じ名前のブランチとタグが含まれていたため、問題がありました。タグの名前を変更することで、これらの問題の多くに対処してきました。

あなたの場合、リモートはありませんが、ブランチのような名前のローカル タグで十分です。

あいまいさはgitrevisionで指定されています

<refname>、例えばmaster、、heads/masterrefs/heads/master

シンボリック参照名。たとえばmaster、通常、 によって参照されるコミット オブジェクトを意味しますrefs/heads/master
と の両方を持っている場合は、どちらheads/masterを意味するtags/masterかを明示的heads/masterに git に伝えることができます。
あいまいな場合<refname>、次のルールで最初に一致したものを取得することで、a のあいまいさが解消されます。

存在する場合$GIT_DIR/<refname>、それはあなたが意味することです (これは通常HEAD、 、FETCH_HEADORIG_HEADMERGE_HEADおよびにのみ役立ちCHERRY_PICK_HEADます)。

  • それ以外の場合は、refs/<refname>存在する場合。
  • それ以外の場合は、refs/tags/<refname>存在する場合。
  • それ以外の場合は、refs/heads/<refname>存在する場合。
  • それ以外の場合は、refs/remotes/<refname>存在する場合。
  • それ以外の場合は、refs/remotes/<refname>/HEAD存在する場合。

したがって、リポジトリのどこにあるかmasterを確認してください。

そしてgit checkout heads/master、常に機能します。
警告: デフォルトでは、これはDETACHED HEAD モードでブランチをチェックアウトします。「明示的な ' ' を使用すると、切り離された HEAD が返されるのはなぜgit checkoutrefs/heads/branchですか?」を参照してください。

それを回避し、依然として明確な参照を使用するには、次のように入力します。

git checkout -B master heads/master
于 2012-09-01T07:07:01.577 に答える
23

これは私に起こったことです。どういうわけか、sha を含むファイル .git/master がありました。どうやってそこにたどり着いたのかわかりませんが、削除するとエラーはなくなりました。受け入れられた回答を注意深く読むと、これは「予期される動作」ですが、たとえば git show-ref master を実行すると、ルールがわずかに異なるため、.git/master は表示されません。

于 2013-03-05T23:19:41.653 に答える