はじめに
Git の git commit --fixup
コマンドを使っているときに、コミットメッセージの変更も一緒にできないかなと思って調べたら、ちょうど求めていた機能があったので、その紹介です。
--fixup について
git commit --fixup=<commit>
は、指定されたコミットのコミットメッセージに接頭辞 fixup!
を付けたコミットを作成するコマンドです。
これと git rebase --autosquash
を併用することで、fixup で指定したコミットともう一方のコミットを合体することができます。
このとき、コミットメッセージは指定されたコミットのコミットメッセージと同じものになります。
詳しくは git commit --fixup
で調べてください。
--fixup=amend について
コミットメッセージを変更したいときは git commit --amend
や git rebase -i
をして reword を行う、といったやり方等で対処すると思います。
さて、先頭以外のコミットの変更をした上で、コミットメッセージの変更も行いたい場合はどうするでしょうか?
やり方は色々あると思いますが、git commit --fixup=amend:<commit>
を使う選択肢はかなり有用だと思います。
使い方
例として、以下のような状況を考えます。
$ git log --oneline
2e12dad (HEAD -> main) third commit
658d8d5 second commmit
616a75c first commit
ここで second commmit
の内容とコミットメッセージの typo を修正したいと仮定します。
そのような場合、まずファイルの修正を行い、コミットをする際に以下のようなオプションを付けてコマンドを実行します。
$ git commit --fixup=amend:HEAD^
コマンドを実行するとエディタが開き、以下のような内容が表示されます。
amend! second commmit
second commmit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
ここで、コミットメッセージの description 部分である、3行目の second commmit
の文字列を修正して、正しいコミットメッセージにして保存します。
amend! second commmit
- second commmit
+ second commit
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
そうすると、コミットログは以下のようになっているはずです。
$ git log --oneline
356604f (HEAD -> main) amend! second commmit
2e12dad third commit
658d8d5 second commmit
616a75c first commit
修正したいコミットメッセージに接頭辞 amend!
の付いたコミットが追加されています。
この状態で git rebase --autosquash
を実行します。
pick 658d8d5 second commmit
fixup -C 356604f amend! second commmit
pick 2e12dad third commit
上記は git rebase -i --autosquash HEAD~3
の結果ですが、amend!
となっている部分が fixup として扱われているのが分かります。
実行後にコミットログを見ると、
$ git log --oneline
de5391c (HEAD -> main) third commit
cd852b0 second commit
616a75c first commit
となっており、コミットメッセージの変更もできていることが分かります。
勿論、fixup と同様にファイルの内容の変更もできています。
終わりに
この記事では git commit --fixup=amend:<commit>
について紹介をしました。
他にも git commit --fixup=reword:<commit>
という類似のオプションもあり、これはコミットメッセージの変更だけを行うオプションです。
Git のヘルプを見ると、知らなかった便利なオプションを見つけられることもあると思うので、軽く見てみると面白いかもしれません。