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

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

Я видел несколько человек, задающих один и тот же вопрос, но, похоже, ни один из их советов не применим ко мне. Я получаю предупреждение, которое находится в названии этого, но у меня нет никаких тэгов с именем "master". Это результат git branch -a:

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Любая идея, что здесь может быть неправильным? Я использую только git в течение нескольких месяцев, поэтому в основном меня беспокоит, что эта неоднозначность может испортить репо в будущем.

4b9b3361

Ответ 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. Эта команда подробно объясняется здесь