如何規(guī)范你的GIT提交殖妇?

一、為什么需要規(guī)范破花?

無(wú)規(guī)矩不成方圓谦趣,編程也一樣。

如果你有一個(gè)項(xiàng)目座每,從始至終都是自己寫前鹅,那么你想怎么寫都可以,沒(méi)有人可以干預(yù)你峭梳〗⒒妫可是如果在團(tuán)隊(duì)協(xié)作中,大家都張揚(yáng)個(gè)性葱椭,那么代碼將會(huì)是一團(tuán)糟捂寿,好好的項(xiàng)目就被糟踐了。不管是開發(fā)還是日后維護(hù)挫以,都將是災(zāi)難者蠕。

這時(shí)候,有人提出了何不統(tǒng)一標(biāo)準(zhǔn)掐松,大家都按照這個(gè)標(biāo)準(zhǔn)來(lái)踱侣。于是 ESLint,JSHint 等代碼工具如雨后春筍般涌現(xiàn)大磺,成為了項(xiàng)目構(gòu)建的必備良品抡句。

Git Commit 規(guī)范可能并沒(méi)有那么夸張,但如果你在版本回退的時(shí)候看到一大段糟心的 Commit杠愧,恐怕會(huì)懊惱不已吧待榔。所以,嚴(yán)格遵守規(guī)范,利人利己锐锣。

二腌闯、具體規(guī)則

先來(lái)看看公式:

<type>(<scope>): <subject>

type

用于說(shuō)明 commit 的類別,只允許使用下面7個(gè)標(biāo)識(shí)雕憔。

  • feat:新功能(feature)

  • fix:修補(bǔ)

  • bugdocs:文檔(documentation)

  • style: 格式(不影響代碼運(yùn)行的變動(dòng))

  • refactor:重構(gòu)(即不是新增功能姿骏,也不是修改bug的代碼變動(dòng))

  • test:增加測(cè)試

  • chore:構(gòu)建過(guò)程或輔助工具的變動(dòng)

scope

用于說(shuō)明 commit 影響的范圍,比如數(shù)據(jù)層斤彼、控制層分瘦、視圖層等等,視項(xiàng)目不同而不同琉苇。

subject

是 commit 目的的簡(jiǎn)短描述嘲玫,不超過(guò)50個(gè)字符。

以動(dòng)詞開頭并扇,使用第一人稱現(xiàn)在時(shí)去团,比如change,而不是changed或changes

第一個(gè)字母小寫

結(jié)尾不加句號(hào)(.)

三拜马、異常處理

我們先來(lái)看看這個(gè)異常提醒:

INVALID COMMIT MSG: does not match "<type>(<scope>): <subject>" ! 
jartto:fix bug 

這里之所以報(bào)出這個(gè)警告渗勘,是因?yàn)槲业奶峤怀霈F(xiàn)了兩個(gè)問(wèn)題:

  • 其一,使用了規(guī)范外的關(guān)鍵字;
  • 其二俩莽,很細(xì)節(jié)的問(wèn)題旺坠,jartto:后少了空格;

這時(shí)候我才回憶起來(lái),當(dāng)時(shí)提交一直失敗扮超,情急之下直接強(qiáng)制提交取刃,所以以后的提交都會(huì)抱出這個(gè)異常。大致意思就是:

你的之前的 Commit 不合格~你的之前的 Commit 不合格~你的之前的 Commit 不合格

這時(shí)候就很煩了出刷,我們只能去將之前的錯(cuò)誤修正璧疗,那么如何操作呢?

四、如何修改之前的 commit 信息馁龟?

其實(shí)并不復(fù)雜崩侠,我們只需要這樣做:

  • 1、將當(dāng)前分支無(wú)關(guān)的工作狀態(tài)進(jìn)行暫存
git stash 
  • 2坷檩、 將 HEAD 移動(dòng)到需要修改的 commit 上
git rebase 9633cf0919^ --interactive
  • 3却音、找到需要修改的 commit ,將首行的 pick 改成 edit
  • 4、開始著手解決你的 bug
  • 5矢炼、 git add 將改動(dòng)文件添加到暫存
  • 6系瓢、 git commit –amend 追加改動(dòng)到提交
  • 7、git rebase –continue 移動(dòng) HEAD 回最新的 commit
  • 8句灌、恢復(fù)之前的工作狀態(tài)
git stash pop

大功告成夷陋,是不是想把整個(gè) Commit 都修改一遍,逃~

五、項(xiàng)目中使用

這時(shí)候問(wèn)題又來(lái)了骗绕,為什么我提交的時(shí)候會(huì)有警告藐窄,這個(gè)又是如何做到的呢?

這時(shí)候,我們需要一款 Node 插件 validate-commit-msg 來(lái)檢查項(xiàng)目中 Commit message 是否規(guī)范爹谭。

1.首先枷邪,安裝插件:

npm install --save-dev validate-commit-msg 

2.使用方式一,建立 .vcmrc 文件:

{ 
  "types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"], 
  "scope": { 
    "required": false, 
    "allowed": ["*"], 
    "validate": false, 
    "multiple": false 
  }, 
  "warnOnFail": false, 
  "maxSubjectLength": 100, 
  "subjectPattern": ".+", 
  "subjectPatternErrorMsg": "subject does not match subject pattern!", 
  "helpMessage": "", 
  "autoFix": false 
} 

