當你學會使用git,並在GitHub上創建了本身的Repositories時。git
嗯。能夠push本身的代碼了,一頓github
看到100%以後開心極了。幾個月後看到以下npm
因而可知git add和git commit並非很簡單的一次所有完成的json
當你每次push的時候,必定是更新了一些代碼,完善了一些功能。markdown
例如:架構
1. 註冊功能
2. 登陸功能
3. 完善了README
複製代碼
那麼該如何的push此次代碼呢??框架
git add src/register
git commit -m"add register function"
複製代碼
git add src/login
git commit -m"add login function"
複製代碼
git add READM.md
git commit -m"modify README"
複製代碼
作完以上以後,你就能夠正常的工具
git push origin mater
複製代碼
固然,這樣只是一個簡單push測試
你覺得作到上面這些你就能夠完成規範的git commit 了嗎??優化
太天真你,通常規範的commit須要由三部分構成
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
複製代碼
其中,Header 是必需的,Body 和 Footer 能夠省略。
不論是哪個部分,任何一行都不得超過72個字符(或100個字符)。這是爲了不自動換行影響美觀。
Head這部分只有一行,可是包括三個部分
< type >(必需)< scope >(可選)< subject >(必需)
type用來講明commit的類別,也就是說別人看了你的type就知道你此次push的性質是什麼,只容許有如下幾種標識
若是type爲feat和fix,則該 commit 將確定出如今 Change log 之中。其餘狀況(docs、chore、style、refactor、test)由你決定,要不要放入 Change log,建議是不要。
scope用於說明commit的影響範圍,好比數據層,控制層,視圖層等
(可選)類型後面能夠加上括號,括號內填寫主要變更的範圍,好比按功能模塊分,某模塊;或按項目三層架構模式分,分數據 層、控制層之類的。
#:表示模塊
#student --> 表示 學生模塊 (具體的模塊開頭字母小寫,駝峯命名)
#ALL --> 表示 全部模塊 (特殊含義如ALL表全部,MOST表大部分,用大寫字母表示)
#MOST --> 表示 大部分模塊
複製代碼
e.g. feat(#student): 新增添加學生的功能 —— 表示student模塊新增功能,功能是添加學生
subject是 commit 目的的簡短描述,不超過50個字符。
- 以動詞開頭,使用第一人稱如今時,好比change,而不是changed或changes
- 第一個字母小寫
- 結尾不加句號(.)
複製代碼
body部分是對本次commit的詳細描述,能夠分紅多行進行描述能夠分紅多行,正文在 72 個字符處換行。
使用正文解釋是什麼(what)和爲何(why),而不是如何作,以及與之前行爲的對比。
因而能夠這樣寫:
balabala : balabala
what:
balabala
why:
balabala
複製代碼
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.
複製代碼
若是當前 commit 針對某個issue,那麼能夠在 Footer 部分關閉這個 issue 。
Closes #234
複製代碼
也能夠一次關閉多個 issue 。
Closes #123, #245, #992
複製代碼
還有一種特殊狀況,若是當前 commit 用於撤銷之前的 commit,則必須以revert:開頭,後面跟着被撤銷 Commit 的 Header。
revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
複製代碼
Body部分的格式是固定的,必須寫成This reverts commit <hash>.,其中的hash是被撤銷 commit 的 SHA 標識符。
若是當前 commit 與被撤銷的 commit,在同一個發佈(release)裏面,那麼它們都不會出如今 Change log 裏面。若是二者在不一樣的發佈,那麼當前 commit,會出如今 Change log 的Reverts小標題下面。
Commitizen是一個撰寫合格 Commit message 的工具。
安裝命令以下。
$ npm install -g commitizen
複製代碼
而後,在項目目錄裏,運行下面的命令,使其支持 Angular 的 Commit message 格式。
$ commitizen init cz-conventional-changelog --save --save-exact
複製代碼
之後,凡是用到git commit命令,一概改成使用git cz。這時,就會出現選項,用來生成符合格式的 Commit message。
validate-commit-msg 用於檢查 Node 項目的 Commit message 是否符合格式。
它的安裝是手動的。首先,拷貝下面這個JS文件,放入你的代碼庫。文件名能夠取爲validate-commit-msg.js。
接着,把這個腳本加入 Git 的 hook。下面是在package.json裏面使用 ghooks,把這個腳本加爲commit-msg時運行.
"config": {
"ghooks": {
"commit-msg": "./validate-commit-msg.js"
}
}
複製代碼
而後,每次git commit的時候,這個腳本就會自動檢查 Commit message 是否合格。若是不合格,就會報錯。
$ git add -A
$ git commit -m "edit markdown"
INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! was: edit markdown
複製代碼
若是你的全部 Commit 都符合 Angular 格式,那麼發佈新版本時, Change log 就能夠用腳本自動生成。
生成的文檔包括如下三個部分。
- New features
- Bug fixes
- Breaking changes.
複製代碼
每一個部分都會羅列相關的 commit ,而且有指向這些commit的連接。固然,生成的文檔容許手動修改,因此發佈前,你還能夠添加其餘內容。
conventional-changelog 就是生成 Change log 的工具,運行下面的命令便可。
$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w
複製代碼
上面命令不會覆蓋之前的 Change log,只會在CHANGELOG.md的頭部加上自從上次發佈以來的變更。
若是你想生成全部發布的 Change log,要改成運行下面的命令。
$ conventional-changelog -p angular -i CHANGELOG.md -w -r 0
複製代碼
爲了方便使用,能夠將其寫入package.json的scripts字段。
{
"scripts": {
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
}
}
複製代碼
之後,直接運行下面的命令便可。
$ npm run changelog
複製代碼
(完)
Thank You!!