直近のcommitと1つ前のcommitをまとめるのはやったことあったけど、掲題の件をやりたくなったのは初めてなので。
シチュエーション
- Aの修正を行ってcommitした
- Bの修正を行ってcommitした
- 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すればいいだけ!
カンタン。