總有理由
本人半強迫症患者一枚,看到各種提交
fix bug xxx
,甚至連xxx
都沒有,在回溯問題的時候一頭霧水,只能逐個檔案找問題。難。。。
所以個人認為Git Message成為回溯問題的一個迅速確定問題的關鍵。
那什麼樣的Message是優秀的呢? 原則又是什麼呢?就拿我們一直團隊實踐的準則來說一說。
提交程式碼有原則(粒度)
專案程式碼穩定之後,每次提交都要考慮提交的粒度問題,儘量做到 baby step
- 沒有關聯的程式碼不能一次commit提交
- 關聯程式碼一次提交;若內容很多,可內部分層,依次提交
可以根據當前程式碼模組情況處理。
必須提交Commit Message
- 沒有Commit Message 當然不能提交
- 不在
git commit
上增加-m <msg>
或--message=<msg>
引數,而單獨寫提交資訊
不推薦
git commit -m "Fix login bug"
複製程式碼
推薦
angular的GitHub的Commit
Fix(filterFilter): fix filtering using an object expression when the …
…filter value is undefined
Fixes #10419
Closes #10424
複製程式碼
Commit Message分段寫
Commit Message 分三個部分, header, body, footer. 其中,header 是必需的,body 和 footer 可以省略。 不管是哪一個部分,任何一行都不得超過100個字元,以免影響閱讀性。
[<team>]<type>(<scope>): <subject>
<body>
<footer> 
複製程式碼
[FE]Fix(card): fix card edit, support to unuse item
在card修改裡面,新增配置item未使用功能
複製程式碼
header
Header部分只有一行,包括四個欄位:type(必需)、scope(可選)、team(可選)和subject(必需)。
type
用於說明 commit 的類別,只允許使用下面7個標識。
Add:新加功能
Fix:修補bug
Modify:移除無用程式碼
Remove:移除第三方模組或者移除檔案
Update:更新第三方模組
Style: 格式(不影響程式碼執行的變動)
Chore:構建過程或輔助工具的變動
複製程式碼
scope
scope用於說明 commit 影響的範圍,比如資料層、控制層、檢視層等等,視專案不同而不同。
例如在shrezone,可以是file, card, image, short_video等。
如果你的修改影響了不止一個scope,你可以使用*代替。
team
當不同的team一起編寫程式碼的時候,帶team以區分工作區域
subject
subject是 commit 目的的簡短描述,不超過50個字元。
其他注意事項:
以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes
第一個字母小寫
結尾不加句號(.)
複製程式碼
Body
Body 部分是對本次 commit 的詳細描述,可以分成多行。
比如react的提交
Sync out another jsx transform test.
We added this test internally and it never got added here. We haven't broken it
with any transforms *yet* but it's still good to actually run all of our tests
here too.
複製程式碼
注意點:
使用第一人稱現在時,比如使用change而不是changed或changes。
要和header之間有一個空行
應該說明程式碼變動的動機,以及與以前行為的對比。
複製程式碼
Footer
Footer 部分只用於以下兩種情況:
不相容變動
如果當前程式碼與上一個版本不相容,則 Footer 部分以BREAKING CHANGE開頭,後面是對變動的描述、以及變動理由和遷移方法。
關閉 Issue
如果當前 commit 針對某個issue,那麼可以在 Footer 部分關閉這個 issue 。
Revert
一種特殊情況,如果當前 commit 用於撤銷以前的 commit,則必須以revert:開頭,後面跟著被撤銷 Commit 的 Header。
revert: feat(pencil): add ‘graphiteWidth‘ option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02
複製程式碼
最後
當然在很多時候,也不能每次都按照規範來寫Commit Message,但是最起碼每次重要的提交都能寫,關鍵時候有用。
當然有人會用打tag的方式來表明重要節點,但是畢竟物盡其用,個有所長。
如果愛好使用工具的朋友也可以自行研究:
- commitizen 幫助寫規範的message的命令列工具
- commitlint Lint 提交的message