Git Commit Message 應(yīng)該怎么寫?

原文鏈接: Git Commit Message 應(yīng)該怎么寫筑舅?

最近被同事吐槽了呐能,說我代碼提交說明寫的太差。其實都不用他吐槽瓷产,我自己心里也非常清楚。畢竟很多時候犯懶枚驻,都是直接一個 -m "fix" 就提交上去了濒旦。

這樣做是非常不好的,我也是自食惡果再登,深受其害尔邓。特別是查看歷史提交記錄時,想通過提交說明來了解當時的功能變更锉矢,基本不可能梯嗽,都得點進去看代碼才行。

所以這兩天看了一些如何寫好提交說明的資料沽损,系統(tǒng)地學(xué)習(xí)了一下灯节。雖然團隊沒有這方面的要求,但是想要進步绵估,得對自己提更高的要求才行炎疆。

一般使用 git 提交代碼的話,可以使用 -m 參數(shù)來指定提交說明国裳,比如:

$ git commit -m "hello world"

如果一行不夠形入,可以只執(zhí)行 git commit,這樣就會跳出文本編輯器來寫多行:

$ git commit

Commit Message 格式

Commit Message 包括三個部分:Header缝左,Body 和 Footer亿遂。

<Header>

<Body>

<Footer>

其中,Header 是必需的渺杉,Body 和 Footer 可以省略蛇数。

Header

Header 部分只有一行,包括三個字段:type(必需)少办、scope(可選)苞慢、subject(必需)诵原。

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

type

type 用于說明 commit 的類別英妓,具體的標識如下:

  • feat:一個新的功能(feature)挽放;
  • fix:修復(fù) bug;
  • docs:修改文檔,比如 README.md蔓纠、CHANGELOG.md 等辑畦;
  • style:修改代碼的格式,不影響代碼運行的變動腿倚,比如空格纯出、格式化代碼、補齊句末分號等等敷燎;
  • refactor:代碼重構(gòu)暂筝,沒有新功能的添加以及 bug 修復(fù)的代碼改動;
  • perf:優(yōu)化代碼以提高性能硬贯;
  • test:增加測試或優(yōu)化改善現(xiàn)有的測試焕襟;
  • build:修改影響項目構(gòu)建文件或外部依賴項,比如 npm饭豹、gulp鸵赖、webpack、broccoli 等拄衰;
  • ci:修改 CI 配置文件和腳本它褪;
  • chore:其他非 src 路徑文件和測試文件的修改,比如 .gitignore翘悉、.editorconfig 等茫打;
  • revert:代碼回退;

scope

scope 用于說明 commit 的影響范圍镐确,比如數(shù)據(jù)層包吝、控制層、視圖層等等源葫,視項目不同而不同诗越。

如果你的修改影響了不止一個 scope,就可以使用 * 代替息堂。

subject

subject 是 commit 目的的簡單描述嚷狞,不超過 50 個字符,結(jié)尾不需要句號荣堰。

Body

Body 部分是對本次 commit 的詳細描述床未,可以分多行。

Body 部分應(yīng)該說明代碼變動的動機振坚,以及與以前行為的對比薇搁。

More detailed explanatory text, if necessary.  Wrap it to
about 72 characters or so.

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent

Footer

Footer 部分主要用于兩種情況:不兼容變動和處理 Issue。

不兼容變動

如果當前代碼與上一個版本不兼容渡八,則 Footer 部分以 BREAKING CHANGE: 開頭啃洋,后面就是對變動的描述传货、以及變動理由和遷移方法。

BREAKING CHANGE: Previously, $compileProvider.preAssignBindingsEnabled was set to true by default. This means bindings were pre-assigned in component constructors. In Angular 1.5+ the place to put the initialization logic relying on bindings being present is the controller $onInit method.

To migrate follow the example below:

Before:

