1 前言
Git Commit Message 应该清晰明了,要用精简的语言说明本次提交的目的,其主要作用是为
了后续的搜索、版本的回滚、合并冲突的追溯等操作。

我们在开发时一直以来对 Git Commit 格式有个约定俗称的要求,所以就没落实明确的规范。
因为没有明确的规范,就会导致提交的消息较为随意。甚至出现「“.”、”Update”」这样的消息。

直到我在 GitHub 上发现了这条 Commits 时,才意识到提交信息也该规范起来。

以下图举例,当代码出现 Bug 时,应该回滚到哪个版本?
回滚到 “朕与将军解战袍,芙蓉暖帐度春宵” 吗?
这条记录所变更的内容是啥,看概要我一概不知。 ︿( ̄︶ ̄)︿

为了解决规范问题,我参考了一些的开源项目,当发现 commitizen 库时,才知道好多大型开
源(AngularJSVueJS)项目早已使用了它。所以在接下来我会介绍一下 commitizen 工具所
使用 Google AngularJS 规范。

2 规范介绍
这次主要介绍 AngularJS 的规范,它是由 Google 推出的一套提交消息规范标准,也是目前使
用范围最广的规范。有一套合理的手册也较为系统化;并且还有配套的工具可以供我们使用。

说白了,规范就是用工具进行强约束。单看规范比较简单,所以先让大家先看看面,知道他的
大体规则后,在来讲细节。

规范执行方案如下:  

既然有了方案,就会按照某些规则执行,以下是 Google AnguarJS 规范的要求:

规范目标
- 允许通过脚本生成 CHANGELOG.md
- 可以通过范围的关键词,快速的搜索到指定版本

git log HEAD --grep feat(package.json) # 在package.json文件里新增的特性。 

格式要求

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

- 消息只占用一行,任何行都不能超过 100 个字符
- 允许使用 GitHub 以及各种 Git 工具阅读消息
- 提交消息由页眉、正文和页脚组成,由空行分隔

<type>
代表某次提交的类型,比如是修复一个 bug 或是增加一个 feature,类型如下:
类型 描述


<scope>
范围可以是指定提交更改位置的任何内容,如:
- 对 package.json 文件新增依赖库,chore(package.json): 新增依赖库
- 或对代码进行重构,refacto(weChat.vue): 重构微信进件

<subject>
如果没有更合适的范围,可以直接写提交内容

Commit 实战
提交一条依赖库变更,type 为 chore(增加依赖库);等提交完成后,使用 Git 工具进行搜索。
此时搜索类型是 chore(package.json),所以就能知道 package.json 文件所有的历史变更。

# 新增一条 Commit 记录
git commit -m 'chore(package.json): 新增 AngularJS 规范,Commit 时会自动调用钩子(GitHook)来判断 Message 是否有效' # 搜索跟 package.json 文件相关的历史记录
git log HEAD --grep chore(package.json)

3 工具介绍
因为是 Google AngularJS 的标准规范,所以提供了多种工具。如生成 CHANGELOG.md,提
交工具,检查工具。

工具列表:
1. 提交工具 commitizen,如果是初学者,可以使用 commitizen 帮助我们生成消息
2. 生成 CHANGELOG.md,把 Git Commit Message 的消息自动生成 CHANGELOG.md
3. Message 检查,是否有 “不符合” 规范的内容,可以在 GitHook 中使用

提交以及检查工具相对来说简单,大家自学即可,所以我以生成 CHANGELOG.md 举例。

# 安装 CHANGELOG 生成器
yarn global add standard-version # 生成文档
standard-version --first-release

文档生成后,当前目录下就有 CHANGELOG.md 文件了,如果是 Node 项目,也会自动更新
package.json version 的版本号

这是根据 Git Commit Message 历史记录所生成的 CHANGELOG.md,在也不用手写了。( ̄▽ ̄)"

4 参考链接
commitizen
https://github.com/commitizen/cz-cli
https://github.com/conventional-changelog/conventional-changelog
https://github.com/marionebl/commitlint

中文规范
https://github.com/feflow/git-commit-style-guide