3.使用方式二:寫入 package.json

{ 
  "config": { 
    "validate-commit-msg": { 
      /* your config here */ 
    } 
  } 
}

4.可是我們?nèi)绻胱詣?dòng)使用 ghooks 鉤子函數(shù)呢诺凡?

{ 
  … 
  "config": { 
    "ghooks": { 
      "pre-commit": "gulp lint", 
      "commit-msg": "validate-commit-msg", 
      "pre-push": "make test", 
      "post-merge": "npm install", 
      "post-rewrite": "npm install", 
      … 
    } 
  } 
  … 
}

在 ghooks 中我們可以做很多事情,當(dāng)然不只是 validate-commit-msg 哦践惑。

更多細(xì)節(jié)請(qǐng)參考:validate-commit-msg

六腹泌、Commit 規(guī)范的作用

  • 提供更多的信息,方便排查與回退;
  • 過(guò)濾關(guān)鍵字尔觉,迅速定位;
  • 方便生成文檔;

七凉袱、生成 Change log

正如上文提到的生成文檔,如果我們的提交都按照規(guī)范的話侦铜,那就很簡(jiǎn)單了专甩。生成的文檔包括以下三個(gè)部分:

New features

Bug fixes

Breaking changes.

每個(gè)部分都會(huì)羅列相關(guān)的 commit ,并且有指向這些 commit 的鏈接钉稍。當(dāng)然涤躲,生成的文檔允許手動(dòng)修改,所以發(fā)布前贡未,你還可以添加其他內(nèi)容种樱。

這里需要使用工具 Conventional Changelog 生成 Change log :

npm install -g conventional-changelog 
cd jartto-domo 
conventional-changelog -p angular -i CHANGELOG.md -w

為了方便使用,可以將其寫入 package.json 的 scripts 字段俊卤。

{ 
  "scripts": { 
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0" 
  } 
}

這樣嫩挤,使用起來(lái)就很簡(jiǎn)單了:

 npm run changelog

到這里,我們所有的問(wèn)題都搞明白了消恍, Cheers~

八岂昭、總結(jié)

看完文章,你還會(huì)如此放蕩不羈嗎?你還會(huì)隨心所欲的編寫 Commit 嗎?你還會(huì)如此 git commit -m "hello world"提交嗎?

答案是否定的狠怨,因?yàn)槭褂昧算^子函數(shù)约啊,你沒(méi)有機(jī)會(huì)了,否則將是無(wú)窮無(wú)盡的恢復(fù) Commit取董。這倒可以養(yǎng)成良好的提交習(xí)慣棍苹。


===========我是華麗的分割線===========


更多知識(shí):
點(diǎn)擊關(guān)注專題:嵌入式Linux&ARM

或?yàn)g覽器打開:http://www.reibang.com/c/42d33cadb1c1

或掃描二維碼:

文章參考微信公眾號(hào)[良許Linux]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茵汰,隨后出現(xiàn)的幾起案子枢里,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栏豺,死亡現(xiàn)場(chǎng)離奇詭異彬碱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)奥洼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門巷疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人灵奖,你說(shuō)我怎么就攤上這事嚼沿。” “怎么了瓷患?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵骡尽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我擅编,道長(zhǎng)攀细,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任爱态,我火速辦了婚禮谭贪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锦担。我一直安慰自己俭识,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布吆豹。 她就那樣靜靜地躺著鱼的,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痘煤。 梳的紋絲不亂的頭發(fā)上凑阶,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音衷快,去河邊找鬼宙橱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蘸拔,可吹牛的內(nèi)容都是我干的师郑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼调窍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宝冕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邓萨,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤地梨,失蹤者是張志新(化名)和其女友劉穎菊卷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宝剖,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洁闰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了万细。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扑眉。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赖钞,靈堂內(nèi)的尸體忽然破棺而出腰素,到底是詐尸還是另有隱情,我是刑警寧澤仁烹,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布耸弄,位于F島的核電站,受9級(jí)特大地震影響卓缰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砰诵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一征唬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茁彭,春花似錦总寒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至妹萨,卻和暖如春年枕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乎完。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工熏兄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人树姨。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓摩桶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親帽揪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硝清,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • git作為時(shí)下最流行的代碼管理工具,Git權(quán)威指南總結(jié)了十條喜歡Git的理由: 異地協(xié)同工作转晰; 現(xiàn)場(chǎng)版本控制芦拿; 重...
    古斟布衣閱讀 1,818評(píng)論 0 12
  • 1.什么是 Git Hooks 如同其他許多的版本控制系統(tǒng)一樣士飒,Git 也具有在特定事件發(fā)生之前或之后執(zhí)行特定腳本...
    就叫yang閱讀 3,251評(píng)論 3 11
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開源的分布式版本控制系統(tǒng)防嗡,...
    君惜丶閱讀 3,497評(píng)論 0 13
  • 體驗(yàn)入 今天回流筆記看到了变汪,動(dòng)力 何為動(dòng)力,生活的動(dòng)能蚁趁,有一個(gè)目標(biāo)裙盾,讓你向往不斷的向前跑。 核心 目標(biāo) 轉(zhuǎn)身用 ...
    乾立風(fēng)中閱讀 152評(píng)論 0 0