0%

Git commit message 提交日志格式

Git commit message 提交日志格式

1. 提交日志格式

每次提交, Commit message 都包括三个部分: header, body, footer

1
2
3
4
5
<type>(<scope>): <subject>
// 空行
<body>
// 空行
<footer>

其中header是必须的, bodyfooter可以省略。

提交消息的任何行都不能超过100个字符!为了在github以及各种git工具中更容易阅读消息。

2. header

header部分只有一行, 包括三个字段type(必须), scope, subject

(1) type

用于说明commit的类别。

type 描述
feat 新功能(feature)
fix 修补bug
docs 文档(documentation)
perf 改进性能的代码更改
style 不影响代码含义的更改(空格,格式,缺少分号等)
refactor 重构(即不是新增功能, 也不是修改bug的代码变动)
test 添加缺失测试或更正现有测试
chore 其他修改(非src或测试文件的修改)
ci CI配置文件和脚本的更改(示例范围: Circle, BrowserStack, SauceLabs)
build 影响构建系统或外部依赖项的更改(示例范围:gulp,broccoli,npm)
revert 返回以前的提交

(2) scope

用于说明commit影响的范围, 比如数据层、控制层、视图层等等, 视项目不同而不同。

(3) scope

commit目的的简短描述, 不超过50个字符。

  • 以动词开头, 使用第一人称现在时, 比如change, 而不是changed或changes
  • 第一个字母小写
  • 结尾不加句号(.)

3. body

body部分是对本次commit的详细描述, 可以分成多行。

下面是一个范例:

1
2
3
4
5
6
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

有两个注意点:

1
2
3
(1)使用第一人称现在时, 比如使用change而不是changed或changes。

(2)应该说明代码变动的动机, 以及与以前行为的对比。

footer部分只用于两种情况:

(1)不兼容变动

如果当前代码与上一个版本不兼容,则footer部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。

(2)关闭Issue

如果当前commit针对某个issue,那么可以在 Footer 部分关闭这个 issue 。

1
Closes #234

也可以一次关闭多个 issue 。

1
Closes #123, #245, #992

5. revert

还有一种特殊情况,如果当前commit用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销commit的 Header。

1
2
3
revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

Body部分的格式是固定的,必须写成This reverts commit .,其中的hash是被撤销commit的 SHA 标识符。

如果当前commit与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的Reverts小标题下面。