Подтвердить что ты не робот

Git: имя_файла 'master' неоднозначно

Я рассмотрел все другие неоднозначные вопросы с псевдонимом, и ни один из них, похоже, не помогает. Почему я получаю это предупреждение?

$ 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
$ 
4b9b3361

Ответ 1

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/master, refs/heads/master

Символическое имя ссылки. Например. master обычно означает объект commit, на который ссылается refs/heads/master.
Если у вас есть как heads/master, так и tags/master, вы можете явно сказать heads/master, чтобы сообщить Git, что вы имеете в виду.
При двусмысленности a <refname> устраняется неоднозначно, принимая первое совпадение в следующих правилах:

Если $GIT_DIR/<refname> существует, это то, что вы имеете в виду (обычно это полезно только для HEAD, FETCH_HEAD, ORIG_HEAD, MERGE_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. См. " Почему git checkout с явным" refs/heads/branch "дает отдельный HEAD?".

Чтобы избежать этого и по-прежнему использовать однозначный реф, введите:

git checkout -B master heads/master

Ответ 2

Хотя это не относится к ситуации с ОП, я получил предупреждение refname is ambiguous после случайного выполнения git branch origin/branch вместо git checkout origin/branch. Это создало локальную ветвь с именем origin/branch, что сделало ее неоднозначной с удаленной ветвью. Решение проблемы было таким же простым, как git branch -D origin/branch (безопасно, потому что -D работает с локальными ветвями).

Ответ 3

Это случилось со мной. У меня как-то был файл .git/master, содержащий ша. Не знаю, как это произошло, но когда я удалил его, ошибка исчезла. Если вы внимательно прочитали принятый ответ, это "ожидаемое поведение", но вы не увидите этого .git/master, если вы это сделаете, например. git show-ref master, потому что он следует несколько иным правилам.