Повреждение репозитория мерзавца (неправильная проверка заголовка; свободный объект поврежден),

Я испытал сбой питания вчера вечером при записи сообщения о фиксации. Когда я загрузил машину назад, я не мог завершить фиксацию. Я работал git reset, добавленный назад измененные файлы, и попробованный еще раз, и получил это:

% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object

git fsck показывает следующее:

% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt

Я замечаю, что сообщения жалуются на различные объекты.

Я искал ТАК и сеть и попробовал несколько разных вещей, но напрасно.

  • У меня нет недавней резервной копии.
  • Клонирование репозитория в другой каталог не помогает; новый репозиторий показывает те же самые проблемы.
  • git stash дает то же сообщение как git commit. Все другие команды мерзавца, кажется, обычно работают.

Как я могу сказать что не так и зафиксировать его?

Править: git log вывод, как предложено (просто первые несколько строк):

% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c

Это - маленький персональный проект; я обычно просто работаю в (ведущем устройстве), но я делал эксперимент в то время (new_tokenize). 253b086 была последняя успешная фиксация перед сбоем питания.

62
задан 19 May 2014 в 04:31

1 ответ

Как описано в этот ответ я работал:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

, Который удалил все мои повисшие блобы и повисшие фиксации, а также поврежденные объекты дб.

Это было намного быстрее, чем разыскивание их один за другим!

7
ответ дан 31 October 2019 в 14:20

Другие вопросы по тегам:

Похожие вопросы: