Одна вещь, которую вы можете использовать, это reflog
. По существу git reflog
похож на git log
, но вместо кодового коммита он содержит все действия, предпринятые по истории git репо.
Например вот недавний reflog от одного из моих проектов:
1b229a2 [email protected]{0}: commit: Speed up debug mode a little bit
9976a41 [email protected]{1}: commit (amend): Split LooseTire down to gameplay and presentation
b825442 [email protected]{2}: commit: Split LooseTire down to gameplay and presentation
889e828 [email protected]{3}: commit: Add a couple new interfaces
b82965a [email protected]{4}: commit: Move car to the gameplay folder
55360ae [email protected]{5}: commit: Fix a bug when displaying polygon collision shapes
decd93c [email protected]{6}: checkout: moving from 7f06e8fb6bc81566215173b9739b26758a69a82e to master
7f06e8f [email protected]{7}: checkout: moving from df922e5c2efcef3e6fc9566747efe9c79eae23b6 to df922e5c2efcef3e6fc9566747efe9c79eae23b6
df922e5 [email protected]{8}: checkout: moving from master to df922e5c2efcef3e6fc9566747efe9c79eae23b6
Как вы видите, есть некоторые извлечения (часть git bisect
я делал) и некоторые коммиты, даже в commit (amend)
. Это все действия, предпринятые в истории git репо.
Используя это в качестве руководства, я могу, например, получить git reset --hard [email protected]{2}
, чтобы получить свое репо до состояния, которое было до того, как я сделал git commit --amend
(2-я строка в рефлоге).