git commit --fixupで任意のコミットの内容に変更を加える

これまで、すでにコミットをした後に気づいた細かい不具合修正やlinterの適用やtypoの修正はgit commit --amendを利用して直前のコミットに混ぜることでコミットログを綺麗にするようにしていた。しかし、もし混ぜ込みたいコミットが直前ではない場合だと--amendは利用できないので新しくrefactor: fix typorefactor: apply formatterのようなコミットを作成していた。

今回、新しくgit commit --fixup <revision>というオプションを知った。これを使うと指定したコミットに対してfixup(修正)をするコミットを作成でき、git rebase --autosquash <revision>^と組み合わせることで特定のコミットに任意の変更を後から混ぜることができる。※ git rebaseをするためコミットハッシュは変わる

エディタを開かずにinteractive rebaseを行う

git rebase --autosquashを行うにはgitのバージョンが2.44以降である必要がある。もしそれ以前のgitバージョンを利用している場合は--autosquashは-iオプションをつける必要がある。その場合、エディタが開いてしまうが、GIT_SEQUENCE_EDITOR=:GIT_SEQUENCE_EDITOR=trueを指定しておけばエディタが開かずにinteractive rebaseが可能となる。

参考