Git: предупреждение: имя_файла 'master' неоднозначно
Я видел несколько человек, задающих один и тот же вопрос, но, похоже, ни один из их советов не применим ко мне. Я получаю предупреждение, которое находится в названии этого, но у меня нет никаких тэгов с именем "master". Это результат git branch -a
:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
Любая идея, что здесь может быть неправильным? Я использую только git в течение нескольких месяцев, поэтому в основном меня беспокоит, что эта неоднозначность может испортить репо в будущем.
Ответы
Ответ 1
Я обнаружил источник этого предупреждения гораздо раньше, когда неправильно выполнил команду "update-ref". Если вы забудете указать полный путь refs/heads/mybranchname в первом аргументе, то будет создан файл .git/mybranchname, что позже приведет к этому предупреждению при попытке переключиться на эту ветку.
Это решается простым удалением .git/mybranchname, например:
rm .git/master
И для справки, правильная форма для команды update-ref:
git update-ref refs/heads/mybranchname mytargetbranch
Не забывайте часть "refs/глав"!
Кроме того, мой самый распространенный вариант использования update-ref - это просто вручную переместить ветку, чтобы указать на другой коммит, что я нашел в более простом синтаксисе:
git branch -f myBranchToMove destinationBranchOrHash
Этот синтаксис проще для меня, потому что он не требует подверженного ошибкам квалификатора пути refs/heads.
Ответ 2
Как указано в "Git: refname 'master
' неоднозначно, это означает, что помимо heads/master
у вас есть еще один мастер в одном следующего пространства имен в репозитории git:
refs/<refname>
refs/tags/<refname>
refs/heads/<refname>
refs/remotes/<refname>
refs/remotes/<refname>/HEAD
Или даже ./<refname>
, как указано в Magnus .
Ответ 3
git fetch --prune
git pull origin branch-name
должен исправить вашу проблему.
Ответ 4
У меня была похожая проблема (не основная), когда я создал ветку с тем же именем, что и тег.
Это помогло мне удалить тег fooobar.com/questions/856/...
git push --delete origin tagname
Ответ 5
Для дальнейшего использования у меня возникла та же проблема, и в итоге мне помогло решение, описанное здесь. По сути, когда вы получаете Git: warning: refname 'xxx' is ambiguous
предупреждением, вы можете использовать: git show-ref xxx
чтобы проверить ссылки на ветку xxx
и проверить, какие из них имеют конфликт.
В моем сценарии это был тег с именем xxx
и именем ветки с тем же именем. Тег был сделан по ошибке и был удален с сервера, поэтому все, что мне нужно было сделать, это обновить мой локальный тег, чтобы он соответствовал серверу: git fetch -p -p
. Эта команда подробно объясняется здесь