[git]リビジョンの復元


undo git --amend
ソース:How to undo “git commit --amend” done instead of “git commit”
新しいcommitで書く必要がありますが、--amendオプションで上書きする場合があります.この場合、次のコマンド言語を返すことができます.(ただし、前のコマンドがgit commit --amendであれば)
$ git reset --soft HEAD@{1}
使用方法を返すにはreflogを使用します.
たとえば、次のcommitがスタックされているとします.
$ git log --pretty=oneline
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
4番目のcommitを誤って--amendと書くと、git logは3番目のcommitが消えたことを示す
$ git commit --amend -m "fourth commit"
484a59275031909e19aadb7c92262719cfcdf19a fourth commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
git reflogを使用すると、消失した3番目のcommitがHEAD@{1}に表示されます.
$ git reflog
484a592 HEAD@{0}: commit (amend): third commit(2)
1a410ef HEAD@{1}: commit: third commit
cac0cab HEAD@{2}: commit: second commit
fdf4fc3 HEAD@{3}: commit: first commit
このときHEAD@{1}とは、Gitのreflogが変更されるたびに残されたログであるHEADを意味する.よく使われるgit logを使うと見えませんが、git log -gまたはgit reflogを使うと見えます.commit --amendからHEADに変更されたため、reflogが残り、reflogを使用して戻ることができます.
詳細なreset --softについては、Gitの内部操作とデータ復旧の「データ・リカバリ」タブを参照してください.