Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范

commit message格式都包括三部分:Header,Body和Footer

<type>(<scope>): <subject>

<body>

<footer>

Header是必需的,Body和Footer则可以省略

1.1 Header

  1. Type(必需)

    type用于说明git commit的类别,允许使用下面几个标识。

    • feat:新功能(Feature)

      "feat"用于表示引入新功能或特性的变动。这种变动通常是在代码库中新增的功能,而不仅仅是修复错误或进行代码重构。

    • fix/to:修复bug。这些bug可能由QA团队发现,或由开发人员在开发过程中识别。

      • fix关键字用于那些直接解决问题的提交。当创建一个包含必要更改的提交,并且这些更改能够直接修复已识别的bug时,应使用fix。这表明提交的代码引入了解决方案,并且问题已被立即解决。
      • to关键字则用于那些部分处理问题的提交。在一些复杂的修复过程中,可能需要多个步骤或多次提交来完全解决问题。在这种情况下,初始和中间的提交应使用to标记,表示它们为最终解决方案做出了贡献,但并未完全解决问题。最终解决问题的提交应使用fix标记,以表明问题已被彻底修复。
    • docs:文档(Documentation)

      “docs” 表示对文档的变动,这包括对代码库中的注释、README 文件或其他文档的修改。这个前缀的提交通常用于更新文档以反映代码的变更,或者提供更好的代码理解和使用说明。

    • style: 格式(Format)

      “style” 用于表示对代码格式的变动,这些变动不影响代码的运行。通常包括空格、缩进、换行等风格调整。

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

      “refactor” 表示对代码的重构,即修改代码的结构和实现方式,但不影响其外部行为。重构的目的是改进代码的可读性、可维护性和性能,而不是引入新功能或修复错误。

    • perf: 优化相关,比如提升性能、体验

      “perf” 表示与性能优化相关的变动。这可能包括对算法、数据结构或代码实现的修改,以提高代码的执行效率和用户体验。

    • test:增加测试

      “test” 表示增加测试,包括单元测试、集成测试或其他类型的测试。

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

      “chore” 表示对构建过程或辅助工具的变动。这可能包括更新构建脚本、配置文件或其他与构建和工具相关的内容。

    • revert:回滚到上一个版本

      “revert” 用于回滚到以前的版本,撤销之前的提交。

    • merge:代码合并

      “merge” 表示进行代码合并,通常是在分支开发完成后将代码合并回主线。

    • sync:同步主线或分支的Bug

      “sync” 表示同步主线或分支的 Bug,通常用于解决因为合并而引入的问题。

  2. Scope(可选)

    scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

    例如修改了Dao或者Controller,则可以添加表示这些范围受到影响,这有助于更清晰地理解提交的变更影响范围。例如:

    feat(Controller): 添加用户登录功能
    

    这个提交消息中,Controllerscope,表示这次提交影响了控制层。

    fix(DataAccess): 修复数据查询逻辑
    

    这个提交消息中,DataAccessscope,表示这次提交影响了数据访问层。

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

  3. Subject(必需)

    subject是 commit 目的的简短描述,不超过50个字符。规范如下:

    • 以动词开头,使用第一人称现在时,比如change,而不是changedchanges
    • 第一个字母小写
    • 结尾不加句号(.

    例如:

    feat(UserAuth): implement user authentication
    

    这个提交消息中,implement user authenticationsubject,简洁明了地描述了引入用户认证功能的目的。

    fix(Validation): correct input validation logic
    

    这个提交消息中,correct input validation logicsubject,清晰地说明了修复输入验证逻辑的目的。

1.2 Body

Body 部分是对本次 commit 的详细描述,可以分成多行。Body编写有两个注意点。

  1. 使用第一人称现在时,比如使用change而不是changedchanges。这有助于使描述更加直观和连贯,增强可读性。
  2. 应该说明代码变动的动机,以及与以前行为的对比。 Body 部分不仅仅是描述代码的变动,还应该解释为什么进行这个变动,以及与之前的代码行为相比有哪些改进。这有助于其他开发者更好地理解代码变更的背后动机和意图。

1.3 Footer

Footer 部分只用于两种情况。

  1. 不兼容变动

    如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法。

  2. 关闭 Issue

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

    Closes #234
    

    也可以一次关闭多个 issue 。

    Closes #123, #245, #992
    

1.4 示例

  • 添加用户配置文件编辑功能

    feat(UserProfile): add user profile editing feature
    
    This commit introduces a new feature that allows users to edit their profiles
    directly from the user interface. The motivation behind this change is to
    enhance user interaction and provide a more seamless experience.
    
    Previously, users had to navigate to a separate editing page to update their
    profile information. With this new feature, users can now make changes
    efficiently from their profile page, eliminating unnecessary steps in the
    workflow.
    
    Changes included in this commit:
    - Added a new 'Edit Profile' button on the user profile page.
    - Implemented frontend components for profile editing.
    - Updated backend API to handle profile updates securely.
    
    By streamlining the profile editing process, we aim to improve overall user
    satisfaction and make our application more user-friendly. This enhancement is
    in response to user feedback, addressing the need for a more intuitive and
    accessible way to modify profile details.
    
    Closes #234
    
  • 纠正输入验证逻辑

    fix(Validation): correct input validation logic
    
    This commit addresses an issue related to input validation logic in the
    application. Previously, the validation process was not handling certain edge
    cases correctly, leading to unexpected behavior in specific scenarios.
    
    To resolve this issue, the validation logic has been revised to properly
    handle various input scenarios. This ensures that user input is thoroughly
    validated, reducing the likelihood of errors in the application.
    
    The changes made in this commit include:
    - Correcting boundary checks for user input.
    - Improving error messages for better user guidance.
    
    These adjustments align with our commitment to delivering a robust and
    reliable application experience.
    
    Closes #123
    
  • 优化数据库查询

    refactor(DataAccess): optimize database queries
    
    In this commit, we have refactored the data access layer to optimize database
    queries and improve overall system performance. The existing query structure
    was identified as a bottleneck during performance testing, leading to longer
    response times.
    
    Changes made in this commit:
    - Reorganized database queries to reduce redundant operations.
    - Utilized database indexing for faster data retrieval.
    
    By optimizing database queries, we expect to see a significant improvement in
    system responsiveness and user experience.
    
    Closes #456
    

2 git commit 工具

2.1 commitizen

Commitizen是一个强大的工具,用于撰写合格的 Git 提交消息。使用 Commitizen 可以帮助团队遵循统一的提交消息规范,使提交历史更加清晰和易读。

首先,通过以下命令全局安装 Commitizen:

npm install -g commitizen

然后,在项目目录里,运行下面的命令,使其支持 Angular 的 Commit message 格式。

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

这个命令会配置项目,使其支持 Angular 规范的 Commit Message。在执行命令时,你可以选择其他预定义的规范或者创建自定义规范。

之后,当你执行 git commit 命令时,将其替换为 git cz。此时,Commitizen 将引导你通过一个交互式的界面,以生成符合规范的 Commit Message。

img

在这个交互式界面中,你可以选择提交的类型(feat、fix、docs 等)、影响的范围(scope)、简短的描述(subject)以及其他相关信息。通过这种方式,可以确保提交消息符合规范,并提供了更多的上下文信息,便于他人理解变更的目的。

使用 Commitizen 和规范化的提交消息格式,有助于提高代码库的可读性,方便生成自动化的变更日志,并促使开发者更注重写出清晰、明确的提交消息。

2.2 commitlint

commitlint是一个用于检查提交消息是否符合指定规范的工具。它可以帮助团队确保 Git 提交消息的一致性和规范性,尤其是当项目采用类似 Angular Commit Message Conventions 的规范时。

  1. 安装 Commitlint

    首先,你需要安装 commitlint 及其相关的配置和规则。通常,@commitlint/config-conventional 是与 Angular 规范兼容的配置。

    npm install --save-dev @commitlint/config-conventional @commitlint/cli
    
  2. 配置 Commitlint

    在项目根目录下创建 commitlint.config.js 文件,并添加如下内容:

    module.exports = {
      extends: ['@commitlint/config-conventional'],
    };
    

    这个配置文件使用了 @commitlint/config-conventional 中预定义的规则,确保符合常见的提交规范。

  3. 配置Git钩子

    你可以使用 Husky 钩子工具来在提交前运行 commitlint。首先,安装 Husky:

    bashCopy code
    npm install --save-dev husky
    

    然后,在 package.json 中添加以下配置:

    jsonCopy code
    "husky": {
      "hooks": {
        "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
      }
    }
    

    这样配置后,每次提交前都会自动运行 commitlint 检查提交消息是否符合规范。

3 生成Change log

如果你的所有 Commit 都符合 Angular 格式,那么发布新版本时, Change log 就可以用脚本自动生成(例1,例2)。

在这里插入图片描述

生成的文档包括以下三个部分。

  • New features(新特性)
  • Bug fixes(bug修复)
  • Breaking changes(重大变更)

每个部分都会罗列相关的 commit ,并且有指向这些 commit 的链接。当然,生成的文档允许手动修改,所以发布前,你还可以添加其他内容。

conventional-changelog 就是生成 Change log 的工具,运行下面的命令即可。

npm install -g conventional-changelog
cd my-project
conventional-changelog -p angular -i CHANGELOG.md -w

上面命令不会覆盖以前的 Change log,只会在CHANGELOG.md的头部加上自从上次发布以来的变动。

如果你想生成所有发布的 Change log,要改为运行下面的命令。

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

为了方便使用,可以将其写入package.jsonscripts字段。

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}

