🐐
git 直前のコミットをなかったことする方法
はじめに
コミットしてから「なんか違うな」と感じたり,小さな間違いに気づくことがあります.
そのようなときに直前のコミットを取り消す方法を紹介します.
直前のコミットを取り消す方法
git reset
コマンドを使用することで直前のコミットを取り消すことができます.
取り消し方として主に3種類(soft, mixed, hard)の方法があります.
(他にはmerge, keepというものが存在します.)
3種類の方法によって変わるのは
- 直前にコミットした内容
- 直前にコミットした後のステージングエリアの内容
- ワーキングディレクトリの内容
をどのように扱うかです.
コミットとaddを取り消す (mixed)
git reset HEAD^
このコマンドでは,
- 現在のワーキングディレクトリの内容をワーキングディレクトリへ
- 現在のステージングエリアの内容をワーキングディレクトリへ
- 直前のコミットを取り消す
- 直前のコミット内容をワーキングディレクトリへ
ということを行います.
git reset --mixed HEAD^
と同じです.
commitの操作だけ取り消す (soft)
git reset --soft HEAD^
このコマンドでは,
- 現在のワーキングディレクトリの内容をワーキングディレクトリへ
- 現在のステージングエリアの内容をステージングエリアへ
- 直前のコミットを取り消す
- 直前のコミット内容をステージングエリアへ
ということを行います.
すべて無かったことへ (hard)
git reset --hard HEAD^
このコマンドでは
- 現在のワーキングディレクトリの内容を削除
- 現在のステージングエリアの内容を削除
- 直前のコミットを取り消す
- 直前のコミット内容を削除
ということを行います.
補足
HEAD^
は直前のコミットを指しています.
今回は直前のコミットを対象としていますが,HEAD^
部分を変更することで,2つ以上のコミットを取り消すこともできます.
例えば,直近3つのコミットをなかったことにしたい場合はHEAD~3
のように指定します.
Discussion