Posted at

gitで直近のcommitと2つ以上前のcommitをまとめる

直近のcommitと1つ前のcommitをまとめるのはやったことあったけど、掲題の件をやりたくなったのは初めてなので。


シチュエーション


  1. Aの修正を行ってcommitした

  2. Bの修正を行ってcommitした

  3. Aの修正ミスに気づいて再修正してcommitした

1と3のcommitをまとめたい!


git rebaseだけでうまくいく

HEADの3つ前まで、つまり上記の1,2,3のcommitを全て対象にしてrebaseコマンドを叩く

git rebase -i HEAD~~~

すると

pick commit_no_1 commit_message

pick commit_no_2 commit_message
pick commit_no_3 commit_message

て感じの画面がエディタで開く。

当たり前なのかもしれないが、この画面でcommitの位置を変更することができる。

つまり、rebaseでcommitの時系列も変更できる。

今回は3を1にまとめたいので、

pick commit_no_1 commit_message

pick commit_no_3 commit_message
pick commit_no_2 commit_message

こうする。

そして

pick commit_no_1 commit_message

fixup commit_no_3 commit_message
pick commit_no_2 commit_message

としてやることで、commit_no_3が手前のcommit_no_1にまとめられる。

あとはpushすればいいだけ!

カンタン。