以后,直接运行下面的命令即可。

npm run changelog

这个自动化流程不仅简化了 Change log 的生成过程,还确保了记录项目变更的一致性和准确性。生成的文档会按照新特性、bug 修复和重大变更等分类,方便用户快速了解每个版本的变更情况。

4 参考资料

  1. 如何规范你的Git commit?—阿里云开发者
  2. Commit message 和 Change log 编写指南—阮一峰的网络日志

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaFX(其他控件02)(综合运用)

小技巧 图片控件的使用:Image/ImageViewnew ImageView(new Image(url,宽,高,true,true))--绝对路径: file:D:\\图片\\6.jpg --相对路径: src里面建了个文件夹 images/1.png滑块&#xff1a;Slider show(true) major(10) getValue() 保留2位小数&#xff1a;String.format(&q…

浙大恩特客户资源管理系统 fileupload.jsp 任意文件上传

一、漏洞描述 杭州恩软信息技术有限公司&#xff08;浙大恩特&#xff09;提供外贸管理软件、外贸客户管理软件等外贸软件&#xff0c;是一家专注于外贸客户资源管理及订单管理产品及服务的综合性公司。 浙大恩特客户资源管理系统中的fileupload.jsp接口存在安全漏洞&#xf…

VS Code画流程图:draw.io插件

