git resetでコミットを取り消す

職場では、GitHubを使ってコードの管理を行っています。

コードの修正を行って、コミットしてプルリクを出す

フィードバックと修正を繰り返す

先輩「OKです。コミットが増えてきたので一つにまとめてからマージしてください」

コミットをひとつにまとめる??どうしたらいいんだ??

となったので、コミットを取り消す方法を調べました。

git log

git log

このコマンドで、直近のコミット履歴を調べられます。

一番上に表示されるのが、最新のコミットです。

確認出来たら、キーボードの「Q」を押して抜けます。

git reset

コミットを取り消すには、

git reset

を使います。

git resetの後ろにつけるオプションによって、出来ることが少し変わります。

git resetのみ

git reset

オプションをつけずに実行すると、ステージングした変更がステージング前の状態に戻ります。

f:id:endoakak:20220104111301j:plain

git addしたけどやっぱり取り消したい、というときに使えます。あまり使う場面はなさそうな気がします。

git reset HEAD^

git reset HEAD^

オプションとしてHEAD^をつけると、直近のコミットを取り消します。コードの変更自体は消えず、コミットだけをなかったことにする感じです。ステージング前の状態になります。

f:id:endoakak:20220104111322j:plain

git reset --soft HEAD^

git reset --soft HEAD^

オプションに--soft HEAD^をつけると、HEAD^だけをつけた場合と同じく、直近のコミットを取り消します。

違う点は、コードの変更点がステージングされた状態になることです。

f:id:endoakak:20220104111339j:plain

git reset --hard HEAD^

git reset --hard HEAD^

オプションに--hard HEAD^をつけると、直近のコミットを取り消した上で、コードの変更点も消えます。一つ前のコミットの状態まで戻る感じですね。

直近コミットによるコードの変更点は消えてしまって(おそらく)復元できないので、実行には注意が必要です。

f:id:endoakak:20220104111356j:plain

まとめ

  • git reset ステージングを取り消す
  • git reset HEAD^ 直近コミットを取り消す
  • git reset --soft HEAD^ 直近コミットを取り消してステージングされた状態にする
  • git reset --hard HEAD^ 直近コミットを取り消してコードの変更点も削除