前言
在公司的日常工作當中或者個人的開源項目,將代碼提交到代碼庫時。都會遇到下面這樣的對話框,通常都會隨便寫點內容在里面。
當遇到問題需要回溯的時候就成了給自己造成的麻煩,因為無法通過commit message來非常直觀的看到這一次提交了什么,做了哪些修改。這個時候只能一個一個文件打開來看。這個時候如果有規范的提交將會減少不必要的麻煩。
概述
約定式提交規范是一種基于提交信息的輕量級約定。它提供了一組簡單規則來創建清晰的提交歷史;這更有利于編寫自動化工具。通過在提交信息中描述功能、修復和破壞性變更, 使這種慣例與 SemVer 相互對應。
提交說明的結構如下所示:
原文:
<type>[optional scope]: <description>[optional body][optional footer(s)]
譯文:
<類型>[可選 范圍]: <描述>[可選 正文][可選 腳注]
提交說明包含了下面的結構化元素,以向類庫使用者表明其意圖:
fix: 類型 為
fix
的提交表示在代碼庫中修復了一個 bug(這和語義化版本中的PATCH
相對應)。feat: 類型 為
feat
的提交表示在代碼庫中新增了一個功能(這和語義化版本中的MINOR
相對應)。BREAKING CHANGE: 在腳注中包含
BREAKING CHANGE:
或 <類型>(范圍) 后面有一個!
的提交,表示引入了破壞性 API 變更(這和語義化版本中的MAJOR
相對應)。破壞性變更可以是任意 類型 提交的一部分。除
fix:
和feat:
之外,也可以使用其它提交 類型 ,例如 @commitlint/config-conventional(基于 Angular 約定)中推薦的build:
、chore:
、ci:
、docs:
、style:
、refactor:
、perf:
、test:
,等等。腳注中除了
BREAKING CHANGE: <description>
,其它條目應該采用類似 git trailer format 這樣的慣例。
其它提交類型在約定式提交規范中并沒有強制限制,并且在語義化版本中沒有隱式影響(除非它們包含 BREAKING CHANGE)。可以為提交類型添加一個圍在圓括號內的范圍,以為其提供額外的上下文信息。例如 feat(parser): adds ability to parse arrays.
。
示例
包含了描述并且腳注中有破壞性變更的提交說明
feat: allow provided config object to extend other configsBREAKING CHANGE: `extends` key in config file is now used for extending other config files
包含了 !
字符以提醒注意破壞性變更的提交說明
feat!: send an email to the customer when a product is shipped
包含了范圍和破壞性變更 !
的提交說明
feat(api)!: send an email to the customer when a product is shipped
包含了 !
和 BREAKING CHANGE 腳注的提交說明
chore!: drop support for Node 6BREAKING CHANGE: use JavaScript features not available in Node 6.
不包含正文的提交說明
docs: correct spelling of CHANGELOG
包含范圍的提交說明
feat(lang): add polish language
包含多行正文和多行腳注的提交說明
fix: prevent racing of requestsIntroduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.Remove timeouts which were used to mitigate the racing issue but are
obsolete now.Reviewed-by: Z
Refs: #123
參考:
1.約定式提交官網:https://www.conventionalcommits.org/zh-hans/
2.完整提交類型列表:
https://github.com/pvdlg/conventional-changelog-metahub#commit-types
al-commits Conventional Changelog:https://github.com/conventional-changelog/standard-version