文章目录 简介快捷键 简介 Draw.io是著名的流程图绘制软件&#xff0c;开源免费&#xff0c;对标Visio&#xff0c;用过的都说好。而且除了提供常规的桌面软件之外&#xff0c;直接访问draw.io就可以在线使用&#xff0c;堪称百分之百跨平台&#xff0c;便捷性直接拉满。 那么…

【python后端】- 初识Django框架

Django入门 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大家一起学习成长&#xff01; 文章目录 Django入门…

SpringBoot的Data开发篇:整合JDBC、整合MybatisMP,YAML文件加密的实现,数据项目监控平台的使用和实现

SpringBoot整合JDBC 实现步骤&#xff1a; 导pom文件坐标 除springboot启动器和test坐标外&#xff0c;还需要导入spring jdbc和mysql的坐标 <dependencies><!--Spring JDBC--><dependency><groupId>org.springframework.boot</groupId><art…

【fast2021论文导读】 Learning Cache Replacement with Cacheus

文章:Learning Cache Replacement with Cacheus 导读摘要: 机器学习的最新进展为解决计算系统中的经典问题开辟了新的、有吸引力的方法。对于存储系统,缓存替换是一个这样的问题,因为它对性能有巨大的影响。 本文第一个贡献,确定了与缓存相关的特征,特别是,四种工作负载…

JSP运行环境搭建

将安装JSP引擎的计算机称作一个支持JSP的Web服务器。这个服务器负责运行JSP&#xff0c;并将运行结果返回给用户。 JSP的核心内容之一就是编写JSP页面,JSP页面是Web应用程序的重要组成部分之一。一个简单Web应用程序可能只有一个JSP页面,而一个复杂的Web应用程序可能由许多JSP…

CnosDB 狂欢!全面支持 Helm 部署,轻松搞定你的分布式时序数据库!

大家好&#xff01;今天有个热辣新闻要和大家分享——CnosDB 狂欢时刻来啦&#xff0c;全面支持 Helm 部署&#xff01;如果你是物联网、工业互联网、车联网或者IT运维的粉丝&#xff0c;那你绝对不能错过这个重磅消息&#xff01; CnosDB Helm Chart 究竟是啥&#xff1f; 别…

网络通讯基础

