社区有多种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标题下面。

results matching ""

    No results matching ""