如何寫好 Git commit messages

導語:任何軟件項目都是一個協做項目,它至少須要2個開發人員參與,當原始的開發人員將項目開發幾個星期或者幾個月以後,項目步入正規。不過他們或者後續的開發人員仍然須要常常提交一些代碼去修復bug或者實現新的feature。咱們常常有這種感覺:當一個項目時間過了好久以後,咱們對於項目裏面的文件和函數功能漸漸淡忘,從新去閱讀熟悉這部分代碼是很浪費時間而且惱人的一件事。可是這也無法徹底避免,咱們可使用一些技巧儘量減小從新熟悉代碼的時間。commit messages能夠知足須要,它也反映了一個開發人員是不是良好的協做者。前端

編寫良好的Commit messages能夠達到3個重要的目的:git

  • 加快review的流程
  • 幫助咱們編寫良好的版本發佈日誌
  • 讓以後的維護者瞭解代碼裏出現特定變化和feature被添加的緣由

先來看看一個比較好的例子,感覺一下:
github

下面談談,如何讓項目裏面的Commit messages步入規範化,流程化。npm

Commit messages的基本語法

<type>: <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

Type表示提交類別,Subject表示標題行, Body表示主體描述內容。vim

Type的類別說明:前端工程化

  • feat: 添加新特性
  • fix: 修復bug
  • docs: 僅僅修改了文檔
  • style: 僅僅修改了空格、格式縮進、都好等等,不改變代碼邏輯
  • refactor: 代碼重構,沒有加新功能或者修復bug
  • perf: 增長代碼進行性能測試
  • test: 增長測試用例
  • chore: 改變構建流程、或者增長依賴庫、工具等

Commit messages格式要求

# 標題行:50個字符之內,描述主要變動內容
#
# 主體內容:更詳細的說明文本,建議72個字符之內。 須要描述的信息包括:
#
# * 爲何這個變動是必須的? 它多是用來修復一個bug,增長一個feature,提高性能、可靠性、穩定性等等
# * 他如何解決這個問題? 具體描述解決問題的步驟
# * 是否存在反作用、風險? 
#
# 若是須要的化能夠添加一個連接到issue地址或者其它文檔

這3個問題給代碼的變動創建了良好的上下文,可讓其餘的代碼review人員或者項目成員直觀的判斷修改點是否正確。一條良好的commit message也可讓維護者知道這個patch是否適合發佈到穩定的版本中去。函數

若是一個patch沒有回答上面的這幾個問題,那麼它是無心義的。它會給review的人員形成負擔,讓他們花費大量時間去評審討論這個patch的做用和意義。更糟糕的是,若是一個項目實施SCM紀律,則這個patch會被拒絕掉,而後開發人員須要花費時間從新編寫一個新的patch。從新編寫一個複雜的patch代價是巨大的,而把commit message寫好只會花費幾分鐘。工具

Commit messages書寫建議

  • 儘量多的提交,單個Commit messages包含的內容不要過多
  • 標題行以Fix, Add, Change, Delete開始,採用命令式的模式。不要使用Fixed, Added, Changed等等
  • 始終讓第二行是空白,不寫任何內容
  • 主體內容注意換行,避免在gitk裏面滾動條水平滑動
  • 永遠不在 git commit 上增長 -m 或 --message= 參數,提交的時候git commit便可。
  • 若是你是vim用戶,將下面這行代碼加入到~/.vimrc。這會幫助你檢查拼寫和自動換行性能

    autocmd Filetype gitcommit setlocal spell textwidth=72

使用Commitizen工具

Commitizen可讓你的commit message更加規範統一,適合項目團隊使用,使用也很簡單,使用npm安裝後,提交代碼的時候使用git cz去替代之前的git commit命令便可。測試

安裝commitizen:

$ npm install -g commitizen

使用截圖:

自動生成Change log

conventional-changelog是用來從git的元數據中生成 Change log文檔的工具,只要你提交的格式知足它定義的標準,此處以angular標準爲例子。使用它生成的Change log包含如下三個部分:

Bug Fixes Bug修復的信息
Features 增長的特性
BREAKING CHANGES 重大變動

能夠參考它生成的文檔CHANGELOG.md,使用以下:

$ npm install -g conventional-changelog-cli
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -s

這不會覆蓋你以前的CHANGE.md文檔內容,會在這個文件的最上面插入新生成的日誌信息。

參考連接

開源信息

相關文章
相關標籤/搜索