【知识整理】Git Commit Message 规范

一. 概述

前面咱们整理过 Code Review 一文,提到了 Review 的重要性,已经同过gitlab进行CodeReview 的方式,那么本文详细说明一下对CodeReivew非常重要的Git Commit Message 规范。

我们在每次提交代码时,都需要编写 Commit Message,否则是不允许提交的。书写好的 Commit Message 能大大提高代码维护的效率。避免开发人员在项目中群魔乱舞,搞得代码一团糟,搞的项目就被糟践了。且开发日后的维护,都将是灾难。

因此,编写Commit Message需要遵循一定的范式,内容应该清晰明了,指明本次提交的目的,便于追踪问题。往往在日常开发中由于缺少对Commit Message的约束,导致填写内容随意,可读性低亦难以维护。今天“知识整理”就带大家一起来学习下Commit Message约束,希望对大家的工作有所帮助,大家觉得好的话,不要忘记给点个赞!受人玫瑰,手有余香。

二. 约束Commit规范的目的

统一团队 Git commit Message约束标准,便于后续代码Code Review,版本发布等。

统一团队 Git 工作流,包括分支使用规则、TAG 规范、ISSUE 等。

提供更多的信息,指明本次提交的目的,便于追踪问题,方便排查与决策。

通过过滤关键字,可以进行问题快速定位。提高工作效率

通过工具方便快速生成必要的文档。

三. 规范详细说明

Commit Message 的格式

大致分为三个部分 (使用空行分割):

  1. 标题行:必填,描述主要修改类型和内容
  2. 主题内容:描述为什么修改,做了什么样的修改,以及开发的思路等等
  3. 页脚注释:说明 Breaking Changes(中断更改) 或 Closed Issues(已解决的问题)

每次提交,Commit Message 都包括三个部分:Header,Body 和 Footer。

# EN
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
# CH
<类型>[可选的作用域]: <描述>
// 空一行
[可选的正文]
// 空一行
[可选的脚注]

Commit Message 提示说明

# 标题行 类型(影响范围):50个字符以内,描述主要变更内容
# 空一行
# 主体内容:更详细的说明文本,建议72个字符以内。 需要描述的信息包括:
# * 为什么这个变更是必须的? 它可能是用来修复一个bug,增加一个feature,提升性能、可靠性、稳定性等等
# * 他如何解决这个问题? 具体描述解决问题的步骤
# * 是否存在副作用、是否会有风险? 
# 空一行
# 尾部:是需要的化可以添加一个链接到issue地址或者其它文档,或者是关闭了某个issue。

示例

// 示例1
fix(global):修复checkbox不能复选的问题
// 示例2 圆括号里的 common 为通用管理的名称
fix(common): 修复字体过小的BUG,将通用管理下所有页面的默认字体大小修改为 14px

1、格式拆解 Header

Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

Header 里 type 部分

type为必填项,用于指定commit的类型,约定了featfix两个主要type,以及docsstylerefactortestchore、五个特殊type其余type扩充buildperfcirevert,也可以根据公司特殊要求做对应的扩展。

主要:

  • init: 代码初始化
  • feat:新功能(feature)
  • fix:修复bug

特殊:

  • refactor:重构(代码重构时使用、不是新增功能,也不是修改bug的代码变动,代码重构,未新增任何功能和修复任何bug)
  • docs:文档(documentation)修改,只改动了文档相关的内容
  • style:格式(不影响代码含义的改动,例如去掉空格、改变缩进、增删分号)
  • test:添加测试或者修改现有测试
  • chore:构建过程或辅助工具的变动、不修改src或者test的其余修改

扩充:

  • build:改变构建流程,新增依赖库、工具、构造工具的或者外部依赖的改动,例如webpack,npm
  • perf:提高性能的改动
  • ci:自动化流程配置修改、与 CI(持续集成服务)有关的改动
  • revert:回滚到上一个版本,执行git revert打印的message

Header 里 scope

scope 也为选填项,用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同,格式为项目名/模块名。

如果你的修改影响了不止一个 scope,你可以使用*代替。

