Jak rozwiązać ten problem? Używaj git fsck
i loguj!
Najpierw utwórz plik zawierający utracone (nieosiągalne) zatwierdzenia i obiekty blob. (UWAGA: jeśli zrobiłeś coś takiego, git gc
to zbierze wszystkie zatwierdzone przez nich zatwierdzenia i nie znajdziesz ich tutaj!)
$git fsck --lost-found > lost_found.commits
To daje taki plik:
zwisające popełnić dec2c5e72a81ef06963397a49c4b068540fc0dc3
zwisające blob f8c2579e6cbfe022f08345fa7553feb08d60a975
zwisające blob 0eb3e86dc112332ceadf9bc826c49bd371acc194
zwisające blob 11cbd8eba79e01f4fd7f496b1750953146a09502
zwisające popełnić 18733e44097d2c7a800650cea442febc5344f9b3
zwisające blob 1e53a5cdb3ecdde27081ec6e8b31e4070106ee05
Następnie możesz otworzyć ten plik w swoim ulubionym edytorze tekstu, aby skopiować stamtąd skróty zatwierdzenia / blogu. (* kaszel * makra Vima działają świetnie na ten * kaszel *)
Teraz możesz zalogować się ponownie z tego zatwierdzenia za pomocą czegoś takiego jak git log --oneline <commit hash>
. Alternatywnie powinien działać gitk, tig lub inna przeglądarka git.
W twoim przypadku, jeśli znajdziesz hash dla zatwierdzenia F, dziennik pokaże ci coś takiego:
A---B---E---F
Szybko i łatwo! Teraz możesz znaleźć kontekst wszystkich tych wiszących zatwierdzeń.
PS Tak, wiem, późny post, ale cóż, ktoś może go tutaj znaleźć i uznać za przydatny. (Najprawdopodobniej ja za 6 miesięcy, kiedy ponownie to wygoogluję)
commit --amend
lubrebase
, powiedzmy, przypadkowo osieroconym przez pracę z odłączoną GŁOWĄ.