Commit Message 作用
每次 git commit 時,都需要編寫相應的說明,否則是不允許提交的。
commit message 應該清晰明瞭的說明本次提交的目的。
規範的 commit message 有利於:
- 對 git log 進行分析和查找
- 也有利用使用工具進行格式化的文檔生成
Angular 規範寫法
每次提交,Commit message 都應當包括三個部分:Header,Body 和 Footer。
<type>: <subject>
// 空一行
<body>
// 空一行
<footer>
不管是哪一個部分,任何一行都不得超過72個字符(或100個字符)。這是爲了避免自動換行影響美觀。
type
type用於說明 commit 的類別,只允許使用下面7個標識。
- feat:新功能(feature)
- fix:修補bug
- docs:文檔(documentation)
- style: 格式(不影響代碼運行的變動)
- refactor:重構(即不是新增功能,也不是修改bug的代碼變動)
- test:增加測試
- chore:構建過程或輔助工具的變動
subject
subject 是 commit 目的的簡短描述,不超過50個字符。
- 以動詞開頭,使用第一人稱現在時
- 第一個字母小寫
- 結尾不加句號(. / 。)
body
Body 部分是對本次 commit 的詳細描述,可以分成多行。下面是一個範例。
More detailed explanatory text, if necessary. Wrap it to
about 72 characters or so.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Use a hanging indent
Footer
Footer 部分只用於兩種情況。
不兼容變動
如果當前代碼與上一個版本不兼容,則 Footer 部分以BREAKING CHANGE開頭,後面是對變動的描述、以及變動理由和遷移方法。
BREAKING CHANGE: isolate scope bindings definition has changed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
}
After:
scope: {
myAttr: '@',
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
關閉 Issue
如果當前 commit 針對某個issue,那麼可以在 Footer 部分關閉這個 issue 。
Closes #123, #245, #992
revert
還有一種特殊情況,如果當前 commit 用於撤銷以前的 commit,則必須以revert:開頭,後面跟着被撤銷 Commit 的 Header。
revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
Commit Message 編寫輔助工具
Commitizen 是一個撰寫合格 Commit message 的工具。
可以使用該工具幫助編寫符合格式的 commit 信息
Change log 生成工具
如果你的所有 Commit 都符合 Angular 格式,那麼發佈新版本時, Change log 就可以用腳本自動生成,生成的文檔包括以下三個部分。
- New features
- Bug fixes
- Breaking changes.
可以使用輔助工具 conventional-changelog 生成 Change log