コミットの取り消し
- 直前のコミットをなかったことにする
git reset --soft HEAD^
- 直前のコミットを取り消し
git reset --hard HEAD^
- コミット後の変更を全部消したい
git reset --hard HEAD
- addを取り消したい
git reset --mixed HEAD
- git resetをなかったことにする
git reset --hard ORIG_HEAD
reflog
- reflog(参照ログ)とは HEAD やブランチ先端の動きの履歴
各個人のローカルリポジトリに存在 - ブランチの切り替え、新たに加えられた変更のプル、履歴の書き換え、あるいは単なる新規コミットの実行などを記録
git reflog で HEAD の移動履歴を、git reflog <ブランチ名> でそのブランチ先端が指していたコミットの一覧を確認可能 - HEAD@{5}: HEAD の五つ前の状態を示す
$ git reflog
d22bfa0 HEAD@{0}: commit (amend): Add the contens of poem-c
8c9300c HEAD@{1}: commit: Add the contens of poem-c
6a67f31 HEAD@{2}: commit: Add empty poem-c
f7c3605 HEAD@{3}: reset: moving to @^
...
- 間違えて意図と異なるコミットへ git reset --hard して、必要なコミットを失った場合
git reflog
かgit log -g
でreflog
を見る - 失ったコミットがあれば、
git reset --hard HEAD@{<n>}
でそのコミットへ HEAD を移動できる -
git branch recover-branch HEAD@{<n>}
すれば、そのコミットが先端のブランチを作成できる