1. 程式人生 > 實用技巧 >Commit message 程式碼提交規範

Commit message 程式碼提交規範

前言

在多人協作專案中,如果程式碼風格統一、程式碼提交資訊的說明準確,那麼在後期協作以及Bug處理時會更加方便。Git 每次提交程式碼,都要寫 Commit message(提交說明),否則就不允許提交。一般來說,commit message 應該清晰明瞭,說明本次提交的目的。

Commit message 的作用

● 提供更多的歷史資訊,方便快速瀏覽
● 過濾某些commit(比如文件改動),便於快速查詢資訊
● 直接從commit生成Change log
● 可讀性好,清晰,不必深入看程式碼即可瞭解當前commit的作用。
● 為 Code Reviewing(程式碼審查)做準備
● 方便跟蹤工程歷史
● 提高專案的整體質量,提高個人工程素質
Commit message 的格式

Commit message 包括三個部分:Header,Body 和 Footer

 <type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

一、Header

Header部分只有一行,包括三個欄位:type(必需)、scope(可選)和subject(必需)

(1)type

​ type用於說明 commit 的類別,只允許使用下面的標識

    feat:新增功能(feature)
    fix:修補bug
    docs:僅僅修改了文件,比如 README, CHANGELOG, CONTRIBUTE等等
    style: 僅僅修改了空格、格式縮排、逗號等等,不改變程式碼邏輯
    refactor:重構(即不是新增功能,也不是修改bug的程式碼變動)
    test:增加測試,包括單元測試、整合測試等
    chore:構建過程或輔助工具的變動
    type:代表某次提交的型別,比如是修復一個bug還是增加一個新的feature。
    perf: 優化相關,比如提升效能、體驗
    revert: 回滾到上一個版本
    ci:自動化流程配置修改

注:如果type為feat和fix,則該 commit 將肯定出現在 Change log 之中

(2)scope

scope用於說明commit影響的範圍,比如資料層、控制層、檢視層等等,視專案不同而不同。

(3)subject

①subject是 commit 目的的簡短描述,不超過50個字元。
②以動詞開頭,使用第一人稱現在時,比如change,而不是changed或changes
③第一個字母小寫
④結尾不加句號(.)

二、Body

Body 部分是對本次 commit 的詳細描述,可以分成多行

三、Footer

Footer 部分只用於兩種情況:

(1)不相容變動

如果當前程式碼與上一個版本不相容,則 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.

(2)關閉 Issue

如果當前 commit 針對某個issue,那麼可以在 Footer 部分關閉這個 issue

Closes #234

也可以一次關閉多個 issue

Closes #123, #245, #992

資源搜尋網站大全 https://www.renrenfan.com.cn 廣州VI設計公司https://www.houdianzi.com

四、Revert

如果當前 commit 用於撤銷以前的 commit,則必須以revert:開頭,後面跟著被撤銷 Commit 的 Header

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

①Body部分的格式是固定的,必須寫成This reverts commit .,其中的hash是被撤銷 commit 的 SHA 識別符號。 ②如果當前 commit 與被撤銷的 commit,在同一個釋出(release)裡面,那麼它們都不會出現在 Change log 裡面。如果兩者在不同的釋出,那麼當前 commit,會出現在 Change log 的Reverts小標題下面。

commit message工具
Commitizen是一個格式化commit message的工具。

1.在cmd中通過npm來全域性安裝:

npminstall-g commitizen

2.在專案目錄下建立package.json檔案

npminit

3.開啟專案執行如下命令:

commitizen init cz-conventional-changelog --save--save-exact

注意:如果是第二次配置,需要用–force:

  commitizen init cz-conventional-changelog --save --force

4.將未暫存檔案所有變化提交到暫存區

gitadd .

① git add . :他會監控工作區的狀態樹,使用它會把工作時的所有變化提交到暫存區,包括檔案內容修改(modified)以及新檔案(new),但不包括被刪除的檔案。

②git add -u :他僅監控已經被add的檔案(即tracked file),他會將被修改的檔案提交到暫存區(git add --update的縮寫)。add -u 不會提交新檔案。

③git add -a :是上面兩個功能的合集(git add --all的縮寫)

5.命令列輸入提交命令

  git cz

輸入命令後依次提示:

①上、下鍵選擇要提交的更改型別

②此更改的範圍是什麼(例如元件或檔名)?(按回車鍵跳過)

③寫一個簡短的祈使句來描述這個變化

④提供更詳細的更改說明:(按回車鍵跳過)

⑤有什麼重大變化嗎?

⑥這一變化是否會影響
任何未解決的問題?

6.再推送到本地git倉庫
git push

注意:
    ① 程式碼需要提測,並且自己都測試OK了,如果一次性測試通過則可以把master合併到自己的分支,然後push自己的分支,進行提測
    ② 程式碼提測了,如果有問題,把問題修改好後,再push自己的分支

列印日誌命令

gitlog

1.輸出CHANGELOG記錄,(檔名稱自己設定),通過以下命令,在專案中生成 CHANGELOG.md 檔案

①安裝生成 Change log 的工具

$ npminstall-g conventional-changelog-cli

② 通過提交記錄生成 CHANGELOG.md

$conventional-changelog -p -i CHANGELOG.md -s

2.打印出 git log 的日誌記錄(詳細日誌記錄)

gitlog> 檔名

例如:git log >1.txt
在該專案路徑中可檢視 1.txt 日誌記錄檔案

type型別可自行配置

type是可以自己配置和修改的,在專案路徑下的