Wczoraj wieczorem doświadczyłem awarii zasilania podczas pisania komunikatu zatwierdzenia. Po ponownym uruchomieniu maszyny nie mogłem ukończyć zatwierdzania. Pobiegłem git reset
dodał powrotem zmienionych plików i spróbował ponownie i dostał to:Uszkodzone repozytorium Git (niepoprawne sprawdzanie nagłówka, luźny obiekt jest uszkodzony)
% 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
ujawnia, co następuje:
% 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
zauważam wiadomości skarżą się różnymi przedmiotami.
Szukałem SO i internetu i próbowałem kilku różnych rzeczy, ale bezskutecznie.
- Nie mam najnowszej kopii zapasowej.
- Klonowanie repozytorium w innym katalogu nie pomaga; nowe repozytorium wykazuje dokładnie te same problemy.
git stash
podaje tę samą wiadomość, cogit commit
. Wszystkie pozostałe polecenia git wydają się działać normalnie.
Jak mogę stwierdzić, co jest nie tak i naprawić?
Edit:git log
wyprowadzane jako sugerowane (wystarczy kilka pierwszych linii):
% 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
Jest to mały osobisty projekt; Zwykle po prostu pracuję (master), ale robiłem eksperyment w tym czasie (new_tokenize). 253b086 było ostatnim udanym zatwierdzeniem przed awarią zasilania.
Być może spróbuj 'git log' lub' git log --oneline --decorate --all', aby zobaczyć, jak wygląda historia – jkyako
Gotowe. Nie wiesz, czego dokładnie szukasz, daj mi znać, jeśli chcesz uzyskać pełną wydajność lub co. Nie robiłem nic nadzwyczajnego. – trentcl
Głównie po prostu próbuję dowiedzieć się, co ostatecznie jest stracone/niedostępne, biorąc pod uwagę uszkodzone obiekty zgłoszone. Zakładając, że masz jakieś niezatwierdzone lokalne zmiany zapisane gdzieś indziej, czy jesteś w stanie "git checkout", że każdy z wymienionych przez ciebie identyfikatorów znajduje się w logu? Zastanawiam się, czy rozwiązaniem może być skryptowanie każdego identyfikatora, sprawdzanie identyfikatora, kopiowanie działającego drzewa w innym miejscu (ewentualnie nowe repozytorium git), aby spróbować odbudować repozytorium nieuszkodzone. – jkyako