Git: refname 'master' неоднозначно

Я посмотрел на все другие неоднозначные вопросы 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 ответа

Решение

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 обычно означает объект фиксации, на который ссылается refs/heads/master,
Если у вас есть оба heads/master а также tags/master можно прямо сказать heads/master сказать мерзавцу, кого ты имеешь в виду.
Когда неоднозначно, <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 Дай отдельную ГОЛОВУ? ".

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

git checkout -B master heads/master

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

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

Это сообщение также появится, если вы ошибочно настроили два удаленных сервера с одним и тем же именем, что дает двусмысленность.

Проверьте свои .git/configфайл. Если у вас есть более одного удаленного репо, настроенного с одним и тем же:

fetch = +refs/heads/*:refs/remotes/origin/*.

вы должны изменить одно из них на другое имя, например:

fetch = +refs/heads/*:refs/remotes/another_repo/*

Другие вопросы по тегам