今天来说说团队开发中,对于 Git commit message 规范问题。

社区上有各种 Commit message 的规范,本文介绍 Angular 规范,目前使用较广,比较合理和系统化,并且有配套的工具。

1. 规范 Commit Msg 的作用

1) 提供更多的历史信息,方便快速浏览

例如,命令显示上次发布后的变动,每个 commit 占据一行。只看首行,就知道某次 commit 的目的。

$ git log <last tag> HEAD --pretty=format:%s
 

2) 可以过滤某些 commit ,便于快速查找信息

例如,下面的命令过滤仅显示本次发布新增加的功能。

$ git log <last release> HEAD --grep feature
 

3) 可以直接从 commit 生成 Change Log

Change Log 是发布新版本时,用来说明与上一版本差异的文档。

2. Angular 规范的 Commit Msg 语法

每一次提交,Commit message 都包括 3 个部分: Header, Body 和 Footer 。

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
 

其中,Header 是必需的, Body 和 Footer 可以省略。

Commit Msg 的任何一行都不得超过 100 个字符。这样是为了在 GitHub 以及各种 Git 工具中更容易阅读。

2.1. Message Header

Header 部分只有一行,它包含对更改的简单描述,其中包括 「类型」( type )、「可选范围」( scope ) 和 「主题」( subject )。

//Message Header Demo

fix($compile): couple of unit tests for IE9

style($location): add couple of missing semi colons

feat($compile): simplify isolate scope bindings
 

2.1.1. 类型 type

type 用于说明 commit 的类别,只允许使用一下 7 个标示。

feat:新功能(feature)

fix:修补bug

docs:文档(documentation)

style: 格式(不影响代码运行的变动)

refactor:重构(即不是新增功能,也不是修改bug的代码变动)

test:增加测试

chore:构建过程或辅助工具的变动
 

2.1.2. 影响范围 scope

「范围」可以是指定提交更改位置的任何内容。例如 browser 、 $compile 、 SrootScope 、 ngHref 、 ngClick 、 ngView 等。

如果没有合适的「范围」,可以用 * 。

2.1.3 主题 subject

subject 是 commit 目的的简单描述,不超过 50 个字符。

* 使用祈使句,并且以第一人称现在时。

* 首字母不要大写

* 结尾 不要 加句号(dot)
 

2.2. Message 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
 

需要注意两点:

1) 使用第一人称现在时。

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

2.3. Footer

2.3.1. 重大更改 Breaking Changes

所有的「重大更改」必须在 Footer 作为「重大更改块」被提及到,它应该以 BREAKING CHANGE: 开头,后面跟着一个空格或者两个空行。然后,Commit Msg 的其余部分是对更改,理由和迁移说明的描述。

REAKING 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.
 

2.3.2. 关闭 Issue (Referencing Issues)

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

Closes #123
 

也可以一次关闭多个 issue 。

Closes #123, #243, #545
 

2.4. 还原 (Revert)

如果当前的 commit 是还原到之前的 commit,那么当前 Commit msg Header 要以 revert: 开头,并且后面紧跟着还原 Commit 的 Header 。这时 Body 里面要以 This reverts commit <hash> 固定式,其中 <hash> 是 commit 的 SHA 标示符。

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
 

参考文献

Angular 规范: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit

阮一峰 博客: http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

Git Commit Message 规范的更多相关文章

  1. 如何写好git commit message

    1.触发事件 我有这样一个版本库,里面包含两个学习用的练习项目:BookStore(以下简称BS)和PictureFriend(以下简称PF) 我在更改PF以后,未进行提交,同时又到BS中优化了一下文 ...

  2. 我是怎么写 Git Commit message 的?

    目录 作用 用的什么规范? type scope subject body footer 参考文章 用的什么辅助工具? 作用 编写格式化的 commit message 能够大大提高代码的维护效率. ...

  3. git第四节----git commit message

    @git  commit message 什么是git commit message :git commit -m '每次提交时编辑的内容' git commit message的好处:      1 ...

  4. 自家公司关于git commit 的规范

    代码提交的commit info提个建议,fix的issue是哪个issue?都要有明确的链接.推荐方式:1.建立issue,说明问题的背景和原因.http://git.startdt.net/pay ...

  5. Git commit message和工作流规范

    目的 统一团队Git commit日志标准,便于后续代码review,版本发布以及日志自动化生成等等. 统一团队的Git工作流,包括分支使用.tag规范.issue等 Git commit日志参考案例 ...

  6. git使用总结(包含git commit message 和 changelog 工具的介绍)

    [git的配置] 1.配置用户名和邮箱: 分为全局配置和局部配置 --system 系统配置  --global 全局配置    --local 局部配置 Git读取时:优先从local>glo ...

  7. commitizen和cz-customizable配置git commit message

    起因 团队对提交的commit message格式有约定俗称的要求,但是没有一个统一的规范,导致大家提交的commit message或多或少不太一样.因此,需要一个工具来帮助大家统一commit m ...

  8. git commit的规范

    https://www.yuque.com/fe9/basic/nruxq8#6c228def 制定一个 git commit 信息的提交规范是开发团队工作流必不可少的环节.试想一下,如果查看主分支上 ...

  9. 优化 Git Commit Message

    目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...

随机推荐

  1. GYM 101350 F. Monkeying Around

    F. Monkeying Around time limit per test 2.0 s memory limit per test 256 MB input standard input outp ...

  2. Leetcode96.Unique Binary Search Trees不同的二叉搜索树

    给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 假设n个节点存在二叉排序树的 ...

  3. 有趣的HTML5 Web 存储

    HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储? 使用HTML5可以在本地存储用户的浏览数据. 早些时候,本地存储使用的是 cookie.但是Web ...

  4. jquery源码学习(二)——jquery中的变量

    jquery在 21-93 行提供了变量 var // A central reference to the root jQuery(document) rootjQuery, // The defe ...

  5. LintCode_173 链表插入排序

    题目 用插入排序对链表排序 样例 Given 1->3->2->0->null, return 0->1->2->3->null C++代码 ListN ...

  6. ecshop二次开发之百度地图

    案例效果展示: 代码实现: 1.在ecshop后台找到文章管理->文章分类->添加文章分类,添加一个顶级分类,叫做"合作单位",并且让其显示在导航栏.如下图: 1.在e ...

  7. 书写更加高效的CSS,走出误区

    根据一些CSS写作经验,如何提高渲染效率及所占用消耗的资源,我们来浅谈一下CSS的渲染效率,书写高效的CSS. 1.十六进制的颜色值对位数与大小写 编写十六进制颜色值时你可能会用小写字母或省略成3位数 ...

  8. Web学习之跨域问题及解决方案

    在做前端开发时,我们时常使用ajax与服务器通信获取资源,享受ajax便利的同时,也知道它有限制:跨域安全限制,即同源策略. 同源策略(SOP),核心是确保不同源提供的文件之间是相互独立的 默认情况下 ...

  9. react-native-login-redux

    项目地址如下 https://github.com/agunbuhori/react-native-login-redux 先看页面 ```js // 还有中英文切换 //src/global.js ...

  10. cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv'

    cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv' 解决方法: 在cmakelists.txt添加 find_p ...