AngularJS 规范
https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit#heading=h.greljkmo14y0
https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#toc10

Git Commit 标准化的更多相关文章

  1. git commit 、CHANGELOG 和版本发布的标准自动化

    一直以来,因为团队项目迭代节奏很快,每次发布的更新日志和版本更新都是通过人肉来完成的.有时候实在忙的团团转,对于手动的写这些更新信息就显得力不从心了.对于团队新来的小伙伴,有时候遇到些紧急情况,就更显 ...

  2. [译]How to Write a Git Commit Message

    原文: http://chris.beams.io/posts/git-commit/ 介绍:为什么好的commit message很重要 你浏览项目commit message的时候或多或少会有些困 ...

  3. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  4. linux显示git commit id,同时解决insmod模块时版本不一致导致无法加载问题

    linux内核默认会包含git的commit ID. 而linux的内核在insmod模块时,会对模块和内核本身的版本做严格的校验.在开发产品时,改动内核后,由于commit ID变更,会导致linu ...

  5. git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode.

    git 提交代码是会遇到以下问题, git commit 代码时提示: Warning: Your console font probably doesn‘t support Unicode. If ...

  6. [译]git commit --amend

    git commit --amend命令用来修复最近一次commit. 可以让你合并你缓存区的修改和上一次commit, 而不是提交一个新的快照. 还可以用来编辑上一次的commit描述. 记住ame ...

  7. [译]git commit

    git commit git commit命令提交stage区的快照到项目历史中去(HEAD). 被提交的快照被认为是一个项目的安全版本. Git不会修改他们, 除非你显示的要求了. 和git add ...

  8. git commit --amend

    任何时候,你都有可能需要撤消刚才所做的某些操作.接下来,我们会介绍一些基本的撤消操作相关的命令.请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果. 有时候我们提交 ...

  9. Git commit 常见用法

        Git commit git commit 主要是将用户通过git add命令添加到暂存区里的改动给提交到本地的版本库,关于版本库的构成可以查看我先前的笔记. 每次提交我们都会在本地版本库生成 ...

随机推荐

  1. mysql增加远程连接用户及查看数据库表结构

    一.增加远程连接用户 1.用root权限登录数据库  2.加用户:grant all privileges on *.* to '111'@'192.168.1.%' identified by '2 ...

  2. Java List/HashSet/HashMap的排序

    在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...

  3. WIN7系统IIS上发布站点后水印效果失效的解决方法

    关于使用一般处理程序给图片添加水印的方法,请参考: 使用一般处理程序(IHttpHandler)制作图片水印 有些时候,给图片添加水印了,在本机运行也都正常,但是发布到IIS上后就没有水印效果了.本人 ...

  4. 机械硬盘怎么看是否4k对齐

    在XP.VISTA.win7系统下,点击“开始”,“运行”,输入“MSINFO32”,点击“确定”,出现如下显示的界面,依次点击“组件/存储/磁盘”,查看“分区起始偏移”的数值,如果不能被4096整除 ...

  5. xcode - 显示安装过的低版本模拟器

    1. 更改版本

  6. php中错误处理机制

    php中,异常处理机制是有限的,无法自动抛出异常,必须手动进行,并且内置异常有限. php把许多异常看作错误,这样就可以把这些异常想错误一样用set_error_handler接管,进而主动抛出异常. ...

  7. 在java工程中导入jar包的注意事项

    在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.

  8. 解决 cmake_symlink_library: System Error: Operation not supported

    在编译uchardet时遇到这个错误: cmake_symlink_library: System Error: Operation not supported 创建链接不成功,要确认当前帐户下是否有 ...

  9. msys2 设置home路径为windows用户路径

    1配置/etc/nsswitch.conf db_home: windows 2(可不配)增加windows环境变量HOME为%USERPROFILE% 3(可不配)ssh默认仍使用msys中的hom ...

  10. tomcat 时间相差8个小时,百度上查到的,备份下

    通常网上一查都是 修改 tomcat 的参数 ,如catalina 文件,jvm parameters 等.如果都不起作用,可以使用如下方式.. 你可以修改jdk的时间校正了,你这么来.进入 \hom ...