原文鏈接: 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 <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ù)提示信息直接寫:
也可以使用表單的方式磷仰,有選項可以選擇:
這樣不僅可以很方便地寫提交說明了,還可以使提交說明更加的規(guī)范境蔼。
以上就是本文的全部內(nèi)容灶平,如果覺得還不錯的話歡迎點贊,轉(zhuǎn)發(fā)和關(guān)注箍土,感謝支持逢享。
參考文章:
- https://juejin.cn/post/6960541430473293837
- https://mrseawave.github.io/blogs/articles/2021/03/31/git-commit-message/
推薦閱讀: