Ответ 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