commit log規(guī)范的意義:
- 便于程序員對提交歷史進(jìn)行追溯,了解發(fā)生了什么情況。
- 一旦約束了commit message,意味著我們將慎重的進(jìn)行每一次提交,不能再一股腦的把各種各樣的改動都放在一個git commit里面,這樣一來整個代碼改動的歷史也將更加清晰。
- 格式化的commit message才可以用于自動化輸出Change log。
commit message格式 :
<type>(<scope>): <subject>
<body>
<footer>
type(必須)
用于說明git commit的類別,只允許使用下面的標(biāo)識。
feat:新功能(feature)。
fix/to:修復(fù)bug,可以是QA發(fā)現(xiàn)的BUG,也可以是研發(fā)自己發(fā)現(xiàn)的BUG。
- fix:產(chǎn)生diff并自動修復(fù)此問題。適合于一次提交直接修復(fù)問題
- to:只產(chǎn)生diff不自動修復(fù)此問題。適合于多次提交。最終修復(fù)問題提交時使用fix
docs:文檔(documentation)。
style:格式(不影響代碼運(yùn)行的變動)。
refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動)。
perf:優(yōu)化相關(guān),比如提升性能、體驗(yàn)。
test:增加測試。
chore:構(gòu)建過程或輔助工具的變動。
revert:回滾到上一個版本。
merge:代碼合并。
sync:同步主線或分支的Bug。
scope(可選)
scope用于說明 commit 影響的范圍,比如數(shù)據(jù)層、控制層、視圖層等等,視項(xiàng)目不同而不同。
例如在Angular,可以是location,browser,compile,compile,rootScope, ngHref,ngClick,ngView等。如果你的修改影響了不止一個scope,你可以使用*代替。
subject(必須)
subject是commit目的的簡短描述,不超過50個字符。
建議使用中文(感覺中國人用中文描述問題能更清楚一些)。
- 結(jié)尾不加句號或其他標(biāo)點(diǎn)符號。
- 根據(jù)以上規(guī)范git commit message將是如下的格式:
fix(DAO):用戶查詢?nèi)鄙賣sername屬性
feat(Controller):用戶查詢接口開發(fā)
body(可選)
改動內(nèi)容多的話,可以換行繼續(xù)描述詳細(xì)改動
footer(可選)
有不兼容場景用Breaks結(jié)尾。
feat($browser): onUrlChange event (popstate/hashchange/polling)
Added new event to $browser:
- forward popstate event if available
- forward hashchange event if popstate not available
- do polling when neither popstate nor hashchange available
Breaks $browser.onHashChange, which was removed (use onUrlChange instead)
commit log hook
shell
在本地.git/hooks/文件夾, commit-msg.sample 改名為commit-msg。

然后sudo vim把以下shell copy到commit-msg。
#!/bin/sh
COMMIT_MSG=`cat $1 | egrep "^(feat|fix|docs|chore)\(\w+\)?:\s(\S|\w)+"`
if [ "$COMMIT_MSG" = "" ]; then
echo "Commit Message 不規(guī)范,請檢查!\n"
exit 1
fi
if [ ${#COMMIT_MSG} -lt 15 ]; then
echo "Commit Message 太短了,請再詳細(xì)點(diǎn)!\n"
exit 1
fi
commit
不規(guī)范提交:header填寫xx(util)試試

maven
也可以用maven plugin動態(tài)生成shell,這樣可以持久化check功能到git。