```js
angular.module('myApp', [])
    .component('myComponent', {
        bindings: {value: '<'},
        controller: function() {
        this.doubleValue = this.value * 2;
    }
});

After:

angular.module('myApp', [])
    .component('myComponent', {
        bindings: {value: '<'},
        controller: function() {
            this.$onInit = function() {
                this.doubleValue = this.value * 2;
            };
        };
        this.doubleValue = this.value * 2;
    }
});

Don't do this if you're writing a library, though, as you shouldn't change global configuration then.


#### 處理 Issue

處理 Issue 分為兩種情況宏娄,分別是關(guān)聯(lián) Issue 和關(guān)閉 Issue问裕。

比如本次提交如果和某個 issue 有關(guān)系:

```shell
Issue #1, #2, #3

如果當前提交信息解決了某個 issue:

Close #1, #2, #3

Revert

還有一種特殊情況,如果當前 commit 用于撤銷以前的 commit孵坚,則必須以 revert: 開頭粮宛,后面跟著被撤銷 commit 的 Header。

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

Body 部分的格式是固定的卖宠,必須寫成 This reverts commit &lt;hash>.巍杈,其中 hash 是被撤銷 commit 的 SHA 標識符。

如果當前 commit 與被撤銷的 commit扛伍,在同一個發(fā)布(release)里面秉氧,那么它們都不會出現(xiàn)在 Change log 里面。如果兩者在不同的發(fā)布蜒秤,那么當前 commit汁咏,會出現(xiàn)在 Change log 的 Reverts 小標題下面。

最后來看一個例子作媚,算是一個總結(jié)攘滩,至于具體內(nèi)容還是要根據(jù)實際情況來填寫。

feat: 添加了分享功能

給每篇博文添加了分享功能

- 添加分享到微博功能
- 添加分享到微信功能
- 添加分享到朋友圈功能

Issue #1, #2
Close #1

插件推薦

有了這些規(guī)范纸泡,也知道怎么寫了漂问,但是不是會擔(dān)心記不住呢?不要怕女揭,有插件可以用蚤假,如果使用 VsCode 的話,可以安裝一個叫 Commit Message Editor 的插件吧兔。

可以根據(jù)提示信息直接寫:

preview1.gif

也可以使用表單的方式磷仰,有選項可以選擇:

preview2.gif

這樣不僅可以很方便地寫提交說明了,還可以使提交說明更加的規(guī)范境蔼。

以上就是本文的全部內(nèi)容灶平,如果覺得還不錯的話歡迎點贊轉(zhuǎn)發(fā)關(guān)注箍土,感謝支持逢享。


參考文章:

推薦閱讀:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吴藻,隨后出現(xiàn)的幾起案子瞒爬,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧但,死亡現(xiàn)場離奇詭異吆你,居然都是意外死亡,警方通過查閱死者的電腦和手機俊犯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伤哺,“玉大人燕侠,你說我怎么就攤上這事×⒗颍” “怎么了绢彤?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜓耻。 經(jīng)常有香客問我茫舶,道長,這世上最難降的妖魔是什么刹淌? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任饶氏,我火速辦了婚禮,結(jié)果婚禮上有勾,老公的妹妹穿的比我還像新娘疹启。我一直安慰自己,他們只是感情好蔼卡,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布喊崖。 她就那樣靜靜地躺著,像睡著了一般雇逞。 火紅的嫁衣襯著肌膚如雪荤懂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天塘砸,我揣著相機與錄音节仿,去河邊找鬼。 笑死掉蔬,一個胖子當著我的面吹牛粟耻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眉踱,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挤忙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谈喳?” 一聲冷哼從身側(cè)響起册烈,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赏僧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體大猛,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年淀零,在試婚紗的時候發(fā)現(xiàn)自己被綠了挽绩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡驾中,死狀恐怖唉堪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肩民,我是刑警寧澤唠亚,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站持痰,受9級特大地震影響灶搜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜工窍,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一割卖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧患雏,春花似錦究珊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攻人,卻和暖如春取试,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怀吻。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工瞬浓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓬坡。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓猿棉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屑咳。 傳聞我的和親對象是個殘疾皇子萨赁,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354