一个优秀的项目,必然是规范的,纵览世界上优秀的开源项目,都有一个共同的特点,就是commit的次数很多,哎呸,不对是Commit的Message很规范。
那么我们就谈谈Commit的Message的重要性。
一个杂乱无章的 Message,在你后续去看项目的变动的时候,是一件比自杀还要命的事情(都自杀了,还有命?),显然对生活还有追求的我们应该认真对待这件事情,
下面我们说说一个规范的Message的好处:
打个比方:小明很喜欢收集CD,小吴也喜欢收集CD,但是小明每次听完CD的时候就随意的放置CD的位置,而小吴则在每一个CD的壳自边缘都贴上一张便利贴并写上对应的时间,且按此时间顺序进行整理放置。
...
多年后,两个人在儿孙面前吹嘘,说自己拥有***歌星的***年唱片**版。
...
ps:故事没讲完,但我相信很多人都明白了一个优秀的Message的重要性了吧
那么废话不多说,我们直接描述Message的一般规范(记住,规范是死的,规范本就是人为定的,只要能让你的Commit的Message更好的管理都是好规范,下面我只是用国际常用的Commit的规范给大家做一个记录而已,下面的规则不是重要,重点是你要知道这件事情的重要性。)
下面我简单的说一下一般来说Message的规范:
首先是格式:
每次提交,Commit Message 都包括三个部分:header,body 和 footer
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
其中呢,header 是必需的,body 和 footer 可以省略。
不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观
其中的Header:
Header
Header部分只有一行,包括三个字段:type
(必需)、scope
(可选)和subject
(必需)。
type 部分描述:
用于说明 commit 的类别,只允许使用下面7个标识。
- feat:新功能(feature)
- fix:修补bug
- docs:文档(documentation)
- style: 格式(不影响代码运行的变动)
- refactor:重构(即不是新增功能,也不是修改bug的代码变动)
- test:增加测试
- chore:构建过程或辅助工具的变动
scope 部分描述:
scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
例如在Angular
,可以是$location
, $browser
, $compile
, $rootScope
, ngHref
, ngClick
, ngView
等。
如果你的修改影响了不止一个scope
,你可以使用*
代替。
subject 部分描述:
subject
是 commit 目的的简短描述,不超过50个字符。
其他注意事项:
- 以动词开头,使用第一人称现在时,比如change,而不是changed或changes
- 第一个字母小写
- 结尾不加句号(.)
Body
Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。
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
注意点:
- 使用第一人称现在时,比如使用change而不是changed或changes。
- 永远别忘了第2行是空行
- 应该说明代码变动的动机,以及与以前行为的对比。
Footer
Footer 部分只用于以下两种情况
不做兼容变动:
如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。
BREAKING CHANGE: isolate scope bindings definition has changed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
}
After:
scope: {
myAttr: '@',
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
关闭 Issue:
如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue 。
Closes #hello issue
Revert:
还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。
revert: feat(pencil): add 'flutter_branch' option
This reverts commit 321e232bda323mk823942be993213
ps:我们这里只是简单的介绍一下Commit的 Message,还有更多更详细的若感兴趣的小伙伴可以去了解更加详细的知识哟,其实往往一个优秀的程序员和普通的程序员直接最明显的区别来自于两个字素养
参考文章
Commit message 和 Change log 编写指南
Angular.js Git Commit Guidelines