Gitのコミットメッセージの書き方
自分なりにまとめてみました。Git歴浅いので、意見募集中です。
(2014年12月17日追記)
想像以上にたくさんの方にストックなりはてブなりいただいたので、はてブでなるほど!と思ったコメントをもとに少し修正・加筆してみました。
(2022年1月4日追記)
最新の書き方をこちらに書きました。
https://zenn.dev/itosho/articles/git-commit-message-2023
原則
以下のフォーマットとします。
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/