例如:global、common、http、* 、数据库等等,记得加上括号

Header 里 subject

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

示例:

feat(*): 添加网站主页静态页面这是一个示例,假设对点检任务静态页面进行了一些描述。这里是备注,可以是放BUG链接或者一些重要性的东西。

2、格式拆解 Body

Body 填写详细描述,主要描述改动之前的情况及为啥修改,对于小的修改不作要求,但是重大需求、更新等必须添加 body 来作说,可以分成多行进行详细说明。

填写要求:

  1. 要以动词开头,使用第一人称现在时,比如change,而不是changed或changes
  2. 第一个字母小写
  3. 结尾不加句号(.)

示例

# body: 对2个文件整体修改,解决这回答:
# *为什么需要进行此更改?
# *它是如何解决这个问题的?
# *是否有任何副作用?
# 初始提交

3、格式拆解 Footer

不兼容变动(break changes)

break changes 指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。

闭 Issue(affect issues)

affect issues 指明是否影响了某个问题。例如使用于的项目管理系统的唯一ID,在commit message中可以填写影响的jira_id,若要开启该功能需要先打通jiragitlab

四、Vscode 集成

首先需要去 Vscode 插件市场搜索 git-commit-plugin 并且进行安装。安装完之后可以使用组合键 Command + Shift + P 呼出 指令行,并键入指令 show git commit template 或者点击 git 插件栏上的小图标唤醒插件界面。根据自己当前提交所要表达的意义,选择对应的 type 类型去编写 commit 信息。


五、其他功能插件补充

1、commitizen插件

commitizen是一款可以交互式建立提交信息的工具,可以自动生成合格的commit message

$ npm install -g commitizen
# OR
$ yarn global add commitizen

在项目根目录下运行命令

$ commitizen init cz-conventional-changelog --save --save-exact

在提交的时候就可以使用 git cz 就可以根据提示,生成自动化的 commit message

使用commitizen时,首先通过上下键控制指向你想要的 type 类型,分别对应有上面提到的feat、fix、docs、perf等,然后会让你选择本次提交影响到的文件,后面会让你分别写一个简短的和详细的提交描述,最后会让你去判断本次提交是否是BREAKING CHANGE或者有关联已开启的issue。最后,当时查看提交历史时,你会看到这样的commit message:

2、validate-commit-msg插件

commitizen 可以保证自己本地的commit message规范,但是无法保证队友也是规范的,所以需要其他工具来检测队友的提交记录是否规范。使用validate-commit-msg 检查队友的commit message规范

#安装
$ npm install validate-commit-msg husky -D#添加package.json文件配置
"husky": {"hooks": {"commit-msg": "validate-commit-msg"}
}#自定义校验格式(可选)
#添加一个.vcmrc文件,配置对象如下:
{"types": ["feat", "fix", "docs", "style", "refactor", "perf", "test", "build", "ci", "chore", "revert"],"scope": {"required": false,"allowed": ["*"],"validate": false,"multiple": false},"warnOnFail": false,"maxSubjectLength": 100,"subjectPattern": ".+","subjectPatternErrorMsg": "subject does not match subject pattern!","helpMessage": "","autoFix": false
}#提交
#示例:git commit -m 'feat(main.js): 添加路由'

3、changelog插件

changelog是生成changelog的工具,在安装之前请确保安装Nodecommitizen

安装

$ npm install -g conventional-changelog 
#OR  
$ yarn global add conventional-changelog
$ npm install -g conventional-changelog-cli 
#OR  
$ yarn global add conventional-changelog-cli

1、conventional-changelog 安装

npm install -g conventional-changelog-cli
# 生成 CHANGELOG.md ,并覆盖掉以前的内容
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
# 生成所有发布的 Change log
conventional-changelog -p angular -i CHANGELOG.md -w -r 0

2、注意事项

conventional-changelog -p angular -i CHANGELOG.md -w

只能在命令行中 log 出 CHANGELOG.md 的内容,不会生成文件,如果要生成文件需要使用 conventional-changelog -p angular -i CHANGELOG.md -s 更多的 config 可以使用 conventional-changelog --help 查看

