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

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 печатает все файлы проекта, помеченные как новый файл.

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

4b9b3361

Ответ 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 .