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/*