規範是創建在程序開發者與程序閱讀者一個溝通的橋樑,是一個團隊必需要嚴格遵照的約定
——動力節點Java學院
1、爲何須要規範?git
無規矩不成方圓,編程也同樣。npm
若是你有一個項目,從始至終都是本身寫,那麼你想怎麼寫均可以,沒有人能夠干預你。但是若是在團隊協做中,你們都張揚個性,那麼代碼將會是一團糟,好好的項目就被糟踐了。不論是開發仍是往後維護,都將是災難。
這時候,有人提出了何不統一標準,你們都按照這個標準來。因而 ESLint,JSHint 等代碼工具如雨後春筍般涌現,成爲了項目構建的必備良品。編程
Git Commit 規範可能並無那麼誇張,但若是你在版本回退的時候看到一大段糟心的 Commit,恐怕會懊惱不已吧。因此,嚴格遵照規範,利人利己。json
2、具體規則gulp
先來看看公式:
type架構
用於說明 commit 的類別,只容許使用下面7個標識。
scope
用於說明 commit 影響的範圍,好比數據層、控制層、視圖層等等,視項目不一樣而不一樣。
subject
是 commit 目的的簡短描述,不超過50個字符。
1.以動詞開頭,使用第一人稱如今時,好比change,而不是changed或changes
2.第一個字母小寫
3.結尾不加句號(.)
規範參考自阮一峯老師的文章:Commit message 和 Change log 編寫指南。dom
3、異常處理函數
咱們先來看看這個異常提醒:
1.INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" !
2.
3.jartto:fix bug工具
這裏之因此報出這個警告,是由於個人提交出現了兩個問題:
其一,使用了規範外的關鍵字;
其二,很細節的問題,jartto:後少了空格;post
這時候我纔回憶起來,當時提交一直失敗,情急之下直接強制提交,因此之後的提交都會抱出這個異常。大體意思就是:
你的以前的 Commit 不合格~你的以前的 Commit 不合格~你的以前的 Commit 不合格
這時候就很煩了,咱們只能去將以前的錯誤修正,那麼如何操做呢?
4、如何修改以前的 commit 信息?
其實並不複雜,咱們只須要這樣作:
一、將當前分支無關的工做狀態進行暫存
1.git stash
二、將 HEAD 移動到須要修改的 commit 上
1.git rebase 9633cf0919^ --interactive
三、找到須要修改的 commit ,將首行的 pick 改爲 edit 四、開始着手解決你的 bug 五、 git add 將改動文件添加到暫存 六、 git commit –amend 追加改動到提交 七、git rebase –continue 移動 HEAD 回最新的 commit 八、恢復以前的工做狀態
1.git stash pop
大功告成,是否是想把整個 Commit 都修改一遍,逃~
此處參考自:修改 Commit 日誌和內容
5、項目中使用
這時候問題又來了,爲何我提交的時候會有警告,這個又是如何作到的呢?
這時候,咱們須要一款 Node 插件 validate-commit-msg 來檢查項目中 Commit message 是否規範。
1.首先,安裝插件:
1.npm install --save-dev validate-commit-msg
2.使用方式一,創建 .vcmrc 文件:
1.{
2."types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],
3.
4."scope": {
5.
6."required": false,
7.
8."allowed": ["*"],
9.
10."validate": false,
11.
12."multiple": false
13.
14.},
15.
16."warnOnFail": false,
17.
18."maxSubjectLength": 100,
19.
20."subjectPattern": ".+",
21.
22."subjectPatternErrorMsg": "subject does not match subject pattern!",
23.
24."helpMessage": "",
25.
26."autoFix": false
27.
28.}
3.使用方式二:寫入 package.json
1.
{
2.
3."config": {
4.
5."validate-commit-msg": {
6.
7./ your config here /
8.
9.}}
10.}
4.但是咱們若是想自動使用 ghooks 鉤子函數呢?
1.{
2.…
3.
4."config": {
5.
6."ghooks": {
7.
8."pre-commit": "gulp lint",
9.
10."commit-msg": "validate-commit-msg",
11.
12."pre-push": "make test",
13.
14."post-merge": "npm install",
15.
16."post-rewrite": "npm install",
17.
18.…
19.
20.}
21.
22.}
23.
24.…
25.
26.}
6、Commit 規範的做用
1.提供更多的信息,方便排查與回退;
2.過濾關鍵字,迅速定位;
3.方便生成文檔;
7、生成 Change log
正如上文提到的生成文檔,若是咱們的提交都按照規範的話,那就很簡單了。生成的文檔包括如下三個部分:
New features
Bug fixes
Breaking changes.
每一個部分都會羅列相關的 commit ,而且有指向這些 commit 的連接。固然,生成的文檔容許手動修改,因此發佈前,你還能夠添加其餘內容。
這裏須要使用工具 Conventional Changelog 生成 Change log :
1.npm install -g conventional-changelog
2.
3.cd jartto-domo
4.
5.conventional-changelog -p angular -i CHANGELOG.md -w
爲了方便使用,能夠將其寫入 package.json 的 scripts 字段。
1.{
2.
3."scripts": {
4.
5."changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
6.
7.}
8.
9.}
這樣,使用起來就很簡單了:
1.npm run changelog
到這裏,咱們全部的問題都搞明白了,🍻Cheers~
8、總結
看完文章,你還會如此放蕩不羈嗎?你還會爲所欲爲的編寫 Commit 嗎?你還會如此 git commit -m "hello jartto"提交嗎?
答案是否認的,由於使用了鉤子函數,你沒有機會了,不然將是無窮無盡的恢復 Commit。這倒能夠養成良好的提交習慣,🙈~
動力節點Java架構師班深度剖析Java底層原理,熱門技術深刻探討,前沿技術深刻解讀,大項目實戰重構,從0到1作架構,從全局思惟出發,帶你把控大型項目中別人忽略的重要細節節點,站在巨人肩膀上學習架構師,帶你領會架構師不同的視野