Git提交规范及最佳实践

Git 提交规范通常是为了提高代码提交的可读性、可维护性和自动化效率(如生成 ChangeLog)。以下是常见的 Conventional Commits 规范,结合社区最佳实践总结而成:


1. 提交格式

每次提交的 commit message 应包含三部分:HeaderBody 和 Footer,格式如下:

复制

<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>
  • Header(必填):描述提交类型和简短说明。

  • Body(可选):详细说明修改内容(如动机、实现细节)。

  • Footer(可选):关联 Issue、描述破坏性变更(BREAKING CHANGE)等。


2. 提交类型(Type)

类型说明
feat新增功能(feature)
fix修复 Bug
docs文档更新(如 README、注释)
style代码样式调整(如空格、格式化,不改变逻辑)
refactor代码重构(既不修复 Bug 也不新增功能)
perf性能优化
test添加或修改测试用例
chore构建过程或辅助工具的变动(如依赖更新、CI 配置)
revert回滚之前的提交
build构建相关的修改(如打包工具、依赖库版本升级)
ciCI/CD 配置或脚本的修改

3. 规范细则

Header
  • <type>:必填,从上述类型中选择。

  • <scope>:可选,描述影响范围(如模块名、功能名),例如 feat(user)

  • <subject>:简明描述修改内容:

    • 使用祈使句(如 "Add" 而非 "Added" 或 "Adds")。

    • 首字母小写,结尾不加标点。

    • 长度建议不超过 50 字符

Body
  • 描述为什么修改如何修改,以及与之前行为的对比

  • 每行不超过 72 字符,避免自动换行问题。

Footer
  • 关联 Issue:如 Closes #123 或 Fixes #456

  • 破坏性变更:以 BREAKING CHANGE: 开头,描述不兼容的改动。


4. 提交示例

plaintext

复制

feat(auth): add OAuth2 login support- Integrate Google OAuth2 API
- Add login button componentCloses #123
BREAKING CHANGE: Remove deprecated login API endpoints.

plaintext

复制

fix(api): handle null response in user endpointWhen the user data is missing, return 404 instead of 500.Fixes #456

5. 工具支持

  • commitlint:校验提交信息是否符合规范。

  • husky:通过 Git 钩子自动触发校验。

  • standard-version:基于提交记录自动生成版本号和 ChangeLog。


