约定Git Commit Message格式的目的:
- 根据 commit message 自动生成 CHANGELOG
- 忽略某些不重要 commits
- 最重要的是, 可以让 commit 信息更加易读
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
commit message 每一行的最大长度限制为100个字符, 这是为了避免自动换行影响美观.
每条 commit message 都包含一个 header, 一个 body 和一个 footer, 中间以一个空行隔开. header 是必须的, body 和 footer 是选填项.
Message Header 只占一行, 用于简短地描述这次提交的内容, 包含三个字段<type>
(必须), <scope>
(可选)和 <subject>
(必须).
<type>
用于描述本次 commit 更改内容的类型. 只允许使用下列7个标识
feat
: 特性(feature)fix
: 修复bugperf
: 性能(performance)refactor
: 重构(不是新增功能,也不是修改 bug 的代码变动)docs
: 文档style
: 格式, 比如缩进, 丢失分号等不影响代码运行的变动test
: 增加测试chore
: 构建过程或辅助工具的变动ci
: ci配置文件
<scope>
用于描述commit 影响的范围, 比如控制层, 视图层等, 视项目不同而变
init
runner
watcher
config
web-server
proxy
etc.
可以为空(全局或者单一且小的模块)
<subject>
是commit 目的的简短描述, 不超过50个字符
- 开头必须是动词, 使用第一人称现在时, 比如"change", 而不是"changed"或"changes"
- 首字母小写
- 结尾不加"."
Message Body 是对本次 commit 的详细描述
有两个要点:
- 用第一人称现在时的动词, 比如用"change", 而不是"changed"或"changes"
- 应该说明代码变动的动机,以及与以前行为的对比
Message Footer只用于两种情况:
所有的不兼容变动必须在Footer中标注出, 以BREAKING CHANGE
开头, 后面是对表动的描述, 以及变动理由和迁移方法
BREAKING CHANGE: isolate scope bindings definition has changed and
the inject option for the directive controller injection was removed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
myBind: 'bind',
myExpression: 'expression',
myEval: 'evaluate',
myAccessor: 'accessor'
}
After:
scope: {
myAttr: '@',
myBind: '@',
myExpression: '&',
// myEval - usually not useful, but in cases where the expression is assignable, you can use '='
myAccessor: '=' // in directive's template change myAccessor() to myAccessor
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
如果当前commit 针对某个issue, 在Footer部分关闭这个issue, 以Closes
开头
Closes #123
也可以一次性关闭多个issue
Closes #123, #124, #125
存在一种特殊情况, 如果当前commit 用于撤销之前的commit, 则commit header的内容必须revert:
开头, 后面跟着被撤销的commit的Header.
比如:
revert: feat(pencil): add 'graphiteWidth' option
在commit body中, 填写This reverts commit <hash>
, 其中<hash>
是被撤销的commit 的SHA标识符
- 必须使用英文撰写 message header, 不允许出现中文, 中文标点符号和汉语拼音.
可以借助google translate, 百度翻译等翻译工具辅助撰写.
message body 和 footer 可以使用中文.
- 本规则主要参考了
angular.js
的 Commit Message Guidelines, 如有理解不清楚的地方可以参考原文.