「直前のコミットを取り消したい」というときに便利なのが git reset
コマンドです。
git reset –mixed HEAD^
直前のコミットを取り消し、ステージングは解除されて変更は作業ツリーに残ります。
git reset --mixed HEAD^
つまり、git add
する前の状態に戻ります。
git reset –soft HEAD^
直前のコミットを取り消し、変更内容はステージング状態に残します。
git reset --soft HEAD^
つまり、git commit
する前の状態に戻ります。
git reset –hard HEAD^
直前のコミットを取り消すだけでなく、変更内容も完全に削除します。
git reset --hard HEAD^
変更が完全に消えるので、本当に不要なときだけ実行しましょう。
push 済みのコミットについて
もし既にリモートに push 済みのコミットを消したい場合は、そのままでは反映されません。
git push --force-with-lease origin ブランチ名
のように force push する必要があります。
※--force-with-lease
は、リモート先頭が自分の認識から動いていない場合のみ上書きを許可し、他人の新しい push を誤って消しにくくします。
その他の応用例
HEAD^
: 直前のコミットHEAD~2
: 2つ前のコミット
と書くことで、直前以外のコミットも取り消せます。
つまり、以下のように実行すると直近2つのコミットを1つにまとめ直すこともできます。
git reset --soft HEAD~2
# まとめて再コミット
git commit
まとめ
git reset --mixed HEAD^
→git add
する前の状態に戻すgit reset --soft HEAD^
→git commit
する前の状態に戻すgit reset --hard HEAD^
→ コミットと変更内容も削除する
コメント