你可能会忽略的 Git 提交规范

规范是建立在程序开发者与程序阅读者一个沟通的桥梁,是一个团队必须要严格遵守的约定
——动力节点Java学院
一、为什么需要规范?

无规矩不成方圆,编程也一样。

如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你。可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目就被糟践了。不管是开发还是日后维护,都将是灾难。
这时候,有人提出了何不统一标准,大家都按照这个标准来。于是 ESLint,JSHint 等代码工具如雨后春笋般涌现,成为了项目构建的必备良品。

Git Commit 规范可能并没有那么夸张,但如果你在版本回退的时候看到一大段糟心的 Commit,恐怕会懊恼不已吧。所以,严格遵守规范,利人利己。

二、具体规则

先来看看公式:
type

用于说明 commit 的类别,只允许使用下面7个标识。
scope
用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。
subject
是 commit 目的的简短描述,不超过50个字符。
1.以动词开头,使用第一人称现在时,比如change,而不是changed或changes
2.第一个字母小写
3.结尾不加句号(.)
规范参考自阮一峰老师的文章:Commit message 和 Change log 编写指南。

三、异常处理

我们先来看看这个异常提醒:
1.INVALID COMMIT MSG: does not match "(): " !
2.
3.jartto:fix bug

这里之所以报出这个警告,是因为我的提交出现了两个问题:
其一,使用了规范外的关键字;
其二,很细节的问题,jartto:后少了空格;

这时候我才回忆起来,当时提交一直失败,情急之下直接强制提交,所以以后的提交都会抱出这个异常。大致意思就是:
你的之前的 Commit 不合格~你的之前的 Commit 不合格~你的之前的 Commit 不合格

这时候就很烦了,我们只能去将之前的错误修正,那么如何操作呢?

四、如何修改之前的 commit 信息?

其实并不复杂,我们只需要这样做:

1、将当前分支无关的工作状态进行暂存
1.git stash

2、将 HEAD 移动到需要修改的 commit 上
1.git rebase 9633cf0919^ --interactive
3、找到需要修改的 commit ,将首行的 pick 改成 edit 4、开始着手解决你的 bug 5、 git add 将改动文件添加到暂存 6、 git commit –amend 追加改动到提交 7、git rebase –continue 移动 HEAD 回最新的 commit 8、恢复之前的工作状态
1.git stash pop

大功告成,是不是想把整个 Commit 都修改一遍,逃~
此处参考自:修改 Commit 日志和内容

五、项目中使用

这时候问题又来了,为什么我提交的时候会有警告,这个又是如何做到的呢?

这时候,我们需要一款 Node 插件 validate-commit-msg 来检查项目中 Commit message 是否规范。

1.首先,安装插件:
1.npm install --save-dev validate-commit-msg

2.使用方式一,建立 .vcmrc 文件:
1.{
2.“types”: [“feat”, “fix”, “docs”, “style”, “refactor”, “perf”, “test”, “build”, “ci”, “chore”, “revert”],
3.
4.“scope”: {
5.
6.“required”: false,
7.
8.“allowed”: ["*"],
9.
10.“validate”: false,
11.
12.“multiple”: false
13.
14.},
15.
16.“warnOnFail”: false,
17.
18.“maxSubjectLength”: 100,
19.
20.“subjectPattern”: “.+”,
21.
22.“subjectPatternErrorMsg”: “subject does not match subject pattern!”,
23.
24.“helpMessage”: “”,
25.
26.“autoFix”: false
27.
28.}
3.使用方式二:写入 package.json
1.
{

3.“config”: {
4.
5.“validate-commit-msg”: {
6.
7./* your config here */
8.
9.}}
10.}
4.可是我们如果想自动使用 ghooks 钩子函数呢?
1.{
2.…
3.
4.“config”: {
5.
6.“ghooks”: {
7.
8.“pre-commit”: “gulp lint”,
9.
10.“commit-msg”: “validate-commit-msg”,
11.
12.“pre-push”: “make test”,
13.
14.“post-merge”: “npm install”,
15.
16.“post-rewrite”: “npm install”,
17.
18.…
19.
20.}
21.
22.}
23.
24.…
25.
26.}

六、Commit 规范的作用

1.提供更多的信息,方便排查与回退;
2.过滤关键字,迅速定位;
3.方便生成文档;

七、生成 Change log

正如上文提到的生成文档,如果我们的提交都按照规范的话,那就很简单了。生成的文档包括以下三个部分:
New features
Bug fixes
Breaking changes.

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。
这里需要使用工具 Conventional Changelog 生成 Change log :
1.npm install -g conventional-changelog
2.
3.cd jartto-domo
4.
5.conventional-changelog -p angular -i CHANGELOG.md -w

为了方便使用,可以将其写入 package.json 的 scripts 字段。
1.{
2.
3.“scripts”: {
4.
5.“changelog”: “conventional-changelog -p angular -i CHANGELOG.md -w -r 0”
6.
7.}
8.
9.}
这样,使用起来就很简单了:
1.npm run changelog
到这里,我们所有的问题都搞明白了,?Cheers~

