Git

すべてのコミットメッセージからプレフィックスを削除する

はじめに

コミットメッセージにプレフィックスを付けたら生産性があがった!とかいう記事を読んだことはないだろうか。確かにプレフィックスをつけると効率が上がるかもしれない

ただなんとなくすべてに fix をつけろというわけでもない。プログラマがやることなんて殆どが修正なんだからそれをしたらプレフィックスをわざわざ書いている意味がなくなる

結局のところ本当の問題なのはコミットメッセージだけで何をしたコミットかわかればいいので、極論を言えば、情報量の多いコミットメッセージが書ければプレフィックスなんて必要ないし、そもそもコミット内容が伝わるコミットメッセージを書けない人はプレフィックスを付けても意味がない

ということで、書いてしまった過去のコミットメッセージからプレフィックスを取り除く方法です!

方法

まず注意として、この方法はすべてのコミットを修正するため歴史を改ざんすることになります。すでにGitHubなどに公開して複数人で作業している場合はやめておきましょう。また初心者はやらかしてしまっても自力で解決するのは難しいのでやめておきましょう。責任は取りません

gitで歴史操作というとrebaseなどが一般的ですが、今回のように多くのコミットを手作業で修正するのは大変なので、機械的に書き換えることができるgit filter-branch --msg-filterを使います

そしてメッセージの置換にはsedを使います。sedの使い方は調べれば詳しい記事があるので割愛しますが、sed -e "s/正規表現/置換する文字/"のようにして使う。そのまま実行すると対話的に変換することができるので実行する前に正しく置換できるか確認してみてください

以下に一般的なプレフィックスの置換コマンドを乗せます。fixとしている部分は英数字の最長一致なのでコミットメッセージ中に同じ記号が含まれてると誤ってすべて削除してしまうのでなるべく確認してから使ってください。またいろんなスタイルに対応できるような正規表現を書こうとしたのですが*を使うと変換ができなかったのでスペースなどの置換についても各自で入れてください

  • fix: sed -e "s/.*://"
  • [fix] sed -e "s/.*\]//"
git filter-branch --msg-filter 'sed -e ""'

参考