Исправить поврежденную Loose Git Head в Windows

Мой компьютер выключился из-за паники ядра. Я потерял репозиторий git на моей виртуальной машине, которая находится в Windows. Когда я захожу в .net, я получаю следующую ошибку:

corrupted loose reference file: HEAD

У меня есть папка с именем .git, содержащая список моих веток.

Исправить поврежденную Loose Git Head в Windows Есть ли способ преобразовать это обратно в объект git? Или мне придется переклонить каталог?


2
3 001
3

Ответы:

Вы можете установить его на предыдущий этап без повторного клонирования репозитория. Возможно, вы сможете сохранить свои локальные изменения, но вы потеряете все неопубликованные коммиты или тайники.

Вот что я бы сделал:

  1. Сделайте резервную копию вашего репозитория git. (просто скопируйте его, если вам что-нибудь понадобится).
  2. удалите папку .git (в linux, rm -rf .git)
  3. git init
  4. git remote add origin <your remote repository url>
  5. git fetch
  6. git reset origin/<the last branch you were in>

This is important: If you were in the Development branch, then give it as origin/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

и, возможно, проверьте, ожидаете ли вы изменений в ожидаемых ветках.

Наиболее уязвимыми будут незафиксированные изменения (особенно неустановленные). Но, по крайней мере, если описанные выше шаги пройдут успешно, вы сможете оценить ущерб и решить, что делать дальше.


Я исправил, сделав следующее:

  1. Заархивируйте свое репо на случай, если вы удалите не то
  2. Используйте редактор (NotePad ++ или VisualStudio Code) для поиска во всех файлах ссылок на вашу плохую ветку. Например, в NotePad ++ нажмите Ctrl + shft + F и найдите функцию / my-bad-branch.
  3. Откройте файлы с этой ссылкой и решите, следует ли вам удалить ссылку.
  • Мне оставалось только удалить ветку из .git / config
  • Ссылки на него в логах не удалял
  1. Найдите в папке .git / refs / remotes / origin и подпапках файл с тем же именем, что и ваша ветка. Например .git / refs / remotes / origin / feature / my-bad-branch. Удалить этот файл
  2. Попробуйте снова вытащить из начала координат