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. webElement.text()获取到内容为空

    使用webElement.text()方法获取字符串时,有时候会获取失败--获取到的内容为空 使用 webElement.getAttribute("attributeName") ...

  2. sqlserver批量导出存储过程、函数、视图

    select text from syscomments s1 join sysobjects s2 on s1.id=s2.id  where xtype = 'V' xtype V   视图 P  ...

  3. SVN概述

    ----------------------siwuxie095                                 SVN 概述         1.SVN 即 Subversion 的 ...

  4. [leetcode]689. Maximum Sum of 3 Non-Overlapping Subarrays三个非重叠子数组的最大和

    In a given array nums of positive integers, find three non-overlapping subarrays with maximum sum. E ...

  5. win 下 apache 实现负载均衡

    1.打开apache的配置文件httpd.conf,打开如下项 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_mo ...

  6. iOS.AddFont

    为iOS App 添加定制字体 http://www.developers-life.com/how-to-include-ttf-fonts-to-ios-app.html http://blog. ...

  7. CF 1023D Array Restoration - 线段树

    题解 非常容易想到的线段树, 还可以用并查集来. 还有一位大神用了$O(n)$ 就过了Orz 要判断是否能染色出输入给出的序列,必须满足两个条件: 1. 序列中必须存在一个$q$ 2. 两个相同的数$ ...

  8. Linux多线程服务端编程 使用muduo C++网络库 学习笔记 日志log

    代码来自陈硕开源代码库 muduo中 地址是https://github.com/chenshuo/muduo #pragma once #include <string> #define ...

  9. STAX项目结束总结

    STAX:Support Taxonomy Management Console. 使用了MVC+WCF+jQuery+Azman.msc(权限控制)+kendoUI+SQL SERVER 2012

  10. 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

    传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码