git commit 規(guī)范

Angular 規(guī)范其實(shí)是一種語(yǔ)義化的提交規(guī)范(Semantic Commit Messages)寸爆,所謂語(yǔ)義化的提交規(guī)范包含以下內(nèi)容:Commit Message 是語(yǔ)義化的:Commit Message 都會(huì)被歸為一個(gè)有意義的類型莱预,用來(lái)說(shuō)明本次 commit 的類型崔梗。Commit Message 是規(guī)范化的:Commit Message 遵循預(yù)先定義好的規(guī)范珍语,比如 Commit Message 格式固定盯滚、都屬于某個(gè)類型嫉到,這些規(guī)范不僅可被開(kāi)發(fā)者識(shí)別也可以被工具識(shí)別哩都。

在 Angular 規(guī)范中税娜,Commit Message 包含三個(gè)部分坐搔,分別是 Header、Body 和 Footer敬矩,格式如下:

其中概行,Header 是必需的,Body 和 Footer 可以省略弧岳。在以上規(guī)范中凳忙,必須用括號(hào) () 括起來(lái),?[] 后必須緊跟冒號(hào) 禽炬,冒號(hào)后必須緊跟空格涧卵,2 個(gè)空行也是必需的。在實(shí)際開(kāi)發(fā)中腹尖,為了使 Commit Message 在 GitHub 或者其他 Git 工具上更加易讀柳恐,我們往往會(huì)限制每行 message 的長(zhǎng)度。根據(jù)需要热幔,可以限制為 50/72/100 個(gè)字符乐设,這里我將長(zhǎng)度限制在 72 個(gè)字符以內(nèi)(也有一些開(kāi)發(fā)者會(huì)將長(zhǎng)度限制為 100,你可根據(jù)需要自行選擇)断凶。

? ? ? ? 以下是一個(gè)符合 Angular 規(guī)范的 Commit Message:fix($compile): couple of unit tests for IE9# Please enter the Commit Message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.# On branch master# Changes to be committed:# ...Older IEs serialize html uppercased, but IE9 does not...Would be better to expect case insensitive, unfortunately jasmine doesnot allow to user regexps for throw expectations.Closes #392Breaks foo.bar api, foo.baz should be used instead


? ? ? ? Header 部分只有一行伤提,包括三個(gè)字段:type(必選)巫俺、scope(可選)和 subject(必選)认烁。我們先來(lái)說(shuō) type,它用來(lái)說(shuō)明 commit 的類型。為了方便記憶却嗡,我把這些類型做了歸納舶沛,它們主要可以歸為 Development 和 Production 共兩類。它們的含義是:Development:這類修改一般是項(xiàng)目管理類的變更窗价,不會(huì)影響最終用戶和生產(chǎn)環(huán)境的代碼如庭,比如 CI 流程、構(gòu)建方式等的撼港。

Header

Header 部分只有一行坪它,包括三個(gè)字段:type(必選)、scope(可選)和 subject(必選)帝牡。

type類型

? ? ? ? 接下來(lái)往毡,我們說(shuō)說(shuō) Header 的第二個(gè)字段 scope。scope 是用來(lái)說(shuō)明 commit 的影響范圍的靶溜,它必須是名詞开瞭。顯然,不同項(xiàng)目會(huì)有不同的 scope罩息。在項(xiàng)目初期嗤详,我們可以設(shè)置一些粒度比較大的 scope,比如可以按組件名或者功能來(lái)設(shè)置 scope瓷炮;后續(xù)葱色,如果項(xiàng)目有變動(dòng)或者有新功能,我們可以再用追加的方式添加新的 scope娘香。主要是根據(jù)組件名和功能來(lái)設(shè)置的冬筒。例如,支持 某個(gè)模塊茅主,java如dao或者model等舞痰。

subject

? ? ? subject 是 commit 的簡(jiǎn)短描述,必須以動(dòng)詞開(kāi)頭诀姚、使用現(xiàn)在時(shí)响牛。比如,我們可以用 change赫段,卻不能用 changed 或 changes呀打,而且這個(gè)動(dòng)詞的第一個(gè)字母必須是小寫(xiě)。通過(guò)這個(gè)動(dòng)詞糯笙,我們可以明確地知道 commit 所執(zhí)行的操作贬丛。此外我們還要注意,subject 的結(jié)尾不能加英文句號(hào)给涕。BodyHeader 對(duì) commit 做了高度概括豺憔,可以方便我們查看 Commit Message额获。那我們?nèi)绾沃谰唧w做了哪些變更呢?答案就是恭应,可以通過(guò) Body 部分抄邀,它是對(duì)本次 commit 的更詳細(xì)描述,是可選的昼榛。Body 部分可以分成多行境肾,而且格式也比較自由。不過(guò)胆屿,和 Header 里的一樣奥喻,它也要以動(dòng)詞開(kāi)頭,使用現(xiàn)在時(shí)非迹。此外衫嵌,它還必須要包括修改的動(dòng)機(jī),以及和跟上一版本相比的改動(dòng)點(diǎn)彻秆。

body

? ? ? 通過(guò) Body 部分楔绞,它是對(duì)本次 commit 的更詳細(xì)描述,是可選的唇兑。Body 部分可以分成多行酒朵,而且格式也比較自由。不過(guò)扎附,和 Header 里的一樣蔫耽,它也要以動(dòng)詞開(kāi)頭,使用現(xiàn)在時(shí)留夜。此外匙铡,它還必須要包括修改的動(dòng)機(jī),以及和跟上一版本相比的改動(dòng)點(diǎn)碍粥。

合并提交

合并提交鳖眼,就是將多個(gè) commit 合并為一個(gè) commit 提交。這里嚼摩,我建議你把新的 commit 合并到主干時(shí)钦讳,只保留 2~3 個(gè) commit 記錄。那具體怎么做呢枕面?在 Git 中愿卒,我們主要使用 git rebase 命令來(lái)合并。git rebase 也是我們?nèi)蘸箝_(kāi)發(fā)需要經(jīng)常使用的一個(gè)命令潮秘,所以我們一定要掌握好它的使用方法琼开。git rebase 命令介紹

rebase命令參數(shù)

eg:


git項(xiàng)目add了三個(gè)文件,對(duì)應(yīng)下圖的commit信息


現(xiàn)在要將以feat開(kāi)頭的commit合并為一個(gè)枕荞,commit ID為cce4ff3為開(kāi)始柜候,父ID為20c3aae.

執(zhí)行g(shù)it rebase -i?20c3aae


需要合并的 3 個(gè) commit搞动,都執(zhí)行 squash 操作,如下圖所示:


修改完成后執(zhí)行:wq 保存改橘,會(huì)跳轉(zhuǎn)到一個(gè)新的交互頁(yè)面,在該頁(yè)面玉控,我們可以編輯 Commit Message飞主,編輯后的內(nèi)容如下圖所示:


修改完后wq保存。 git rebase -i?這里的一定要是需要合并 commit 中最舊 commit 的父 commit ID

檢查合并是否成功執(zhí)行 git log --oneline

三個(gè)合并為一個(gè)了


修改 Commit Message

git commit --amend:修改最近一次 commit 的 message

git rebase -i:修改某次 commit 的 message

git commit --amend 比較簡(jiǎn)單高诺,主要是修改最近一次commit的值碌识,執(zhí)行后修改保存即可。

git rebase -i?修改的 Commit Message 不是最近一次的 Commit Message虱而,可以通過(guò) git rebase -i <父 commit ID>命令來(lái)修改筏餐。比如


修改add find 變?yōu)?find add, 執(zhí)行?git rebase -i? c730f8e 輸入后將pick變?yōu)閞,wq保存,后進(jìn)入另一個(gè)頁(yè)面牡拇,修改信息魁瞪,保存后結(jié)果如下:


結(jié)果已經(jīng)改變。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惠呼,一起剝皮案震驚了整個(gè)濱河市导俘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剔蹋,老刑警劉巖旅薄,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異泣崩,居然都是意外死亡少梁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)矫付,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)凯沪,“玉大人,你說(shuō)我怎么就攤上這事买优≈荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵而叼,是天一觀的道長(zhǎng)身笤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)葵陵,這世上最難降的妖魔是什么液荸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮脱篙,結(jié)果婚禮上娇钱,老公的妹妹穿的比我還像新娘伤柄。我一直安慰自己,他們只是感情好文搂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布适刀。 她就那樣靜靜地躺著,像睡著了一般煤蹭。 火紅的嫁衣襯著肌膚如雪笔喉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天硝皂,我揣著相機(jī)與錄音常挚,去河邊找鬼。 笑死稽物,一個(gè)胖子當(dāng)著我的面吹牛奄毡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贝或,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吼过,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咪奖?” 一聲冷哼從身側(cè)響起那先,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赡艰,沒(méi)想到半個(gè)月后售淡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慷垮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年揖闸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片料身。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汤纸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芹血,到底是詐尸還是另有隱情贮泞,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布幔烛,位于F島的核電站啃擦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏饿悬。R本人自食惡果不足惜令蛉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧珠叔,春花似錦蝎宇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汇鞭,卻和暖如春凉唐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背虱咧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工熊榛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锚国,地道東北人腕巡。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像血筑,于是被迫代替她去往敵國(guó)和親绘沉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 分支 master分支為主分支(保護(hù)分支)豺总,不能直接在master上進(jìn)行修改代碼或提交,通過(guò)MR(merge Re...
    小花生_peanut閱讀 6,989評(píng)論 0 4
  • 前言 Git 每次提交代碼车伞,都要寫(xiě) Commit message(提交說(shuō)明),否則就不允許提交喻喳。但是另玖,一般來(lái)說(shuō),c...
    guanguans閱讀 126,167評(píng)論 1 63
  • 本文是對(duì)前面系列文章[http://www.reibang.com/p/5ab7b4b48964]的補(bǔ)充與完善表伦。...
    越前君閱讀 2,880評(píng)論 0 1
  • Git 每次提交代碼谦去,都要寫(xiě) Commit message(提交說(shuō)明),否則就不允許提交蹦哼。 上面代碼的-m參數(shù)鳄哭,就...
    零一間閱讀 1,178評(píng)論 0 3
  • Angular 團(tuán)隊(duì)的 commit 規(guī)范 它的 message 格式如下: 分別對(duì)應(yīng) Commit messag...
    alanwhy閱讀 643評(píng)論 0 0