社区有多种Commit message规范,而Angular规范是目前使用最广的写法。
格式化的Commit message能够提供更多的历史信息,方便快速浏览。
比如,下面的命令会显示上次发布后的变动,每个commit占据一行,而只看行首,就可以知道某次commit的目的
git log <last tag> HEAD --pretty=format:%s

格式化的commit message可以过滤某些commit,便于快速查找信息。
比如,下面命令仅仅显示本次发布新增加的功能。
git log <last release> HEAD --grep feature
格式化的commit message可以直接从commit生成Change log
Change Log是发布新版本时,用来说明与上一个版本差异的文档。

Commit message格式
每次提交,Commit message都包含三个部分:Header,Body和Footer
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
其中Header是必需的,Body和Footer可以省略。
不管哪一个部分,任何一行都不得超过72个字符(或100个字符),以免影响自动换行的美观
Header
Header部分只有一行,包括三个字段:type(必需)、scope(可选)、subject(必需)
type用于说明commit的类别,只允许使用下面7个标识。
| 标识 | 说明 |
|---|---|
| feat | 新功能(feature) |
| fix | 修补bug |
| docs | 文档 |
| style | 格式 |
| refactor | 重构(不是新增的功能,也不是修改bug的代码变动) |
| test | 增加测试 |
| chore | 构建过程或辅助工具的变动 |
如果type为feat和fix,则该commit将肯定会出现在Change Log中,其他情况docs、chore、style、refactor、test则可以决定是否放在Change Log。
scope用于说明commit影响的方位,比如数据层、控制层、视图层等,视项目不同而不同。
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
说明代码变动的动机,以及与之前行为的对比
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 #234
可以一次关闭多个issue
Closes #123, #245, #992
Revert
如果当前commit用于撤销以前的commit,必须以revert:开头,后面跟着被撤销的Commit的Header
revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
如果当前commit与被撤销的commit在同一个发布里面,则不会出现在Change log里面。
如果两者在不同的发布里面,那么当前commit会出现在Change log的Reverts标题下面。