Gitで直前のコミットを取り消す方法(reset の使い分け)
「コミットを間違えた」「直前のコミットをやり直したい」——そんなときはgit resetで取り消せます。ただし変更内容を「残すか・消すか」でコマンドが違います。使い分けを知れば、安全にコミットをやり直せます。
git reset --soft HEAD~1 # 変更を残す(ステージ済み)
git reset --mixed HEAD~1 # 変更を残す(ステージ解除)
git reset --hard HEAD~1 # 変更も消す(注意)| オプション | コミット取り消し | 変更内容 |
|---|---|---|
| --soft | 取り消す | 残る(ステージ済み) |
| --mixed | 取り消す | 残る(ステージ解除) |
| --hard | 取り消す | 消える |
3つの使い分け
変更内容をどうしたいかで選びます。
- 変更を残したい
- コミットだけ取り消して書き直したいなら --soft か --mixed。変更内容はそのまま残るので、修正して再コミットできます。
- 変更ごと消したい
- コミットも変更も完全になかったことにするなら --hard。ただし変更が消えるため、慎重に使います。
コツ:迷ったら--soft か --mixed が安全。変更内容が手元に残るので、やり直しがききます。HEAD~1 の「1」は「1つ前まで戻す」という意味です。
使うときの注意
resetは強力なので扱いに注意します。
- --hardは要注意…変更が消えて戻せないことがある。実行前に確認を。
- 共有済みは避ける…他の人と共有(push済み)のコミットをresetすると混乱のもと。
- HEAD~の数字…2にすると2つ前まで戻る。
注意:すでにpush(共有)したコミットのresetは避けるのが基本です。チームで作業中の場合、履歴の書き換えはトラブルになります。共有済みを取り消したいときは、revert など別の方法を検討しましょう。
まとめ
直前のコミット取り消しはgit reset。変更を残すなら --soft / --mixed、変更ごと消すなら --hard(要注意)です。迷ったら変更が残る --soft / --mixed が安全。push済みのコミットへのresetは避け、必要なら revert を使いましょう。
よくある質問
Gitで直前のコミットを取り消すには?
git reset を使います。変更を残すなら git reset --soft HEAD~1(または --mixed)、変更ごと消すなら git reset --hard HEAD~1 です。
--soft・--mixed・--hardの違いは?
いずれもコミットを取り消しますが、--softは変更がステージ済みで残り、--mixedはステージ解除で残り、--hardは変更も消えます。迷ったら残る前者が安全です。
HEAD~1の意味は?
「1つ前のコミットまで戻す」という意味です。数字を2にすると2つ前まで戻ります。直前のコミットを取り消すならHEAD~1を使います。
push済みのコミットをresetしていい?
避けるのが基本です。共有済みの履歴を書き換えるとチームで混乱します。共有済みのコミットを取り消したいときは revert など別の方法を検討しましょう。