revertせずにGitで中間コミットを消す方法

2019年11月23日

Gitでrevertせずに中間コミットを消したいときはありませんか?

Gitでrevertした後にマージもれが発生する場合があるという事例も報告されていますし、マージもれさせないためにもできるだけrevertしたくないということもあると思います。
プロジェクトによってはrevertをあまりしない方がいいという規約があるかもしれませんね。

今回はGitでrevertせずに中間コミットを消す方法についてご紹介いたします。
どういう方法かというと、revertではなくrebaseを使った方法になります。



Gitでrevertせずに中間コミットを消す方法

次のようなリポジトリがあるとします。
Gitでrevertせずに中間コミットを消す方法

ご覧の通り全部で7コミットあり、
coommit 1
commit 2
commit 3
commit 4
no need commit
commit 5
commit 6
という順でコミットされています。(1つ目のコミットがcoommit 1となっているのは誤字です。言わずもがな、正しくはcommitですね)
この中で「no need commit」を消したいとします。

やり方は簡単で、まずコマンドラインで「git rebase -i HEAD~6」を叩きます。(HEADのあとは任意の数を指定。6を入力すると6個前のコミットまでさかのぼれます。)
するとこのような画面が出てきます。

実は、ここで「no need commit」を消してやって「:wq」をすれば「no need commit」のコミットを消すことができるのです。
「no need commit」を消し、この状態で「:wq」を押します。(何を言っているかよく分からない方はrebaseのやり方をググってください)

するとリベースが成功してこのようになりますね。

あとは「git push -f origin master」でforce pushします。
コミットログをご覧ください。
「no need commit」が消えているはずです。

なお、rebaseしてforce pushする作業はコミットIDが変わったりするのであまりおすすめできません。
revertが許されるなら素直にrevertをした方が良いと思います。

終わりに

今回はGitでrevertせずに中間コミットを消す方法についてご紹介いたしました。

使用した方法はrevertではなくrebaseです。
繰り返しになりますが、rebaseの取り扱いにはご注意ください。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いしております。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。

直接契約ができるフリーランスエージェント「エンハンス」を立ち上げました。
詳しくは下記LPをご参照ください。
https://enhance.decryption.co.jp/

Youtubeチャンネル開設いたしました。
チャンネル登録者10,000人を目指しているので、良いと思った方はチャンネル登録をお願いしたいです。
https://www.youtube.com/channel/UC219XhmSRxmXltTy6COxSMw






Git

Posted by ちこ