使用

1、执行以下指令检验上面两个工具是否安装成功

$ npm ls -g -depth=0

2、运行下面命令,使其支持Angular的Commit message格式

commitizen init cz-conventional-changelog --save --save-exact

注意: 因为commitizen工具是基于Node.js的

参考:前端知识点:git commit规范 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/266181.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会声会影2024出来了吗?

近年来&#xff0c;随着人们对于娱乐和创意的需求不断增长&#xff0c;视频编辑软件也越来越受到大众的关注。其中&#xff0c;会声会影是一款备受欢迎的视频编辑软件&#xff0c;许多用户都在关注其新版本——会声会影2024。 然而&#xff0c;目前并没有官方宣布会声会影2024的…

如何制作一款建材商城微信小程序

现在&#xff0c;微信小程序已经成为了很多企业和商家开展线上业务的重要渠道之一。对于建材商城而言&#xff0c;制作一款专属的微信小程序可以帮助企业更好地展示产品、提供服务&#xff0c;并增加销售额。下面将介绍如何制作一款建材商城微信小程序。 首先&#xff0c;登录【…

C#,动态规划(DP)金矿问题(Gold Mine Problem)的算法与源代码

1 金矿问题&#xff08;Gold Mine Problem&#xff09; 给定一个N*M尺寸的金矿&#xff0c;每个点都有一个非负数表示当前点所含的黄金数目&#xff0c;最开始矿工位于第一列&#xff0c;但是可以位于任意行。矿工只能向右&#xff0c;右上&#xff0c;右下三个方向移动。问该…

solidity编程

一.Solidity 简介 Solidity 是⼀种⽤于编写以太坊虚拟机&#xff08; EVM &#xff09;智能合约的 编程语⾔。我认为掌握 Solidity 是参与链上项⽬的必备技 能&#xff1a;区块链项⽬⼤部分是开源的&#xff0c;如果你能读懂代码&#xff0c;就可以 规避很多亏钱项⽬。…

javaweb学习(day04-XML)

一、介绍 1 官方文档 地址: https://www.w3school.com.cn/xml/index.asp 2 为什么需要 XML 需求 1 : 两个程序间进行数据通信需求 2 : 给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去读取它应当监听的端口号、还有连接数据库的用户名…

php基础学习之错误处理(其一)

一&#xff0c;错误处理的概念 错误处理指的是系统(或者用户)在执行某些代码的时候&#xff0c;发现有错误&#xff0c;就会通过错误处理的形式告知程序员&#xff0c;俗称报错 二&#xff0c;错误分类 语法错误&#xff1a;书写的代码不符合 PHP 的语法规范&#xff0c;语法错…

Qt Android sdk配置报错解决

使用的jdk8总是失败&#xff0c;报错command tools run以及platform sdk等问题。后来主要是设置jdk版本为17&#xff0c;就配置生效了。Android sdk路径可以选用Android Studio自带的&#xff0c;但是也要在Qt中点击“设置SDK”按钮做必要的下载更新等。 编译器这里会自动检测到…

ODOO12设置收发邮件服务器教程

一、设置-技术 二、设置–技术–发件服务器 信息填写完整后&#xff0c;点击‘测试连接’&#xff0c;若提示成功&#xff0c;则发件服务器设置成功。 三、设置–技术–收件服务器 四、设置–参数–系统参数 修改之前的email系统参数&#xff1a; mail.catchall.alias: 收件服…

300分钟吃透分布式缓存(拉钩教育总结)

开篇寄语 开篇寄语&#xff1a;缓存&#xff0c;你真的用对了吗&#xff1f; 你好&#xff0c;我是你的缓存老师陈波&#xff0c;可能大家对我的网名 fishermen 会更熟悉。 我是资深老码农一枚&#xff0c;经历了新浪微博从起步到当前月活数亿用户的大型互联网系统的技术演进…

代码随想录算法训练营 Day29 | LeetCode491.递增子序列、LeetCode46.全排列、LeetCode47.全排列 II