八、总结

看完文章,你还会如此放荡不羁吗?你还会随心所欲的编写 Commit 吗?你还会如此 git commit -m "hello jartto"提交吗?

答案是否定的,因为使用了钩子函数,你没有机会了,否则将是无穷无尽的恢复 Commit。这倒可以养成良好的提交习惯,?~

动力节点Java架构师班深度剖析Java底层原理,热门技术深入探讨,前沿技术深入解读,大项目实战重构,从0到1做架构,从全局思维出发,带你把控大型项目中别人忽略的重要细节节点,站在巨人肩膀上学习架构师,带你领会架构师不一样的视野

Git 提交规范-Java程序员收藏必备相关推荐

  1. Java数据结构与算法面试题,首发Java程序员人手必备的进阶知识体系,(1)

    在市场上很少能够看到一套不错的学习笔记,小编也是花了挺久的时间总结了这份**<Java程序员人手必备的进阶知识体系>**,帮助大家系统化高效的进阶学习,而不是零散低效的阅读. 2020全新 ...

  2. Java程序员面试必备的一些流程图

    点击上方"朱小厮的博客",选择"设为星标" 回复"1024"获取独家整理的学习资料 前言: 整理了一些Java基础流程图/架构图,做一下笔记 ...

  3. java程序员提升必备大数据、架构师学习资料免费分享

    大数据和架构师是很多java程序员工作2/3年后提升的首选方向,也是为数不多的学习方向. 而且大数据正在被越来越多的国家和企业定位发展战略,尤其是我国在贵州设立了大数据产业园区,更是证明了大数据产业在 ...

  4. Python/Java程序员面试必备常用问题解析与答案

    转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...

  5. Java程序员面试必备之深入理解自旋锁

    点关注,不迷路:[本人秃顶程序员]持续更新Java架构相关技术及资讯热文!!! 简单回顾一下CAS算法 CAS算法 即compare and swap(比较与交换),是一种有名的无锁算法.无锁编程,即 ...

  6. java程序员必学_Java入门基础学习,成为一个Java程序员的必备知识

    引言 众所周知,Java是一种面向对象的编程语言.您可以在Windows操作系统上编写Java源代码,而在Linux操作系统上运行编译后的字节码,而无需修改源代码. 数据类型 Java 有 2 种数据 ...

  7. **Java程序员装机必备软件**

    工作效率类 在进行某一类工作时,提高你的工作效率 文件版本控制软件:Git 下载地址:https://www.git-scm.com/download/ 简介:说出来你可能不信,我是用Git来管理我的 ...

  8. JAVA程序员装机必备软件攻略

    因为自己的电脑年久失修,今天用tomcat跑了同时跑了两个项目电脑卡死不动了,于是用了单位的电脑,装了一下午软件,晚上终于成功的将项目跑了起来,我把我自己的软件攻略分享给大家,希望可以帮助你们更加有效 ...

  9. 查看git是否安装_Java程序员的必备Linux运维技能-安装git

    查看yum库中的版本: $ yum info git 查看是否安装 $ git --version 安装依赖包 $ yum install -y curl-devel expat-devel gett ...

最新文章

  1. 使用React Hooks你可能会忽视的作用域问题
  2. 用 Hadoop 进行分布式并行编程, 第 1 部分 基本概念与安装部署
  3. ArcMap上发布地图服务前,“将图形转为要素的选项”时报“输出名称无效”错误...
  4. 饥荒联机版连不上服务器_饥荒联机版无法连接klei服务器及刷不出服务器解决方法一览...
  5. Tips--动态申请内存的优势
  6. 封装动态数组类Array
  7. OpenCV精进之路(十五):特征检测和特征匹配方法汇总
  8. c++调用python接口_PySpark源码解析,教你用Python调用高效Scala接口,搞定大规模数据分析...
  9. 2.6.PHP7.1 狐教程-【PHP运算符】
  10. 3月28日服务器维护,4月28日服务器例行维护公告
  11. from表单的重置按钮(reset)不能重置隐藏input框的值
  12. bigWigToBedGraph格式转换
  13. 360浏览器中页面打开如何默认极速模式
  14. Windows——卸载MinGW的方法
  15. C#上位机编程常用方法
  16. 修改谷歌浏览器Google Chrome缓存位置
  17. Openface 入门
  18. NSACE|如何正确地维护企业的网络信息安全?
  19. 天翼云:改变数据时代的存储与分享
  20. SpringMVC流程图

热门文章

  1. sqlserver 2008 多表更新
  2. (原) Data Blocks, Extents, and Segments
  3. 网站的domain不在首页的原因
  4. CentOs7安装apache以及遇到的问题
  5. 【Java】单词倒序输出
  6. 桌面支持--打印机任务取消不了
  7. javamail读取并发送完整的html页面
  8. VS.NET 学习方法论——我的VS.NET学习之旅
  9. 关于没有commit的死锁问题
  10. android Android项目构建过程