Git 'фатальный: Нет таких ссылок: HEAD'
В моем репозитории 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
печатает все файлы проекта, помеченные как новый файл.
Я изменил имя папки репозитория некоторое время, и когда я изменил его, все было не так.
Ответы
Ответ 1
Вы потеряли HEAD
, поэтому вам нужно его воссоздать. Самое простое дело в этом.
echo ref: refs/heads/master >.git/HEAD
Теперь вы можете запустить другие команды git и посмотреть, где вы находитесь.
(Хотя теоретически вы можете попытаться сделать версии git symbolic-ref HEAD refs/heads/master
newer git не распознают .git
как репозиторий git, если он уже содержит HEAD
, поэтому это не будет работать для создания нового.)
Ответ 2
HEAD
обычно является ссылкой на конкретную ветвь; в вашем случае кажется, что указатели ветвей пропали, поэтому ссылку HEAD не может быть разрешена.
Вы можете использовать git fsck --lost-found
для сканирования кеша объектов для недоступных объектов; в частности, вас интересуют коммиты, которые затем можно найти ниже .git/lost-found/commit/
; это указатели на ваши ветки, все, что вам нужно сделать, это выяснить, что такое, и создавать новые ссылки, используя git branch
.
Ответ 3
Я думаю, что этот ответ может быть полезен для кого-то.
Я решил эту проблему почти.
Сначала я сделал, как писал Чарльз Бейли, использовать
echo ref: refs/heads/master >.git/HEAD
Затем моя ветка изменилась на мастер. Я совершил изменения и смог переключиться на свою основную ветку. Проблема заключалась в том, что я не мог использовать ни одно из моих локальных веток. Особенно я хотел работать на ветке 812. Поэтому я нашел последнюю фиксацию для ветки 812 (создать сообщение, когда commit очень полезен;)) и переключился на него. Затем я создал ветвь 812 на основе той, на которую я переключился. К сожалению, некоторые файлы отсутствовали. К счастью, у меня были их на сломанном репо, которое я скопировал перед "эхом"
Ответ 4
Для меня проблема заключалась в том, что на Mac OS X был установлен флаг 'uchg' или 'uappnd', блокирующий некоторые файлы git независимо от perms. я reset chflags, как это, и он решил это для меня:
sudo chflags -R 0000 .