Исправить поврежденную головку Git в Windows
Мой компьютер выключился из-за паники в ядре. Я потерял git-репо на своей виртуальной машине, которая находится в Windows. Когда я захожу на.net я получаю следующую ошибку:
corrupted loose reference file: HEAD
У меня есть папка.git, в которой содержится список моих веток.
Есть ли способ, которым я могу преобразовать это обратно в git-сущность? Или мне придется отложить каталог?
2 ответа
Что вы показываете в своем .git
каталог не список ветвей; это стандартная структура для метаданных git-репо. Это включает в себя несколько символических ссылок, таких как HEAD
, Когда ссылка хранится в виде файла на диске, она называется "свободной" ссылкой, о чем, как я полагаю, говорится в сообщении об ошибке.
Таким образом, ошибка, кажется, указывает на то, что файл .git/HEAD
поврежден. Само по себе это не сложно исправить (хотя большинство команд git не будут работать, так как в настоящее время они не распознают, что это репо, так что это займет немного времени); после внезапного сбоя системы больший вопрос заключается в том, является ли что-либо еще поврежденным. Но в качестве отправной точки вы можете попробовать что-то вроде
# back up .git/HEAD somewhere, just in case
echo 'ref: refs/heads/master` >.git/HEAD
Теперь, надеюсь, ваш репо будет признан снова. Далее было бы разумно сделать некоторые проверки, такие как
git fsck
и, возможно, проверка ожидаемых изменений в ожидаемых ветвях.
Самой уязвимой вещью будут незафиксированные изменения (и особенно неустановленные изменения). Но, по крайней мере, если вышеуказанные шаги пройдут хорошо, вы сможете оценить ущерб и решить, куда идти дальше.
Вы можете установить его на свой предыдущий этап без повторного клонирования хранилища. Возможно, вы сможете сохранить свои локальные изменения, но вы потеряете все свои невыполненные коммиты или тайники.
Вот что я бы сделал:
- Сделайте резервную копию вашего репозитория git. (просто скопируйте его на случай, если вам что-нибудь понадобится).
- удалите папку.git (в Linux,
rm -rf .git
) git init
git remote add origin <your remote repository url>
git fetch
git reset origin/<the last branch you were in>
Это важно: если вы были в
Development
филиал, а затем дать его какorigin/Development
,
Теперь все должно быть на месте. Если вы бежите git status
, вы должны увидеть ваши измененные файлы и т. д.
Это всего лишь предложение. Вы можете скопировать свою папку и попробовать и посмотреть:)
Изменить: я пропустил, чтобы включить важный шаг. Вам нужно получить после добавления источника.
Надеюсь, это будет работать для вас:)
Я исправил, сделав следующее:
- Заархивируйте свое репо на случай, если вы удалите не то
- Используйте редактор (NotePad++ или VisualStudio Code) для поиска во всех файлах ссылок на вашу плохую ветку. Например, в NotePad ++ нажмите Ctrl+shft+F и найдите функцию /my-bad-branch.
- Откройте файлы с этой ссылкой и решите, следует ли вам удалить ссылку.
- Мне нужно было только удалить ветку из.git / config
- Ссылки на него в логах не удалял
- Найдите в папке.git/refs/remotes/origin и подпапках файл с тем же именем, что и ваша ветка. Например.git/refs/remotes/origin / feature/my-bad-branch. Удалить этот файл
- Попробуйте снова вытащить из исходной точки