Git提交规范及最佳实践
Git 提交规范通常是为了提高代码提交的可读性、可维护性和自动化效率(如生成 ChangeLog)。以下是常见的 Conventional Commits 规范,结合社区最佳实践总结而成:
1. 提交格式
每次提交的 commit message 应包含三部分:Header、Body 和 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 | 构建相关的修改(如打包工具、依赖库版本升级) |
ci | CI/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/问题描述
通过规范化的提交信息,可以:
-
提升代码审查效率。
-
自动化生成版本日志(ChangeLog)。
-
方便追踪代码变更历史。
-
支持语义化版本号(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 的兼容性问题 - 优化构建产物哈希生成策略
关键要点
-
动词使用:描述时用 "新增/修复/优化/调整" 等祈使动词
❌ 错误:"修复了XXX问题" → ✅ 正确:"修复XXX问题" -
长度控制:
-
Header 简明扼要(50 字内)
-
Body 每行不超过 72 字符
-
-
关联问题:明确标注关闭的 Issue(如
Closes #123) -
破坏性变更:必须用
BREAKING CHANGE:显式声明
实际使用中可根据团队需求调整规范细节,建议配合 Commitizen 工具实现交互式提交引导。
相关文章:
Git提交规范及最佳实践
Git 提交规范通常是为了提高代码提交的可读性、可维护性和自动化效率(如生成 ChangeLog)。以下是常见的 Conventional Commits 规范,结合社区最佳实践总结而成: 1. 提交格式 每次提交的 commit message 应包含三部分:…...
Ubuntu 常用命令行指令
1. 文件与目录操作 命令作用示例ls列出目录内容ls -l(详细列表)cd切换目录cd ~/Documentspwd显示当前目录路径pwdmkdir创建目录mkdir new_folderrm删除文件rm file.txtrm -r递归删除目录rm -r old_dircp复制文件cp file.txt backup/mv移动/重命名文件mv…...
Redis 分布式锁+秒杀异步优化
文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目,这里nginx使用轮询的方…...
Git_获取GitLab的token方法(访问令牌)
一、操作步骤 GitLab-获取token(访问令牌)主要步骤:以及相关截图 登录 GitLab 打开 GitLab 网站并登录你的账号。 进入用户设置 点击右上角头像 → Edit profile → 左侧菜单选择 Access Tokens。 创建 Token Token name: 输入名称&#…...
【生活相关-日语-日本-东京-留学生-搬家后或新入驻-水道局申请饮用水(1)-办理手续】
【生活相关-日语-日本-东京-搬家后-水道局申请饮用水-办理手续】 1、前言2、情况说明(1)他人代办(2)打电话(3)网络申请(4)你将会面临什么,主要步骤(5…...
【C语言】--- 预处理详解
预处理详解 1. 预定义符号2. define定义常量2. define 定义宏4. 带有副作用的宏参数5.宏替换的规则6. 宏和函数的对比7. # 和 \##7.1#运算符 7.2 \##运算符8. 命名约定9.#undef10.命令行定义11.条件编译12. 头文件的包含12.1 头文件被包含的方式12.1.1 头文件的本地包含12.1.2 …...
【Axure视频教程】标准金额格式转换
今天教大家在Axure制作标准金额格式转换的原型模板,具体效果可以参考下方视频,该教程从0开始制作,手把手教学,无论是新手小白还是有一定基础的同学,都可以学习的哦。 【视频教程——试看版】 【Axure教程】标准金额格…...
每日算法(双指针算法)(Day 1)
双指针算法 1.算法题目(移动零)2.讲解算法原理3.编写代码 1.算法题目(移动零) 2.讲解算法原理 数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp 双指针算法:利用数组下标来…...
微服务多模块构建feign项目过程与一些报错(2025详细版)
目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…...
性能测试-tomcat连接数
Tomcat 处理请求时,是需要 Connector 进行调度和控制的,Connector是Tomcat 处理请求的主干。 Connector 中有一个 accepf队列,当客户端向服务器发送http请求时,如果客户端与操作系统完成三次握手建立了连接,就将该连接放入accept队列,poller从队列中获取到链接后,从链接…...
【Django】框架-路由系统核心概念解析
1. 最基本路由关系 路由是URL地址与处理逻辑(视图函数)的对应关系。 本质:将用户请求的URL路径映射到具体的处理程序(如Django视图函数)。 示例: # urls.py urlpatterns [ path(home/, views.home_…...
C# 运行web项目
1、web项目直接点击顶部运行...
C++ 创龙UDP通讯demo
C 创龙UDP通讯demo #include <iostream> #include <vector> #include <string>static uint8_t checksum(uint8_t *buff,int size) {uint8_t ldr 0;for(int i 0;i<size;i){ldr ^ buff[i];}return ldr; }bool decode(uint8_t *inbuff,int inbuffsize,uin…...
深入讲解 CSS 选择器权重及实战
1. 权重计算规则详解 CSS 选择器的优先级由 三元组 (x, y, z) 决定,比较规则如下: 选择器类型权重值 (x, y, z)示例ID 选择器x 1#header → (1,0,0)类/伪类/属性y 1.active, :hover元素/伪元素z 1div, ::before 比较规则:从左到右逐级比…...
全网通emotn ui桌面免费吗?如何开机自启动
在智能设备的使用中,一款优秀的桌面系统能带来截然不同的体验。全网通Emotn UI桌面便是其中的佼佼者,它以完全免费的特性与卓越性能,成为众多用户的心头好。 其简洁美观的界面设计如同为设备换上"清新外衣",常用功能一…...
【AI模型学习】MAE——CV界的无监督预训练
文章目录 一、诞生背景1.1 自监督学习的趋势2.2 ViT 的出现 二、模型2.1 模型架构2.1.1 数据shape变化2.1.2 模型架构流程图2.1.3 PyTorch 代码示例(核心部分) 2.2 位置信息2.3 非对称的编码器-解码器结构2.4图片重构 三、实验3.1 主实验3.2 消融实验3.3…...
远方游子的归家记:模仿美食网页的制作与实现
前言 2023年的夏天,闲得无聊学了一个礼拜前端知识点。并根据所学知识点模仿制作了一篇网络上公开发布的关于家乡美食的文章。今天才想到有这个不错的案例可以分享出来,以供大家学习参考。 知识点简介 运用的知识点比较简单,常规的div盒子&…...
【消息队列kafka_中间件】三、Kafka 打造极致高效的消息处理系统
在当今数字化时代,数据量呈爆炸式增长,实时数据处理的需求变得愈发迫切。Kafka 作为一款高性能、分布式的消息队列系统,在众多企业级应用中得到了广泛应用。然而,要充分发挥 Kafka 的潜力,实现极致高效的消息处理&…...
element-ui colorPicker 组件源码分享
简单分享 colorPicker 颜色选择器组件源码,主要从以下三个方面: 1、colorPicker 组件页面结构。 2、colorPicker 组件属性。 3、colorPicker 组件事件。 一、组件页面结构。 二、组件属性。 2.1 value/v-model 绑定值属性,类型为 string…...
Git 学习笔记
这篇笔记记录了我在git学习中常常用到的指令,方便在未来进行查阅。此篇文章也会根据笔者的学习进度持续更新。 网站分享 Git 常用命令大全 Learn Git Branching 基础 $ git init //在当前位置配置一个git版本库 $ git add <file> //将文件添加至…...
安防监控视频管理平台EasyCVR助力建筑工地施工4G/5G远程视频监管方案
一、项目背景 随着城市建设的快速发展,房地产建筑工地的数量、规模与施工复杂性都在增加,高空作业、机械操作频繁,人员流动大,交叉作业多,安全风险剧增。施工企业和政府管理部门在施工现场管理上都面临难题。政府部门…...
Cursor Talk To Figma MCP 安装与配置指南
Cursor Talk To Figma MCP 安装与配置指南 1.项目基础介绍 Cursor Talk To Figma MCP 是一个开源项目,它实现了 Cursor AI 与 Figma 之间的 Model Context Protocol(MCP)集成。通过这个集成,Cursor 能够与 Figma 进行通信&#…...
设计模式之状态模式:优雅管理对象行为变化
引言 状态模式(State Pattern)是一种行为型设计模式,它允许对象在其内部状态改变时改变它的行为,使对象看起来似乎修改了它的类。状态模式将状态转移逻辑和状态相关行为封装在独立的状态类中,完美解决了复杂条件判断问…...
高性能内存kv数据库Redis
目录 引言 一.Redis相关命令详解及其原理 1.redis是什么? 2.redis中存储数据的数据结构都有哪些? 3.redis的存储结构(KV) 4.reidis中value编码 5.string的基本原理和相关命令 5.1基本原理 5.2基础命令 5.3string存储结构 …...
C 语言宏定义的新用法
// power on/off #define SPK_POWER_ON() {GPIO_SET_OUT(PT_SPK_EN, PB_SPK_EN);GPIO_SET_HIGH(PT_SPK_EN, PB_SPK_EN);} #define SPK_POWER_OFF() {GPIO_SET_OUT(PT_SPK_EN, PB_SPK_EN);GPIO_SET_LOW(PT_SPK_EN, PB_SPK_EN);}在 C 语言中,宏定义可以…...
性能优化实践
4.1 大规模量子态处理的性能优化 背景与问题分析 量子计算中的大规模量子态处理(如量子模拟、量子态可视化)需要高效计算和实时渲染能力。传统图形API(如WebGL)在处理高维度量子态时可能面临性能瓶颈,甚至崩溃(如表格中14量子比特时WebGL的崩溃)。而现代API(如WebGPU…...
使用wpa_cli和wpa_supplicant配置Liunx开发板的wlan0无线网
目录 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_supplicant 简介 1.2 wpa_cli 简介 1.3 它们之间的关系 2 启动wpa_supplicant 3 使用rz工具把wpa_cli命令上传到开发板 4 用wpa_cli配置网络 参考文献: 1 简单介绍下wpa_cli和wpa_supplicant 1.1 wpa_su…...
C++Cherno 学习笔记day19 [76]-[80] std::optional、variant、any、如何让C++及字符串运行得更快
b站Cherno的课[76]-[80] 一、如何处理OPTIONAL数据 std::optional二、单一变量存放多类型的数据 std::variant三、如何存储任意类型的数据 std::any四、如何让C运行得更快五、如何让C字符串更快 一、如何处理OPTIONAL数据 std::optional std::optional C17 数据是否存在是可选…...
【信息系统项目管理师】高分论文:论信息系统项目的整合管理(旅游景区导游管理平台)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文一、制定项目章程二、制订项目管理计划三、指导和管理项目工作四、管理项目知识五、监控项目工作六、实施整体变更控制七、结束项目或阶段论文 在国家《中国旅游“十三五”发展规划信息化专项规划的背景下…...
【项目日记(一)】-仿mudou库one thread oneloop式并发服务器实现
1、模型框架 客户端处理思想:事件驱动模式 事件驱动处理模式:谁触发了我就去处理谁。 ( 如何知道触发了)技术支撑点:I/O的多路复用 (多路转接技术) 1、单Reactor单线程:在单个线程…...