LeetCode491.递增子序列 该题强调与之前的题目的不同在于给的数组顺序不能变换&#xff0c;这就导致了不能用used数组判断与前一个元素是否相同的方法进行去重的操作&#xff0c;因此该题加入了一个set&#xff0c;不和前一个元素比&#xff0c;而是判断之前有没有处理过这个值…

网工内推 | 项目经理,软考证书优先,最高26K,加班补贴

01 龙盈智达 招聘岗位&#xff1a;项目经理 职责描述&#xff1a; 1 根据业务员需求&#xff0c;完成生态圈下账簿中心系统的开发管理工作。 2 负责账簿中心实施过程中的需求调研分析、方案设计、开发测试、系统上线等工作的计划、组织协调、沟通等方面管理工作。 3 完成系统核…

golang学习6,glang的web的restful接口传参

1.get传参 //get请求 返回json 接口传参r.GET("/getJson/:id", controller.GetUserInfo) 1.2.接收处理 package controllerimport "github.com/gin-gonic/gin"func GetUserInfo(c *gin.Context) {_ c.Param("id")ReturnSucess(c, 200, &quo…

RabbitMQ的常见工作模式

Work queues 工作队列模式 模式说明 通过Helloworld工程我们已经能够构建一个简单的消息队列的基本项目&#xff0c;项目中存在几个角色:生产 者、消费者、队列&#xff0c;而对于我们真实的开发中 &#xff0c;对于消息的消费者通过是有多个的。 比如在实现用户注册功能时&…

社区团购小程序有哪些功能 怎么制作开通

​随着社区团购的兴起&#xff0c;越来越多的人开始关注社区团购小程序的制作。社区团购小程序是一种基于移动互联网的新型购物方式&#xff0c;通过小程序&#xff0c;用户可以在社区内方便地参与团购活动&#xff0c;享受到更优惠的价格和更方便的购物体验。下面具体介绍社区…

Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器

目录 &#x1f981; 一. 前言&#x1f981; 二. 探索过程2.1 安装2.2 配置 Monaco Editor2.3 编写 Monaco Editor 代码编辑器2.3.1 创建 Coding Editor 组件2.3.2 父组件使用 CodingEditor 组件 2.4 效果展示 三. 总结 &#x1f981; 一. 前言 各位好&#xff01;我是&#x1…

【分布式事务 XA模式】MySQL XA模式详解

MYSQL中的XA事务 写在前面1. XA事务的基本原理2. MySQL XA事务操作 写在前面 MySQL 的 5.0.3 版本开始支持XA分布式事务&#xff0c;并且只有innoDB存储引擎支持XA事务。 1. XA事务的基本原理 XA事务本质上是一种基于两阶段提交的分布式事务&#xff0c;分布式事务可以理解成…

R语言数学建模(二)—— tidymodels

R语言数学建模&#xff08;二&#xff09;—— tidymodels 文章目录 R语言数学建模&#xff08;二&#xff09;—— tidymodels前言一、示例数据集二、拆分数据集2.1 拆分数据集的常用方法2.2 验证集2.3 多层次数据2.4 其他需考虑问题 三、parsnip用于拟合模型3.1 创建模型3.2 …

redis启动错误

错误&#xff1a; Creating Server TCP listening socket 127.0.0.1:6379: bind: No error redis-server.exe redis.windows.conf redis-cli.exe shutdown auth "yourpassword"

嵌入式 Linux 下的 LVGL 移植

目录 准备创建工程修改配置修改 lv_drv_conf.h修改 lv_conf.h修改 main.c修改 Makefile 编译运行更多内容 LVGL&#xff08;Light and Versatile Graphics Library&#xff0c;轻量级通用图形库&#xff09;是一个轻量化的、开源的、在嵌入式系统中广泛使用的图形库&#xff0c…

配电房轨道式巡检机器人方案

一、应用背景 在变电站、配电房、开关站等各种室内变配电场所内&#xff0c;由于变配电设备的数量众多、可能存在各类安全隐患&#xff0c;为了保证用电的安全可靠&#xff0c;都要进行日常巡检。 但目前配电房人工巡检方式有以下主要问题&#xff1a; 巡检工作量大、成本高 …