Git 'Fatal: Нет такой ссылки: HEAD' - PullRequest
45 голосов
/ 31 января 2011

Странная вещь случилась с моим git-хранилищем. Когда я пытаюсь что-то зафиксировать в окне tortoisegit, я получаю все файлы из проекта. Я не могу отменить их, когда я получаю с сервера я получаю fatal: No such ref: HEAD и fatal: Cannot lock the ref 'HEAD'. Все мои местные филиалы отсутствуют. Есть ли способ решить проблему?

Это не первый коммит или что-то в этом роде. Эта вещь произошла внезапно.

EDIT:

git branch -a говорит: Failed to resolve HEAD as a valid ref

git status печатает все файлы проекта, помеченные как новый файл.

Некоторое время я менял имя папки репозитория, и когда я снова его изменял, все было не так.

Ответы [ 4 ]

67 голосов
/ 31 января 2011

Вы потеряли HEAD, поэтому вам нужно будет восстановить его. Самое простое, что можно сделать - это.

echo ref: refs/heads/master >.git/HEAD

Теперь вы сможете запускать другие команды git и видеть, где вы находитесь.

(Хотя, теоретически, вы можете попытаться сделать git symbolic-ref HEAD refs/heads/master более новыми версиями git, которые не распознают .git как репозиторий git, если он уже не содержит HEAD, поэтому это не сработает один.)

6 голосов
/ 31 января 2011

Я думаю, что этот ответ может быть полезным для кого-то. Я решил эту проблему почти. Первое, что я сделал, как писал Чарльз Бэйли, использовал

echo ref: refs/heads/master >.git/HEAD

Тогда моя ветка сменилась на master. Я внес изменения и смог переключиться на свою основную ветку. Проблема заключалась в том, что я не мог использовать ни один из моих местных филиалов. Особенно я хотел поработать с веткой 812. Поэтому я нашел последний коммит в ветке 812 (создать сообщение, когда коммит очень полезен;)) и переключился на него. Затем я создал ветку 812, основанную на той, на которую я переключился. К сожалению, некоторые файлы отсутствовали. К счастью, они были у меня на сломанном репо, который я скопировал до «эха»

6 голосов
/ 31 января 2011

HEAD обычно является ссылкой на определенную ветку; в вашем случае кажется, что указатели веток пропали, поэтому ссылка на HEAD не может быть разрешена.

Вы можете использовать git fsck --lost-found для проверки кэша объектов на предмет недоступности объектов; в частности, вас интересуют коммиты, которые затем можно найти ниже .git/lost-found/commit/; это указатели на ваши ветви, все, что вам нужно сделать, это выяснить, что есть что, и создать новые ссылки, используя git branch.

2 голосов
/ 24 апреля 2012

Для меня проблема заключалась в том, что в Mac OS X был установлен флаг 'uchg' или 'uappnd', блокирующий некоторые файлы git независимо от разрешений.Я сбросил chflags, как это, и он решил это для меня:

sudo chflags -R 0000 .
...