git resetでコミットを取り消す
職場では、GitHubを使ってコードの管理を行っています。
コードの修正を行って、コミットしてプルリクを出す
↓
フィードバックと修正を繰り返す
↓
先輩「OKです。コミットが増えてきたので一つにまとめてからマージしてください」
コミットをひとつにまとめる??どうしたらいいんだ??
となったので、コミットを取り消す方法を調べました。
git log
git log
このコマンドで、直近のコミット履歴を調べられます。
一番上に表示されるのが、最新のコミットです。
確認出来たら、キーボードの「Q」を押して抜けます。
git reset
コミットを取り消すには、
git reset
を使います。
git resetの後ろにつけるオプションによって、出来ることが少し変わります。
git resetのみ
git reset
オプションをつけずに実行すると、ステージングした変更がステージング前の状態に戻ります。
git addしたけどやっぱり取り消したい、というときに使えます。あまり使う場面はなさそうな気がします。
git reset HEAD^
git reset HEAD^
オプションとしてHEAD^をつけると、直近のコミットを取り消します。コードの変更自体は消えず、コミットだけをなかったことにする感じです。ステージング前の状態になります。
git reset --soft HEAD^
git reset --soft HEAD^
オプションに--soft HEAD^をつけると、HEAD^だけをつけた場合と同じく、直近のコミットを取り消します。
違う点は、コードの変更点がステージングされた状態になることです。
git reset --hard HEAD^
git reset --hard HEAD^
オプションに--hard HEAD^をつけると、直近のコミットを取り消した上で、コードの変更点も消えます。一つ前のコミットの状態まで戻る感じですね。
直近コミットによるコードの変更点は消えてしまって(おそらく)復元できないので、実行には注意が必要です。
まとめ
- git reset ステージングを取り消す
- git reset HEAD^ 直近コミットを取り消す
- git reset --soft HEAD^ 直近コミットを取り消してステージングされた状態にする
- git reset --hard HEAD^ 直近コミットを取り消してコードの変更点も削除