Come risolvo questo problema? Usa git fsck
e registra!
Creare innanzitutto un file contenente commit e BLOB persi (non raggiungibili). (NOTA: se hai fatto qualcosa del genere git gc
, la spazzatura raccoglierà tutti i loro impegni e non li troverai qui!)
$git fsck --lost-found > lost_found.commits
Questo ti dà un file come questo:
penzoloni commettere dec2c5e72a81ef06963397a49c4b068540fc0dc3
penzoloni blob f8c2579e6cbfe022f08345fa7553feb08d60a975
penzoloni blob 0eb3e86dc112332ceadf9bc826c49bd371acc194
penzoloni blob 11cbd8eba79e01f4fd7f496b1750953146a09502
penzoloni commettere 18733e44097d2c7a800650cea442febc5344f9b3
penzoloni blob 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05
È quindi possibile aprire questo file con l'editor di testo preferito per copiare gli hash di commit / blog da lì. (* tosse * macro vim funziona alla grande per questo * tosse *)
Ora puoi tornare indietro da questo commit con qualcosa di simile git log --oneline <commit hash>
. In alternativa, gitk, tig o qualsiasi altro visualizzatore git dovrebbe funzionare.
Nel tuo caso, se trovi l'hash per commit F, il registro ti mostrerà qualcosa del genere,
A---B---E---F
Facile e veloce! Ora puoi trovare il contesto dietro tutti questi commit penzolanti.
PS Sì, lo so, post in ritardo, ma vabbè, qualcuno potrebbe trovarlo qui e trovarlo utile. (Molto probabilmente io tra 6 mesi quando ricomincio a cercarlo su Google)
commit --amend
orebase
uno accidentalmente orfano lavorando con un HEAD distaccato, per esempio.