6. 分支命名建议

  • 功能分支feature/描述性名称(如 feature/user-login

  • Bug 分支fix/问题描述(如 fix/login-error

  • 热修复分支hotfix/问题描述


通过规范化的提交信息,可以:

  1. 提升代码审查效率。

  2. 自动化生成版本日志(ChangeLog)。

  3. 方便追踪代码变更历史。

  4. 支持语义化版本号(Semantic Versioning)。

以下是一些符合中文 Git 提交规范的示例,涵盖不同场景:


示例 1:新增功能(feat

plaintext

复制

feat(订单): 新增支持支付宝支付方式- 添加支付宝 SDK 集成
- 创建支付结果回调处理逻辑
- 更新订单状态流转文档Closes #45

示例 2:修复 Bug(fix

plaintext

复制

fix(登录): 修复手机号验证码重复发送问题当用户频繁点击发送验证码按钮时,后端未正确校验时间间隔,
导致同一用户 1 秒内可发送多次请求。现已添加 60 秒冷却时间限制。Fixes #78

示例 3:文档更新(docs

plaintext

复制

docs(API): 更新用户模块接口文档- 补充 getUserInfo 接口的权限说明
- 修正 createUser 的请求体示例格式

示例 4:代码重构(refactor

plaintext

复制

refactor(购物车): 解耦商品价格计算逻辑将价格计算从 ShoppingCartService 移至独立的 PriceCalculator 类,
提高代码可测试性和可维护性。

示例 5:破坏性变更(BREAKING CHANGE

plaintext

复制

feat(配置): 重构环境变量加载方式- 废弃旧版 .env 文件格式
- 改用 YAML 格式配置文件BREAKING CHANGE: 必须将原有 .env 文件迁移至 config.yaml
Closes #112

示例 6:简单提交(无 Body/Footer)

plaintext

复制

style: 调整首页按钮间距

示例 7:性能优化(perf

plaintext

复制

perf(图片加载): 启用 WebP 格式压缩- 通过 CDN 自动转换图片为 WebP 格式
- 平均图片体积减少 65%

示例 8:回滚提交(revert

plaintext

复制

revert: 撤销 "feat: 实验性分页功能"该功能导致列表渲染性能下降超过 200ms,
需重新设计实现方案。This reverts commit 9a7b2d1c.

示例 9:测试相关(test

plaintext

复制

test(用户服务): 添加登录失败用例- 覆盖密码错误、账号锁定等场景
- 使用 Jest 模拟 Redis 服务

示例 10:构建工具(build

plaintext

复制

build: 升级 Webpack 至 5.75 版本- 修复 tree-shaking 对 lodash 的兼容性问题
- 优化构建产物哈希生成策略

关键要点

  1. 动词使用:描述时用 "新增/修复/优化/调整" 等祈使动词
    ❌ 错误:"修复了XXX问题" → ✅ 正确:"修复XXX问题"

  2. 长度控制

    • Header 简明扼要(50 字内)

    • Body 每行不超过 72 字符

  3. 关联问题:明确标注关闭的 Issue(如 Closes #123

  4. 破坏性变更:必须用 BREAKING CHANGE: 显式声明

实际使用中可根据团队需求调整规范细节,建议配合 Commitizen 工具实现交互式提交引导。

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

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

相关文章

Ubuntu中snap

通过Snap可以安装众多的软件包。需要注意的是&#xff0c;snap是一种全新的软件包管理方式&#xff0c;它类似一个容器拥有一个应用程序所有的文件和库&#xff0c;各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题&#xff0c;使应用程序之…

android studio 运行java main报错

运行某个带main函数的java文件报错 Could not create task :app:Test.main(). > SourceSet with name main not found. 解决办法&#xff1a;在工程的.idea/gradle.xml 文件下添加&#xff1a; <option name"delegatedBuild" value"false" /&g…

openssh离线一键升级脚本分享(含安装包)

查看当前的版本 [rootmyoracle ~]#ssh -V相关安装包下载地址 openssh下载地址&#xff1a;http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下载地址&#xff1a;https://www.openssl.org/source/zlib下载地址&#xff1a;http://www.zlib.net/今天演示从7.4升级…

Mac M1管理多个Node.js版本

目录 1. 使用 nvm (Node Version Manager) 1.1.安装 nvm 1.2.安装Node.js版本 1.3.查看已安装的node版本列表 1.4.使用特定版本的Node.js 1.5.查看当前使用的版本 2. 使用 fnm (Fast Node Manager) 2.1.安装 fnm 2.2.安装Node.js版本 2.3.查看已安装的版本 2.4.使用…

Unity中国战略调整简讯:Unity6下架 团结引擎接棒

Unity中国战略调整简讯&#xff1a;Unity6下架 团结引擎接棒 免费版 2025年4月9日 —— Unity中国宣布自即日起&#xff0c;中国大陆及港澳地区停止提供Unity 6及后续版本下载与服务&#xff0c;相关功能由国产引擎“团结引擎”承接。国际版2022 LTS及更早版本仍由Unity中国维护…

TestNG 单元测试详解

1、测试环境 jdk1.8.0 121 myeclipse-10.0-offline-installer-windows.exe TestNG 插件 org.testng.eclipse 6.8.6.20130607 0745 2、介绍 套件(suite):由一个 XML 文件表示,通过<suite>标签定义,包含一个或更多测试(test)。测试(test):由<test>定义&#xf…

C复习(主要复习)

指针和数组 指针数组是一个数组&#xff0c;数组的每个元素都是指针。它适用于需要存储多个指针的场景&#xff0c;如字符串数组。数组指针是一个指针&#xff0c;指向一个数组。它适用于需要传递整个数组给函数或处理多维数组的场景。 函数指针&#xff1a;函数指针的定义需要…

探索大语言模型(LLM):定义、发展、构建与应用

文章目录 引言大规模语言模型的基本概念大规模语言模型的发展历程1. 基础模型阶段&#xff08;2018年至2021年&#xff09;2. 能力探索阶段&#xff08;2019年至2022年&#xff09;3. 突破发展阶段&#xff08;以2022年11月ChatGPT的发布为起点&#xff09; 大规模语言模型的构…

5. k8s 之 pod原理与使用

Kubernetes Pod 原理详解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小调度单元&#xff0c;其部署方式分为 声明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 两种&#xff1a; (1) 声明式部署&#xff08;推荐&#xff09; 通过 YAML 文件定…

使用PyTorch实现目标检测边界框转换与可视化

一、引言 在目标检测任务中&#xff0c;边界框&#xff08;Bounding Box&#xff09;的坐标表示与转换是核心基础操作。本文将演示如何&#xff1a; 实现边界框的两种表示形式&#xff08;角点坐标 vs 中心坐标&#xff09;之间的转换 使用Matplotlib在图像上可视化边界框 验…

电影推荐及数据分析可视化系统(Python+Echarts+Mysql+Flask框架)

提升自己&#xff0c;掌握数据分析的能力&#xff0c;最快的方式就是实践&#xff01; 下面是对本项目的一些功能展示、介绍以及部分核心代码的展示,附项目系统展示的视频,制作不易如需完整代码后台私信我有偿获取! 一 、系统分析及功能介绍 1.系统分析 系统采用Python作为开发…

Android Jetpack Compose 高级开发核心技术

Android Compose 高级技术总结 1. 性能优化 1.1 状态管理优化 状态提升原则&#xff1a;将状态提升到共享的最近共同父组件derivedStateOf&#xff1a;当需要基于多个状态计算派生状态时使用 val scrollState rememberScrollState() val showButton by remember {derivedS…

Java堆结构深度解析:原理、实现与应用全指南

一、堆的核心概念体系 1. 堆的定义与性质 graph TBROOT((最大堆)) --> A[父节点 ≥ 子节点]ROOT --> B[完全二叉树结构]ROOT --> C[数组存储]ROOT --> D[快速获取极值] 2. 堆类型对比 类型特性典型应用场景最大堆父节点值 ≥ 子节点值获取前K大元素最小堆父节点…

SpringMVC学习(请求与响应。常见参数类型接收与响应。@RequestParam、@RequestBody的使用)(详细示例)

目录 一、请求与响应。(RequestMapping) &#xff08;1&#xff09;使用注解RequestMapping对业务模块区分。 StudentController。 TeacherController。 &#xff08;2&#xff09;Apifox请求与响应。 "/student/login"。 "/teacher/login"。 二、常见参数…

回溯算法+对称剪枝——从八皇后问题到数独问题(二)

引入&#xff1a; 本节我们进一步完善八皇后问题&#xff0c;学习剪枝、八皇后残局问题 进一步领会逻辑编程的概念&#xff0c;深入体会回溯算法&#xff0c;回顾上一节提到的启发搜索策略。 回顾&#xff1a; 八皇后问题&#xff1a;我们需要在一个空棋盘上放置 n 个皇后&a…

【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发

文章目录 前言流程1、安装、启动sshd2、配置一下允许root登录3、vscode中配置1、安装remote插件2、登录 **注意** 前言 有时候要在开发板中写一写代码&#xff0c;直接在终端中使用vim这种工具有时候也不是很方便。这里准备使用vscode去通过ssh远程连接泰山派去操作&#xff0…

【VsCode】设置文件自动保存

目录 一、前言 二、操作步骤 一、前言 VSCode中开启自动保存功能可以通过访问设置、修改settings.json文件、使用自动保存延迟功能来实现。这些方法能有效提升编程效率、避免数据丢失、实时同步更改。 二、操作步骤 在 Visual Studio Code (VS Code) 中设置自动保存功能非…

Adobe After Effects的插件--------Optical Flares之Options概述

Optical Flares插件的Options是对整个效果的组装和设置。点击该按钮会弹出一个组装室弹窗。 Options组装室就是对每个【镜头对象】进行加工处理,再将其组装在一起,拼凑成完整的光效。 接下来是我对组装室的探索: 面板 面板中有预览、堆栈、编辑和浏览按钮,其作用是调节窗…

如何用 esProc 补充数据库 SQL 的缺失能力

某些数据库 SQL 缺失必要的能力&#xff0c;通常要编写大段的代码&#xff0c;才能间接实现类似的功能&#xff0c;有些情况甚至要改用存储过程&#xff0c;连结构都变了。常见的比如&#xff1a;生成时间序列、保持分组子集、动态行列转换、自然序号、相对位置、按序列和集合生…

迷你世界脚本脚本常见问题

脚本常见问题 彼得兔 更新时间: 2024-05-22 17:54:44 在查阅开发者学院中的脚本API时&#xff0c;若有任何问题或建议&#xff0c;欢迎通过问卷进行反馈&#xff01;【点我填写问卷】 1.Block中的data在什么地方使用 data使用有具体需求,此处不建议开发者使用。开发者尽可能使…