Ho subito un'interruzione di corrente ieri sera durante la scrittura di un messaggio di commit. Quando ho avviato il backup della macchina non ho potuto completare il commit. Ho corso git reset
, aggiunti nuovamente i file modificati, e ho cercato di nuovo, e ottenuto questo:Git repository corrotto (controllo dell'intestazione errato, oggetto allentato è danneggiato)
% 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
rivela quanto segue:
% 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
ho notato i messaggi si lamentano diversi oggetti.
Ho cercato SO e il Web e ho provato alcune cose diverse ma senza successo.
- Non ho una copia di backup recente.
- La clonazione del repository in un'altra directory non aiuta; il nuovo repository mostra gli stessi identici problemi.
git stash
dà lo stesso messaggio digit commit
. Tutti gli altri comandi git sembrano funzionare normalmente.
Come posso sapere cosa c'è che non va e risolverlo?
Edit:git log
uscita come suggerito (solo le prime righe):
% 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
Questo è un piccolo progetto personale; Di solito lavoro solo in (master) ma stavo facendo un esperimento al momento (new_tokenize). 253b086 è stato l'ultimo commit eseguito correttamente prima dell'interruzione dell'alimentazione.
forse prova un 'git log' o' git log --oneline --decorate --all' per vedere come appare la cronologia – jkyako
Fine. Non sei sicuro di cosa stai cercando esattamente, fammi sapere se vuoi la piena uscita o cosa. Non stavo facendo niente di strano – trentcl
Principalmente solo cercando di capire cosa alla fine è perso/inaccessibile, dati gli oggetti corrotti segnalati. Supponendo che tu abbia qualche modifica locale non salvata salvata da qualche altra parte, puoi 'git checkout' ognuno degli id elencati nel log? Mi chiedo se una soluzione di forza bruta sarebbe quella di scrivere su ciascuno degli id, verificare l'id, copiare l'albero di lavoro altrove (possibilmente un nuovo repository git) per provare e ricostruire un repository non corrotto. – jkyako