Edited at

Gitのコミットメッセージの書き方

More than 3 years have passed since last update.


Gitのコミットメッセージの書き方

自分なりにまとめてみました。Git歴浅いので、意見募集中です。

(2014年12月17日追記)

想像以上にたくさんの方にストックなりはてブなりいただいたので、はてブでなるほど!と思ったコメントをもとに少し修正・加筆してみました。


原則

以下のフォーマットとします。

1行目:変更内容の要約(タイトル、概要)

2行目 :空行

3行目以降:変更した理由(内容、詳細)

日本語でも英語でもOKですが、リポジトリで統一してください。


1行目

コミット種別と要約を書きます。フォーマットは以下とします。

[コミット種別]要約


コミット種別

以下の中から適切な種別を選びます。

(多すぎても悩むのでこれぐらいで)


通常版


  • fix:バグ修正

  • hotfix:クリティカルなバグ修正

  • add:新規(ファイル)機能追加

  • update:機能修正(バグではない)

  • change:仕様変更

  • clean:整理(リファクタリング等)

  • disable:無効化(コメントアウト等)

  • remove:削除(ファイル)

  • upgrade:バージョンアップ

  • revert:変更取り消し

(2014年12月17日追記)

コミットが種別が多すぎて、運用が大変そうというコメントがありましたので、ライト版を考えてみました。


ライト版


  • fix:バグ修正

  • add:新規(ファイル)機能追加

  • update:機能修正(バグではない)

  • remove:削除(ファイル)


要約

変更内容の概要を書きます。シンプルかつ分かりやすく。(難しい)

【例】削除フラグが更新されない不具合の修正


3行目

変更した理由を出来るかぎり具体的に書きます。

Redmine等のチケットと連携している場合はここで紐付けを行います。

【例】refs #110 更新SQLの対象カラムに削除フラグが含まれていなかったため追加しました。


まとめ

こんな感じで!


スリーライン派(コミットベース派)


[fix]削除フラグが更新されない不具合の修正

refs #110 更新SQLの対象カラムに削除フラグが含まれていなかったため追加しました。


(2014年12月17日追記)

1行で出力したときにすぐわかるように、チケットは1行目の先頭に書いて欲しいというコメントがありまして、ワンライン派(チケット駆動というかチケットに詳細書いてある人用ですかね)を追加しました。


ワンライン派(チケット駆動派)


[fix]refs #110 削除フラグが更新されない不具合の修正

更新SQLの対象カラムに削除フラグが含まれていなかったため追加しました。


※チケットに詳細を書いている場合は1行のみでもOK。


コミット単位について

主旨とはそれますが、コミットは出来る限り細かい粒度で行ってください。

「細かい」の基準は難しいと思っていますが、ひとまず、複数のバグの修正をひとつのコミットのまとめる等はNGです。

最低限自分なりの哲学や一貫性があれば(説明出来れば)、OKかなと思っています。

あとは参考URLを参考にしてください。(丸投げ)


参考URL

変更を記録するコミット:

http://www.backlog.jp/git-guide/intro/intro1_3.html

git commit時のコメントを英語で書くための最初の一歩:

http://www.sssg.org/blogs/hiro345/archives/11721.html

クリアなコードの作り方: 意図が伝わるコミットのしかた:

http://www.clear-code.com/blog/2012/3/13.html

提言: コミットメッセージの一行目には要求仕様を書け:

http://qiita.com/magicant/items/882b5142c4d5064933bc

[翻訳] 私のコミットをまとめないで:

http://qiita.com/gogotanaka/items/8c55f69120965b077737

[翻訳] Git 活用法 ーコードはいつも1行ごとにドキュメント化されている

http://postd.cc/every-line-of-code-is-always-documented/