Socket Socket是应用层与TCP/IP协议簇通信的中间软件抽象层&#xff0c;它是一组接口。Socket通常用于实现客户端和服务器之间的通信。它允许客户端应用程序与服务器应用程序建立连接&#xff0c;并通过网络传输数据。 Socket包含了网络通讯必须的5种信息 Socket例子 { 协议: …

计算机毕业设计 基于Vue篮球联盟管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

vue:实现顶部消息横向滚动通知

前言 最近有个需求&#xff0c;是在系统顶部展示一个横向滚动的消息通知。需求很简单&#xff0c;就是消息内容从右往左一直滚动。 效果如下&#xff1a; 因为我的需求很简单&#xff0c;功能就这样。如果有什么其他需求&#xff0c;可以再继续修改。 代码 使用 <noti…

《深入理解计算机系统》书籍学习笔记 - 第二课 - 位,字节和整型

Lecture 02 Bits,Bytes, and Integer 位&#xff0c;字节和整型 文章目录 Lecture 02 Bits,Bytes, and Integer 位&#xff0c;字节和整型Byte 字节位操作布尔代数集合的表现形式和操作C语言的逻辑操作 位移操作整型数值范围无符号与有符号数值无符号与有符号在C中 拓展和截断拓…

2023年【电工(初级)】考试内容及电工(初级)复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电工&#xff08;初级&#xff09;考试内容是安全生产模拟考试一点通总题库中生成的一套电工&#xff08;初级&#xff09;复审模拟考试&#xff0c;安全生产模拟考试一点通上电工&#xff08;初级&#xff09;作业手…

C++语言的广泛应用领域

目录 1. 系统级编程 2. 游戏开发 3. 嵌入式系统 4. 大数据处理 5. 金融和量化分析 6. 人工智能和机器学习 7. 网络和通信 结语 C是一种多范式编程语言&#xff0c;具有高性能、中级抽象能力和面向对象的特性。由Bjarne Stroustrup于1979年首次设计并实现&#xff0c;C在…

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计

电路综合-基于简化实频的SRFT集总参数切比雪夫低通滤波器设计 6、电路综合-基于简化实频的SRFT微带线切比雪夫低通滤波器设计中介绍了使用微带线进行切比雪夫滤波器的设计方法&#xff0c;在此对集总参数的切比雪夫响应进行分析。 SRFT集总参数切比雪夫低通滤波器综合不再需要…

SpringBootWeb案例——Tlias智能学习辅助系统(3)——登录校验

前一节已经实现了部门管理、员工管理的基本功能。但并没有登录&#xff0c;就直接访问到了Tlias智能学习辅助系统的后台&#xff0c;这节来实现登录认证。 目录 登录功能登录校验(重点)会话技术会话跟踪方案一 Cookie&#xff08;客户端会话跟踪技术&#xff09;会话跟踪方案二…

Django(三、数据的增删改查、Django生命周期流程图)

文章目录 一、 基于ORM进行的CURDuser_list&#xff1a;作为主页使用路由文件urls.py配置如下&#xff1a;add.html&#xff1a;用于新增用户的数据页add页面视图函数如下:edit.html&#xff1a;修改数据的页面那么来总结一下上序所操作所用到的内容。 导入已存在的表其方式有两…

某手游完整性校验分析

前言 只是普通的单机手游&#xff0c;广告比较多&#xff0c;所以分析处理了下&#xff0c;校验流程蛮有意思的&#xff0c;所以就分享出来了 1.重打包崩溃处理 样本进行了加固&#xff0c;对其dump出dex后重打包出现崩溃 ida分析地址发现为jni函数引起 利用Xposed直接替换…

Java学习

Java的三大版本 Write Once、Run Anywhere JavaSE:标准版&#xff08;桌面程序,控制台开发…) JavaME:嵌入式开发(手机,小家电…) JavaEE: E企业级开发(web端&#xff0c;服务器开发…) JDK : Java Development Kit&#xff0c;Java开发者工具&#xff0c;在JRE之上扩充了一些…

算法进阶指南图论 通信线路

通信线路 思路&#xff1a;我们考虑需要升级的那条电缆的花费&#xff0c;若其花费为 w &#xff0c;那么从 1 到 n 的路径上&#xff0c;至多存在 k 条路径的价值大于 w &#xff0c;这具有一定的单调性&#xff0c;当花费 w 越大&#xff0c;我们路径上价值大于 w 的花费会越…