Мой компьютер выключился из-за паники ядра. Я потерял репозиторий git на моей виртуальной машине, которая находится в Windows. Когда я захожу в .net, я получаю следующую ошибку:
corrupted loose reference file: HEAD
У меня есть папка с именем .git, содержащая список моих веток.
Есть ли способ преобразовать это обратно в объект git? Или мне придется переклонить каталог?
Вы можете установить его на предыдущий этап без повторного клонирования репозитория. Возможно, вы сможете сохранить свои локальные изменения, но вы потеряете все неопубликованные коммиты или тайники.
Вот что я бы сделал:
rm -rf .git
)git init
git remote add origin <your remote repository url>
git fetch
git reset origin/<the last branch you were in>
This is important: If you were in the
Development
branch, then give it asorigin/Development
.
Теперь все должно быть на месте. Если вы запустите git status
, вы должны увидеть измененные файлы и т. д.
Это всего лишь предположение. Вы можете скопировать свою папку и попробовать и посмотреть :)
Обновлено: я пропустил важный шаг. Вам нужно получить данные после того, как вы добавите источник.
Надеюсь, это сработает для вас :)
То, что вы показываете в своем каталоге .git
, не является списком ветвей; это стандартная структура для метаданных репозитория git. Это включает несколько символических ссылок, таких как HEAD
. Когда ссылка сохраняется в виде файла на диске, она называется «свободной» ссылкой, о чем, я думаю, и говорится в сообщении об ошибке.
Таким образом, ошибка указывает на то, что файл .git/HEAD
поврежден. Само по себе это нетрудно исправить (хотя большинство команд git не будут работать, так как они в настоящее время не распознают, что это репо, поэтому потребуется немного клуджа); После внезапного сбоя системы главный вопрос заключается в том, не повреждено ли что-нибудь еще. Но в качестве отправной точки вы можете попробовать что-нибудь вроде
# back up .git/HEAD somewhere, just in case
echo 'ref: refs/heads/master` >.git/HEAD
Надеюсь, теперь ваше репо снова будет признано. Затем было бы разумно провести несколько проверок, например
git fsck
и, возможно, проверьте, ожидаете ли вы изменений в ожидаемых ветках.
Наиболее уязвимыми будут незафиксированные изменения (особенно неустановленные). Но, по крайней мере, если описанные выше шаги пройдут успешно, вы сможете оценить ущерб и решить, что делать дальше.
Я исправил, сделав следующее: