代碼提交那點(diǎn)事

現(xiàn)在,代碼的版本管理大多都在使用 git,常用的一些代碼托管平臺(tái)有:Github、碼云、Gitlab 等,不管用的哪個(gè)平臺(tái),我們經(jīng)常會(huì)做提交代碼的操作,但很容易忽視 commit message 的寫法。
在一些工具中進(jìn)行代碼提交,提交信息是必填的,正因?yàn)槭潜靥睿蜁?huì)出現(xiàn)很多隨意的內(nèi)容,例如:ok、update、test 等,這些毫無意義的信息內(nèi)容會(huì)給后續(xù)工作帶來很多麻煩。
所以,春節(jié)后上班第一件事就是在團(tuán)隊(duì)內(nèi)強(qiáng)調(diào)提交信息的重要性,并制定統(tǒng)一規(guī)范。很多時(shí)候做不好,不是能力問題,而是態(tài)度問題。
在提交信息的規(guī)范上可以按照下面三個(gè)方面來做:
1、規(guī)范信息的寫法;
2、提交信息的合并;
3、提交和任務(wù)關(guān)聯(lián)。
規(guī)范信息的寫法
commit message 通常包括兩個(gè)部分:header、body ,如下:
<type>:?<subject>???//冒號(hào)使用西文
//空一行
<body>
header
header 部分只有一行,包括兩個(gè)字段:type(必須) 和 subject(必須),type ?和 subject 之間使用西文冒號(hào)和一個(gè)空格隔開。
type
用于說明 commit 的類別,只允許使用下面 3 個(gè)類別。類別不宜弄的太多,太多了開發(fā)人員在提交代碼時(shí)會(huì)帶來負(fù)擔(dān)。下面這三個(gè)類別我認(rèn)為幾乎可以包含所有情況了:
- feat:新功能(feature)
- fixed:修復(fù) bug
- refactor:重構(gòu)(即不是新增功能,也不是修改 bug 的代碼修改)
subject
提交信息的標(biāo)題,一句話總結(jié)提交的信息,盡量做到既簡(jiǎn)潔,又詳細(xì)。
body(非必填)
body 部分是對(duì)本次 ?commit 的詳細(xì)描述,可以分成多行,body 和 header 中間空一行。body 為非必填內(nèi)容,如果 subject 中能說明白了,body 就可以空著。
如果你覺得一次 commit 的內(nèi)容中包含下面一些情況,就可以在 body 中寫明:
- 有相關(guān)聯(lián)影響點(diǎn)的;
- 內(nèi)容相對(duì)較多,subject 不能完全描述的;
- 提交內(nèi)容包含特殊的意圖。
提交合并
有了標(biāo)準(zhǔn)的規(guī)范后,提交的信息統(tǒng)一了、可讀性更強(qiáng),但有時(shí)在開發(fā)一個(gè)特性或修改一個(gè) Bug 時(shí),會(huì) commit 很多次代碼,這些提交目的其實(shí)是一個(gè),如果能將這些 commit 記錄合并起來,整體的提交信息記錄就更加清晰。
將多個(gè) commit 提交進(jìn)行合并,需要用到 git 的 rebase 功能,下面進(jìn)行一個(gè)簡(jiǎn)單的演示來看看 rebase 怎么使用:
1、在 gitlab 上創(chuàng)建一個(gè)示例項(xiàng)目 rebase_test;
2、將項(xiàng)目拉到本地,添加 README.md 文件,并推送到 gitlab ;
3、分三次修改 README.md 文件,進(jìn)行三次 commit ,使用 git log 查看看提交記錄如下:

4、將提交 push 到 gitlab ,在 gtilab 中顯示如下:

5、現(xiàn)在要將這三次提交合并為一次,在 git 命令行執(zhí)行:
git?rebase?-i?740aa70a
- -i :代表交互式操作;
- 740aa70a :表示第一個(gè)提交的 commit id,取前幾位就行。
6、按下圖紅框部分進(jìn)行內(nèi)容的修改,然后保存:

7、將三次修改的提交信息進(jìn)行合并:

8、使用 git log 看提交信息的記錄,會(huì)發(fā)現(xiàn)已經(jīng)進(jìn)行了合并:

和任務(wù)關(guān)聯(lián)
在 git 中的每次提交,都是跟具體的任務(wù)相關(guān),正常的迭代任務(wù)、Bug 任務(wù)等,如果能將任務(wù)和代碼提交記錄進(jìn)行關(guān)聯(lián),對(duì)于后續(xù)的問題排查和查找修改記錄會(huì)有很大幫助。
起初的想法是將任務(wù)的編號(hào)寫到提交信息的 header 部分:
<type>:?<taskNumber>?<subject>?
//空一行
<body>
后來發(fā)現(xiàn)在 pingcode 的應(yīng)用市場(chǎng)中有一個(gè) Gitlab 應(yīng)用,可以到達(dá)提交和任務(wù)關(guān)聯(lián)的目的。恰好,我們團(tuán)隊(duì)也正在使用 pingcode 。
Gialab 應(yīng)用的介紹是這樣的:
GitLab 是由 GitLab Inc.開發(fā)的一款基于 Git 的完全集成的軟件開發(fā)平臺(tái)。GitLab在國(guó)內(nèi)最廣為人知的功能當(dāng)屬代碼托管,這源于其基于Ruby on Rails的開源項(xiàng)目屬性。GitLab App是由PingCode Labs開發(fā)的一款工具,它可以將GitLab的Commit、Branch、Merge Request關(guān)聯(lián)到 PingCode 的工作項(xiàng)中。
詳細(xì)的配置可以參考:
https://apps.pingcode.com/gitlab/configuration
最終任務(wù)關(guān)聯(lián)后的效果如下:

在 pingcode 的任務(wù)界面中可以看到代碼的分支、提交記錄和 pull reqeust 記錄,點(diǎn)擊提交記錄可以直接跳轉(zhuǎn)到 Gitlab 中對(duì)應(yīng)的頁(yè)面。
