git 提交規(guī)范
前言
無規(guī)矩不成方圓,編程也一樣。
如果你有一個(gè)項(xiàng)目,從始至終都是自己寫,那么你想怎么寫都可以,沒有人可以干預(yù)你。可是如果在團(tuán)隊(duì)協(xié)作中,大家都張揚(yáng)個(gè)性,那么代碼將會(huì)是一團(tuán)糟,好好的項(xiàng)目就被糟踐了。不管是開發(fā)還是日后維護(hù),都將是災(zāi)難。
提交規(guī)則
一個(gè)commit只做一件事情,若一個(gè)commit做了多件事情需要拆分成多個(gè)commit
嚴(yán)格遵循commit message格式
每次只允許提交一個(gè)commit,若本地有多個(gè)commit等待提交,必須等前面的commit合并進(jìn)入主版本庫并在本地合并完成后才可提交后面的commit
內(nèi)容要求
在commit log中,要寫清楚以下幾點(diǎn)內(nèi)容:
這個(gè)commit解決了哪個(gè)問題,或者實(shí)現(xiàn)了哪個(gè)功能,需要有對(duì)應(yīng)的bug url或者功能列表url;
如果是個(gè)bug fix,請(qǐng)?jiān)斒鲋按嬖谑裁磫栴},這個(gè)commit是如何解決的;
如果這個(gè)commit只是一個(gè)大的過程中的某一步,請(qǐng)注明,并且簡要列出這個(gè)commit之后還需要做的事情;
如果有需要提醒審核者注意的問題,比如一個(gè)known bug,或者還有某些已知問題,或者需要未來重構(gòu),請(qǐng)用“NOTICE:”另起一行標(biāo)注并說明。
提交格式
Git Commit 規(guī)范可能并沒有那么夸張,但如果你在版本回退的時(shí)候看到一大段糟心的 Commit,恐怕會(huì)懊惱不已吧。所以,嚴(yán)格遵守規(guī)范,利人利己,建議大家養(yǎng)成良好的開發(fā)習(xí)慣。
每次提交,Commit message 都包括三個(gè)部分:header,body 和 footer。
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
其中,header 是必需的,body 和 footer 可以省略。
不管是哪一個(gè)部分,任何一行都不得超過72個(gè)字符(或100個(gè)字符)。這是為了避免自動(dòng)換行影響美觀。
Header
Header部分只有一行,包括三個(gè)字段:type(必需)、scope(可選)和subject(必需)。
type
用于說明 commit 的類別,只允許使用下面7個(gè)標(biāo)識(shí)。
- feat:新功能(feature)
- fix:修補(bǔ)bug
- docs:文檔(documentation)
- style: 格式(不影響代碼運(yùn)行的變動(dòng))
- refactor:重構(gòu)(即不是新增功能,也不是修改bug的代碼變動(dòng))
- test:增加測(cè)試
- chore:構(gòu)建過程或輔助工具的變動(dòng)
如果type為feat和fix,則該 commit 將肯定出現(xiàn)在 Change log 之中。其他情況(docs、chore、style、refactor、test)由你決定,要不要放入 Change log,建議是不要。
scope
scope用于說明 commit 影響的范圍,比如數(shù)據(jù)層、控制層、視圖層等等,視項(xiàng)目不同而不同。
如果你的修改影響了不止一個(gè)scope,你可以使用*代替。
subject
subject是 commit 目的的簡短描述,不超過50個(gè)字符。
其他注意事項(xiàng):
- 以動(dòng)詞開頭,使用第一人稱現(xiàn)在時(shí),比如change,而不是changed或changes
- 第一個(gè)字母小寫
- 結(jié)尾不加句號(hào)(.)
Body
Body 部分是對(duì)本次 commit 的詳細(xì)描述,可以分成多行。下面是一個(gè)范例。
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
有兩個(gè)注意點(diǎn):
- 使用第一人稱現(xiàn)在時(shí),比如使用change而不是changed或changes。
- 永遠(yuǎn)別忘了第2行是空行
- 應(yīng)該說明代碼變動(dòng)的動(dòng)機(jī),以及與以前行為的對(duì)比。
Footer
Footer 部分只用于以下兩種情況:
- 不兼容變動(dòng)
- 如果當(dāng)前代碼與上一個(gè)版本不兼容,則 Footer 部分以BREAKING CHANGE開頭,后面是對(duì)變動(dòng)的描述、以及變動(dòng)理由和遷移方法。