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

Git log: фатальный объект [sha1] поврежден

Есть ли способ восстановить мой репозиторий с историей фиксации в такт.

 # git log
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted

Из прочтения ссылки ниже это выглядит так, как будто я заберу его и начну.

http://www.miek.nl/s/7e76eadefe/

4b9b3361

Ответ 1

Есть ли у вас клоны этого хранилища в другом месте? Возможно, вы захотите прочитать этот пост от Linus Torvalds, чтобы восстановить этот поврежденный объект, предполагая, что поврежденный объект является блобом (содержимое файла).

Ответ 2

Я оказался в той же ситуации, возможно, из-за неправильного завершения работы виртуальной машины, в которой я работал. В .git/objects было около 10 объектов с нулевой длиной. Насколько я могу судить, фактические файлы исходного кода были точными, только репозиторий был закрыт.

$ git status
fatal: object fbcf234634ee04f8406cfd250ce5ab8012f92b08 is corrupted

В некоторых предложениях, которые я видел где-то в другом месте (включая ссылку Linus, упомянутую выше), я пытался временно перемещать поврежденные объекты git, жаловался на .git/objects в другом месте. Когда они переместили всех, я получил:

$ git status
fatal: bad object HEAD

Примерно через час Googling и попробовав различные решения, я сдался и начал новую рабочую копию, используя "git clone", чтобы вытащить из источника (что было около 2 часов позади моей рабочей копии). Затем я использовал rsync -rC (-C исключает файлы SCM), чтобы скопировать измененные файлы из перепутанной рабочей копии в новую рабочую копию.

Ответ 3

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

Моя виртуальная машина разбилась во время записи нажатой фиксации, поэтому объекты были безопасно сохранены на локальном компьютере. Я scp'ed их на виртуальную машину и вуаля - git fsck не выдает ошибок.

Ответ 4

Просто удалите поврежденный объект, о котором жалуется git. Я смог решить ту же проблему именно сейчас.

fatal: object 985a4870e7d890b314d2794377045a8b007c7925 is corrupted

Для вышеуказанной ошибки я смог найти соответствующий объект по адресу:

project_directory/.git/objects/98/5a4870e7d890b314d2794377045a8b007c7925

Здесь вы можете увидеть, что файл имеет 0 байт, и его удаление позволяет начать выборку.

Предположительно предыдущая выборка была прервана, оставив поврежденный объект с размером = 0 байт.

Ответ 5

Имела ту же проблему, в зависимости от того, какая команда git я запускал, она закончила с сообщением:

fatal: object <hash> is corrupted

У меня не было резервной копии и я не хотел потерять свои коммиты, поэтому я решил попробовать решение Jase и удалил файл длиной 0, который у меня был: .git/objects/00/<hash> Тогда получилось то же самое:

$ git status
fatal: bad object HEAD

Затем я попытался понять, что не так, и посмотрел на .git/refs/heads/master, где у меня был хэш.

Я просмотрел .git/logs/refs/head/master и нашел строки вроде этого:

<old commit> <new commit> <author> <timestamp> commit: <commit message>

Я удалил последнюю строку (которая has =) и вставил эту строку в .git/refs/heads/master, стирая ее содержимое

Затем я смог успешно выполнить.

Ответ 6

У меня была такая же проблема. Я заметил, что я не был зарегистрирован как root. Когда я вошел в систему под именем root, я смог проверить журнал без знака ошибки.

Чтобы укрепить этот хороший статус, я сделал следующее:

git add .
git commit -a -m "stabilize git"

Я вышел из корня и попытался вытащить из клиента. Это сработало для меня потом.

Когда я выполнил добавление и фиксацию, я понял, что все в порядке с тем, что было в каталоге. У меня не было изменений, видимых через "git статус".