Git: 直前のコミットを取り消す
最終更新
直近のコミットを取り消すには、その変更をどうするかを決めます。git reset --soft HEAD~1 でステージしたまま残すか、素の git reset HEAD~1 でステージ解除したまま残すか、git reset --hard HEAD~1 で破棄します。コミットがわずかに間違っているだけなら、git commit --amend がその場で修正します。すでにpush済みなら、履歴を書き換える代わりに git revert を使います。より古いコミットや複数のコミットをまとめて取り消すには、コミットの取り消しページを参照してください。
これらをターミナルプレイグラウンドで試してみましょう - ブラウザ内の本物のシェルで、インストールは不要です。
変更をどうするか選ぶ
| Goal | Command |
|---|---|
| コミットを取り消し、変更をステージしたまま残す | git reset --soft HEAD~1 |
| コミットを取り消し、変更をステージ解除したまま残す | git reset HEAD~1 |
| コミットを取り消し、変更を破棄する | git reset --hard HEAD~1 |
| 直前のコミットを修正する(メッセージやファイル) | git commit --amend |
| すでにpushしたコミットを取り消す | git revert HEAD |
実践例
直前のコミットを取り消し、より良いメッセージでコミットし直します。
| Step | Command | Result |
|---|---|---|
| 1 | git reset --soft HEAD~1 | コミットが削除され、変更はステージされたまま |
| 2 | git commit -m "clearer message" | 同じ変更をコミットし直す |
Git 直前のコミットの取り消しに関するよくある質問
変更を残したまま直前のコミットを取り消すには?
git reset --soft HEAD~1 を実行します。これは直前のコミットを削除しますが、その変更をステージしたまま残すので、すぐにコミットし直せます。代わりに変更をワーキングツリー内でステージ解除の状態にしたい場合は、git reset HEAD~1(デフォルトモード)を使います。直前のコミットを取り消して変更も削除するには?
git reset --hard HEAD~1 を実行します。これはコミットを削除し、その変更をワーキングツリーから破棄します。破壊的な操作です - 作業が必要になるかもしれない場合は、代わりに --soft を使うか、後で git reflog で復元してください。コミットメッセージだけを直したい場合は?
git commit --amend を使います。直前のコミットを再度開くので、別のコミットを作らずにメッセージを編集(必要ならファイルの再ステージも)できます。すでにpushしたコミットのamendは、履歴を書き換えるので避けてください。pushした後に直前のコミットを取り消すには?
git revert HEAD を使います。revertは直前のコミットを打ち消す新しいコミットを作り、履歴をそのまま保ちます - 共有ブランチには安全な選択です。pushしたコミットをresetすると、他の全員が書き換えられたブランチを整合させる羽目になります。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルでこれらのコマンドを実行できます - インストールは不要です。Coddyの無料のインタラクティブなGitコースでも、変更の取り消しをステップごとに扱っています。