Ответы:
Я не понимаю последствий этого, но, как было предложено в этой теме , когда я столкнулся с этим, я просто сделал
$ mv .git/refs/remotes/origin/HEAD /tmp
(оставив его на всякий случай), а затем
$ git gc
работал без жалоб; У меня проблем не было.
git prune
сработал для меня, способ удалить данные, которые накопились в Git, но на которые не ссылается ничего полезного.
$ mv .git/refs/remotes/origin/HEAD /tmp
$ git gc
git prune
git gc
сработало для меня
Проблема, с которой я столкнулся (та же проблема, что и @Stavarengo, упомянутая в этом комментарии выше), заключается в том, что удаленная ветка по умолчанию ( develop
в моем случае) была удалена, но все еще упоминалась в .git/refs/remotes/origin/HEAD
.
Открытие .git/refs/remotes/origin/HEAD
в моем редакторе показало это:
ref: refs/remotes/origin/develop
Я тщательно отредактировал его, чтобы указать на мою новую ветку по умолчанию, и все было хорошо:
ref: refs/remotes/origin/master
Подсказка, которая меня предупредила, заключалась в том, что при запуске была git prune
обнаружена такая ошибка:
> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD
Увидев ответ Трентона, я посмотрел на свой .git/refs/remotes/origin/HEAD
и увидел, что он также указывает на старую ветку, которая теперь удалена.
Но вместо того, чтобы самому редактировать файл, я попробовал решение Райана:
git remote set-head origin --auto
Он автоматически установил файл в новую ветку и git gc
после этого работал нормально.
git remote set-head $REMOTE --auto
в моем случае $ REMOTE - это удаленный псевдоним, а не "origin" по умолчанию, потому что у меня установлено несколько пультов.
Я думал, что решение было следующим, поскольку это, казалось, сработало, но оказалось, что на самом деле проблема не решена.
git remote set-head origin --auto
git prune
(как рекомендовалось в первом выводе команды), поэтому я не могу точно сказать, что мне помогло - первое, второе или оба.
git remote set-head origin --auto
исправил мой файл refs / remotes / origin / HEAD без необходимости использовать меняgit prune
error: Multiple remote HEAD branches. Please choose one explicitly
и мне пришлось использовать git remote set-head origin mybranch
(в то время как ветка mybranch была проверена), чтобы ошибка исчезла.
Похоже, что ваши символические ссылки могут быть сломаны ... Попробуйте заменить его веткой по умолчанию следующим образом: Например, моя ветка по умолчанию - master
$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc
Это должно исправить это.
Причиной этого для меня была работа со сжатой папкой в Windows. Когда папка была распакована, это повредило файлы пакета, вызвав каскад других странных проблем, таких как невозможность удалить несуществующие ветки.
Единственным исправлением было стереть рабочий каталог и снова клонировать удаленные репо. К счастью, я все еще мог нажимать и получать обновления, чтобы ничего не потерялось. Теперь все хорошо.
master
другой, называемойdevelop
. За несколько дней до того, как я вернул его обратно сdevelop
на,master
и я удалил старую ветку по умолчаниюdevelop
, но в моем рабочем каталоге файл.git/refs/remotes/origin/HEAD
все еще указывал на то,refs/remotes/origin/develop
чего больше не существует. В этой ситуации удаление файла сработало.