Повреждение данных с помощью git

Я работал над проектом и столкнулся с аппаратным сбоем. У меня есть около 30 коммитов, которые я не успел нажать до того, как это произошло. Я оправился от сбоя и проверил свое репо. Теперь я получаю это сообщение об ошибке от файла git status.

error: object file .git/objects/a8/f43fd5a872feda2a771e6a1ced1518f455d9f3 is empty
error: unable to find a8f43fd5a872feda2a771e6a1ced1518f455d9f3
error: object file .git/objects/a8/f43fd5a872feda2a771e6a1ced1518f455d9f3 is empty
fatal: loose object a8f43fd5a872feda2a771e6a1ced1518f455d9f3 (stored in .git/objects/a8/f43fd5a872feda2a771e6a1ced1518f455d9f3) is corrupt

Как я могу удалить этот пустой объект и не получить сообщение об ошибке от HEAD?

Я попытался вручную удалить плохой объект, но получил эту ошибку:

fatal: could not parse HEAD

Заранее спасибо.


person user3386050    schedule 25.10.2014    source источник
comment
Этот вопрос и этот вопрос, вероятно, будет полезен для вас.   -  person Makoto    schedule 25.10.2014
comment
возможный дубликат Как восстановить объекты Git, поврежденные жестким диском провал?   -  person Andrew C    schedule 25.10.2014
comment
Моя проблема как немного проще. Я только что сделал шаги ниже. Спасибо за внимание.   -  person user3386050    schedule 25.10.2014


Ответы (1)


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

  1. Я пошел в ~/my_project/.git/logs/refs/heads/ В этом каталоге использовал возвышенный текстовый редактор, чтобы открыть файл с именем: master (этот файл содержит историю коммитов)

  2. Я перешел к последней строке кода. Он содержал NULL, NULL, NuLL, повторяющиеся снова и снова. Я удалил его и сохранил файл.

  3. В последней хорошей строке коммитов вы увидите 2 строки фиксации по 40 символов в каждой строке. Я скопировал вторую строку символов.

  4. Далее я пошел в этот каталог. ~/my_project/.git/refs/heads В этом каталоге используется возвышенный текстовый редактор, чтобы открыть файл с именем: master (этот файл содержит последнюю фиксацию в вашей истории)

  5. Я вставил строку фиксации, которую скопировал ранее, и сохранил файл.

  6. Я запустил статус git, и он заявил, что моя ветка опережает origin/master на 29 коммитов.

  7. Я подтолкнул свои коммиты.

  8. Запустил еще один коммит git, и он зафиксировал изменения, которые должны были быть в этом поврежденном коммите.

  9. Теперь я вернулся туда, где остановился.

Я надеюсь, что это поможет любому, кто сталкивается с этой проблемой.

person user3386050    schedule 25.10.2014