[git] 困った時のコマンド集(直前の commit をなかったことにしたい)

git

commit した直後に、「ちょっと待った〜」と、commit を取り消したくなる時の対応方法を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • git version 2.30.1 (Apple Git-130)

git の commit をなかったことにしたい

git に commit してから、「まだ、ぜんぜん commit するレベルじゃなかった」と気づくことがあります。

一旦、commit をなかったことにして、やり直したくなる時です。

そのような時の対応方法を説明します。

commit を無かったことにする

直前の commit をなかったことにすることができます。

git reset

以下の手順となります。


% git commit -m "なかったことにしたい commit"
% git reset --hard HEAD^

"git reset" コマンドを使用することで、直前のコミットを無かったことにできます。

hard オプションは、commit を取り消して、ワークディレクトリ内も 最新にします。(取り消したかった commit の前の状態にするということです)

soft オプションを指定することもでき、commit を取り消すところは同じですが、ワークディレクトリ内は、現在の内容を保持したままです。(取り消したかった commit の内容を含んでいるということです)

mixed というオプションもあり、変更を残したままステージングしていない状態を作ることもできます。

引数 HEAD^ は、対象 commit を指定しています。HEAD^ は、直前の commit を指します。

commit を取り消すような 新しい commit を行う

直前の commit を打ち消すような変更内容を新しく commit することで、直前の commit を無効化することもできます。

無かったことにしたい commit は、履歴上には残ります。

git revert

以下の手順となります。


% git commit -m "なかったことにしたい commit"
% git revert 

reset と revert

ローカルでのみ リポジトリを運用しているときは良いのですが、複数人で作業を行なっていて、ローカルの変更を push しているときには、注意が必要です。

リモートに push してしまった commit を git reset で無かったことにしてしまうと、リモートの履歴との不整合が発生してしまいます。

commit を リモートに push してしまった時には、"git revert" を使うのが安全です。

まとめ:直前の commit の修正方法

直前の commit をなかったことにする
  • git revert で打ち消すような新しい commit を行う
  • git revert を使うと、リモートとの履歴の不整合が起こってしまうので、気をつける
  • git reset で commit そのものをなくす

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です