引言
在软件开发的协作过程中,Git 提交信息是开发者之间沟通的重要桥梁。一个清晰、规范的提交信息不仅能帮助团队成员快速理解代码变更的内容和目的,还能提高代码审查的效率,方便后续的问题定位和项目维护。本文将详细介绍 Git 提交的类型与图标规范,帮助你掌握提交信息的艺术。
提交规范的基本结构
一个标准的 Git 提交信息应该包含以下几个部分:
类型图标 类型(模块名称): 标题
详细描述(可选)
- 描述本次提交的具体内容
- 说明为什么进行这个修改
- 如何解决问题(如果是修复 bug)
关联的 Issue(可选)
Closes #123
Related to #456
其中:
- 类型图标:对应提交类型的 emoji 符号,使提交记录更加直观
- 类型:如 feat、fix、docs 等,标识提交的性质
- 模块名称:括号内指定修改的模块,如 user、auth、api 等
- 标题:简要描述本次提交的内容,建议不超过 50 个字符
类型与图标的详细说明
1. 初始化与合并
init 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🎉 | :tada: | 初次提交 | 项目初始化时的第一个提交 |
使用示例:
🎉 init: 初始化项目仓库🎉 init: 创建前端项目结构🎉 init: 初始化后端服务
merge 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🔀 | :twisted_rightwards_arrows: | 合并分支 | 合并不同分支的代码 |
使用示例:
🔀 merge: 合并 feature/login 分支到 master🔀 merge: 合并 develop 分支到 releasesync: 同步 master 分支代码到 feature 分支
2. 功能相关
feat 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ✨ | :sparkles: | 引入新的功能 | 添加新的功能或特性 |
| ⚗ | :alembic: | 尝试新的东西 | 实验性的功能开发 |
| ⚗️ | :alembic: | 进行实验 | 实验性的功能开发 |
使用示例:
✨ feat(user): 添加用户注册功能✨ feat(api): 新增获取用户信息接口✨ feat(frontend): 添加首页轮播图功能⚗ feat(experimental): 尝试新的支付流程⚗️ feat(test): 实验性地添加测试功能
fix 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🚑 | :ambulance: | 关键补丁 | 紧急修复重要问题 |
| 🐛 | :bug: | 修复一个 bug | 修复一般性的 bug |
| 🩹 | :adhesive_bandage: | 简单修复非关键问题 | 小的、非关键的修复 |
| 🚨 | :rotating_light: | 修复编译器/linter 警告 | 修复代码检查工具的警告 |
| 💚 | :green_heart: | 修复 CI Build | 修复持续集成构建失败的问题 |
使用示例:
🚑 fix(core): 紧急修复支付流程中的崩溃问题🐛 fix(auth): 修复登录验证失败的问题🩹 fix(ui): 修复按钮样式问题🚨 fix(linter): 修复 ESLint 警告💚 fix(ci): 修复 GitHub Actions 构建失败
add 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 | |
|---|---|---|---|---|
| 🍱 | :bento: | 添加资源 | 添加静态资源、图片等 | |
| ✅ | :white_check_mark: | 增加测试 | 添加新的测试用例 | |
| ➕ | :heavy_plus_sign: | 增加一个依赖 | 添加新的依赖包 | |
| 📸 | :camera_flash: | 添加了一个快照 | 添加测试快照 | |
| 🦺 | :safety_vest: | 添加或更新与验证相关的代码 | 添加验证逻辑 | |
| 🧵 | :thread: | 添加或更新与多线程或并发相关的代码 | 添加并发处理逻辑 | |
| 🛂 | :passport_control: | 处理与授权、角色和权限相关的代码 | 添加权限管理逻辑 | |
| 🙈 | :see_no_evil: | 添加或更新 .gitignore 文件 | 更新忽略文件 | |
| 💡 | :bulb: | 在源代码中添加或更新注释 | 添加代码注释 | |
| 🌐 | :globe_with_meridians: | 国际化和本地化 | 添加多语言支持 | |
| 🔧 | :wrench: | 添加或更新配置文件 | 添加配置项 | |
| 💬 | :speech_balloon: | 添加或更新文本和文字 | 添加文本内容 | |
| 🔊 | :loud_sound: | 添加或更新日志 | 添加日志记录 | |
| 🥅 | :goal_net: | 捕获错误 | 添加错误处理 | |
| 📈 | :chart_with_upwards_trend: | 添加或更新分析或跟踪代码 | 添加数据分析逻辑 | |
| 📦️ | :package: | 添加或更新已编译的文件或包 | 添加打包文件 | |
| 🏷️ | :label: | 添加或更新类型 | 添加类型定义(gitee 无效) | |
| 👔 | :necktie: | 添加或更新业务逻辑 | 添加业务功能 | |
| 🩺 | :stethoscope: | 添加或更新运行状况检查 | 添加健康检查 | |
| 🧐 | :monocle_face: | 数据探索/检查 | 添加数据检查逻辑 |
使用示例:
🍱 add(assets): 添加首页轮播图资源✅ add(tests): 为用户登录功能添加单元测试➕ add(deps): 增加 axios 依赖用于 API 调用📸 add(snapshot): 添加组件测试快照🦺 add(validation): 添加表单验证逻辑💡 add(comments): 在核心模块添加详细注释🛂 add(auth): 处理用户角色和权限管理
del 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ➖ | :heavy_minus_sign: | 少一个依赖 | 用于移除依赖包 |
| 🔥 | :fire: | 删除代码或文件 | 用于删除不需要的代码或文件 |
| 🚩 | :triangular_flag_on_post: | 删除功能标志 | 用于管理功能标志 |
| 🗑️ | :wastebasket: | 弃用需要清理的代码 | 用于标记废弃代码 |
| 🛂 | :passport_control: | 移除权限相关逻辑 | 用于移除权限相关逻辑 |
| 🌐 | :globe_with_meridians: | 国际化和本地化 | 用于移除多语言支持 |
| 🔧 | :wrench: | 移除配置项 | 用于移除配置项 |
| 💡 | :bulb: | 删除注释 | 用于移除注释 |
| 🔇 | :mute: | 删除日志 | 用于移除日志记录 |
| 📦️ | :package: | 已编译的文件或包 | 用于移除打包文件 |
| ⚰️ | :coffin: | 删除死代码 | 用于清理无用代码 |
| 👔 | :necktie: | 添加或更新业务逻辑 | 用于移除业务功能 |
| 🧐 | :monocle_face: | 数据探索/检查 | 用于移除数据检查逻辑 |
使用示例:
➖ del(deps): 移除未使用的 lodash 依赖🔥 del(old): 删除废弃的旧代码🗑️ del(deprecated): 标记并清理废弃的用户服务⚰️ del(dead): 删除不再使用的支付模块
update 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ⬇️ | :arrow_down: | 降级依赖 | 降低依赖包版本 |
| ⬆️ | :arrow_up: | 升级依赖 | 升级依赖包版本 |
| 📌 | :pushpin: | 将依赖项固定到特定版本 | 锁定依赖版本 |
| 🔒️ | :lock: | 解决安全或隐私问题 | 修复安全漏洞 |
| 🔐 | :closed_lock_with_key: | 更新机密 | 管理密钥或凭证 |
| 🚩 | :triangular_flag_on_post: | 更新功能标志 | 管理功能开关 |
| 🦺 | :safety_vest: | 更新与验证相关的代码 | 更新验证逻辑 |
| 🧵 | :thread: | 更新与多线程或并发相关的代码 | 更新并发处理 |
| 🛂 | :passport_control: | 处理与授权、角色和权限相关的代码 | 更新权限管理 |
| 🙈 | :see_no_evil: | 更新 .gitignore 文件 | 更新忽略规则 |
| 🗃️ | :card_file_box: | 执行与数据库相关的更改 | 更新数据库结构 |
| 💡 | :bulb: | 在源代码中更新注释 | 更新代码注释 |
| 👽️ | :alien: | 由于外部 API 更改而更新代码 | 适配外部 API 变更 |
| 🌐 | :globe_with_meridians: | 国际化和本地化 | 更新多语言支持 |
| 🎨 | :art: | 改进代码的结构/格式 | 更新代码风格 |
| 🔖 | :bookmark: | Release / Version 标记 | 版本发布 |
| 🔧 | :wrench: | 更新配置文件 | 更新配置项 |
| 💩 | :poop: | 编写需要改进的坏代码 | 临时更新(需后续优化) |
| 💬 | :speech_balloon: | 更新文本和文字 | 更新文本内容 |
| 🔊 | :loud_sound: | 更新日志 | 更新日志记录 |
| 🥅 | :goal_net: | 捕获错误 | 更新错误处理 |
| 📈 | :chart_with_upwards_trend: | 更新分析或跟踪代码 | 更新数据分析 |
| ✏️ | :pencil2: | 修正错别字 | 更新文本错误 |
| 📦️ | :package: | 更新已编译的文件或包 | 更新打包文件 |
| 🏷️ | :label: | 更新类型 | 更新类型定义(gitee 无效) |
| 👔 | :necktie: | 更新业务逻辑 | 更新业务功能 |
| 🩺 | :stethoscope: | 更新运行状况检查 | 更新健康检查 |
| 🧐 | :monocle_face: | 数据探索/检查 | 更新数据检查 |
| ♿️ | :wheelchair: | 提高可访问性 | 更新无障碍功能 |
使用示例:
⬆️ update(deps): 升级 React 到 v18📌 update(deps): 固定 axios 版本到 1.6.0🔒️ update(security): 修复依赖包的安全漏洞🔖 update(release): 发布 v2.0.0 版本🌐 update(i18n): 添加新语言支持
3. 文档与代码风格
docs 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 📝 | :memo: | 添加或更新项目文档、README、API 文档等 | 更新项目文档、README、API 文档等 |
| 🚀 | :rocket: | 部署文档到线上或发布文档版本 | 部署文档到线上或发布文档版本 |
| 🔧 | :wrench: | 添加或更新配置文件的文档说明 | 添加或更新配置文件的文档说明 |
| ✨ | :sparkles: | 在文档中引入新功能的说明或文档结构优化 | 在文档中引入新功能的说明或文档结构优化 |
| ⚗ | :alembic: | 在文档中添加实验性内容或新的文档尝试 | 在文档中添加实验性内容或新的文档尝试 |
| ⚗️ | :alembic: | 在文档中进行实验性内容的说明或测试 | 在文档中进行实验性内容的说明或测试 |
使用示例:
📝 docs(readme): 更新项目 README,添加快速开始指南📝 docs(api): 更新 API 文档,添加新接口说明🚀 docs(deploy): 部署最新文档到 GitHub Pages🔧 docs(config): 更新配置文件的文档说明✨ docs(feature): 添加新功能的文档说明✨ docs(structure): 优化文档结构,添加新功能说明⚗ docs(experimental): 添加实验性功能的文档
style 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🎨 | :art: | 改进代码的结构/格式 | 代码格式化、空格调整、缩进修改等 |
| 💄 | :lipstick: | 代码风格优化 | 代码风格的统一和美化 |
| 📝 | :memo: | 修正拼写或注释 | 修正代码中的拼写错误或注释格式 |
| 🔧 | :wrench: | 代码格式化工具配置 | 配置代码格式化工具 |
| 🎯 | :dart: | 代码风格一致性 | 确保代码风格的一致性 |
| 🧹 | :broom: | 代码清理 | 清理代码中的冗余或无用部分 |
使用示例:
🎨 style: 统一代码缩进为 4 个空格💄 style: 优化代码风格,符合项目规范🧹 style: 清理代码中的冗余空行
4. 构建与重构
build 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🔧 | :wrench: | 构建系统、工具配置(最常用) | 构建系统、工具配置 |
| 🏗️ | :building_construction: | 架构、构建流程 | 架构、构建流程 |
| 📦 | :package: | 依赖管理、打包 | 依赖管理、打包 |
| ⚙️ | :gear: | 配置、设置 | 配置、设置 |
| 🔨 | :hammer: | 构建、编译 | 构建、编译 |
| 🚀 | :rocket: | 部署、发布 | 部署、发布 |
使用示例:
🔧 build: 配置 webpack 构建系统🏗️ build: 优化项目架构和构建流程📦 build: 更新依赖包版本⚙️ build: 修改构建配置文件🔨 build: 编译项目代码🚀 build: 部署项目到生产环境
refactor 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ♻️ | :recycle: | 重构代码 | 代码重构,不包括 bug 修复或功能新增 |
| 🚚 | :truck: | 移动或重命名资源 | 移动或重命名文件、路径、路由等 |
| 💥 | :boom: | 引入重大更改 | 引入破坏性更新或重大变更 |
| 🏗️ | :building_construction: | 进行体系结构更改 | 架构层面的更改(gitee 无效) |
| 🧱 | :bricks: | 与基础结构相关的更改 | 基础架构相关的更改 |
| 🎨 | :art: | 改进代码的结构/格式 | 代码风格或结构的优化 |
使用示例:
♻️ refactor(api): 重构 API 调用逻辑🚚 refactor: 移动用户模块到新目录💥 refactor(core): 重构核心模块,引入重大变更🏗️ refactor: 进行架构调整,优化系统设计🧱 refactor: 优化基础架构组件🎨 refactor: 统一代码风格和结构
5. 测试与性能
test 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 | |
|---|---|---|---|---|
| ✅ | :white_check_mark: | 增加测试 | 添加新的测试用例 | |
| 🧪 | :test_tube: | 添加失败的测试 | 添加预期会失败的测试(例如 TDD 中的先写失败测试) | |
| 🦺 | :safety_vest: | 添加或更新与验证相关的代码 | 添加或更新验证逻辑的测试 | |
| 👽️ | :alien: | 由于外部 API 更改而更新代码 | 因外部 API 变更而更新的测试 | |
| 📊 | :bar_chart: | 增加测试覆盖率 | 添加提高测试覆盖率的测试用例 | |
| 🛠️ | :toolbox: | 修复测试用例 | 修复失败的测试用例 | |
| ⚡ | :zap: | 优化测试性能 | 优化测试执行速度 | |
| 📝 | :memo: | 更新测试文档 | 更新测试相关的文档 | |
| 🔧 | :wrench: | 配置测试环境 | 配置或更新测试环境 | |
| 🎯 | :dart: | 添加新的测试目标或用例 | 添加新的测试目标或特定场景的测试用例 |
使用示例:
✅ test(auth): 为用户登录功能添加单元测试🧪 test(api): 添加失败的 API 测试,用于验证错误处理📊 test(coverage): 增加用户模块的测试覆盖率
perf 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ⚡️ | :zap: | 提高性能 | 一般性的性能优化 |
| 🚀 | :rocket: | 提升应用速度 | 显著提升应用运行速度的优化 |
| 📈 | :chart_with_upwards_trend: | 优化性能指标 | 改善可测量的性能指标 |
| 💨 | :wind_blowing_face: | 减少加载时间 | 优化页面或资源加载时间 |
| 🔋 | :battery: | 优化资源消耗 | 减少 CPU、内存等资源消耗 |
| 🧠 | :brain: | 优化算法效率 | 改进算法复杂度或效率 |
| 🌀 | :cyclone: | 优化循环和迭代 | 优化循环、迭代等重复操作 |
| 🎯 | :dart: | 针对性性能优化 | 特定场景或组件的性能优化 |
使用示例:
⚡️ perf: 提高整体应用性能🚀 perf: 提升首页加载速度🔋 perf: 优化内存使用,减少内存泄漏
6. 项目维护与 CI
chore 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 🔨 | :hammer: | 添加或更新开发脚本 | 添加或修改开发相关的脚本 |
| 🛠️ | :toolbox: | 维护开发工具 | 维护和更新开发工具 |
| 📦 | :package: | 管理依赖包 | 添加、更新或删除依赖包 |
| 🔧 | :wrench: | 配置项目设置 | 修改项目的配置文件 |
| 📚 | :books: | 更新项目文档工具 | 更新文档生成工具或配置 |
| 🔄 | :repeat: | 自动化脚本维护 | 维护和更新自动化脚本 |
| ⚙️ | :gear: | 调整项目配置 | 调整项目的各种配置项 |
| 🧹 | :broom: | 清理项目文件 | 清理项目中的临时文件或无用文件 |
| 🔗 | :link: | 修复依赖链接 | 修复依赖项之间的链接或引用 |
使用示例:
🔨 chore: 添加代码格式化脚本🛠️ chore: 更新开发工具版本📦 chore: 升级依赖包到最新版本
ci 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| 💚 | :green_heart: | 修复 CI Build | 修复 CI 构建失败的问题 |
| 🔄 | :repeat: | 配置 CI/CD 流水线 | 配置或更新 CI/CD 流水线 |
| 🚀 | :rocket: | 部署流程优化 | 优化部署流程 |
| 👷 | :construction_worker: | CI 构建配置 | 配置 CI 构建过程 |
| 📦 | :package: | 自动化打包流程 | 配置自动化打包流程 |
| 🔧 | :wrench: | CI 工具配置 | 配置 CI 相关工具 |
| ⚙️ | :gear: | 调整 CI 环境设置 | 调整 CI 环境的配置 |
| 📊 | :bar_chart: | CI 测试报告配置 | 配置 CI 测试报告 |
| 🔗 | :link: | 集成第三方 CI 服务 | 集成第三方 CI 服务 |
使用示例:
💚 ci: 修复 GitHub Actions 构建失败的问题🔄 ci: 配置新的 CI/CD 流水线🚀 ci: 优化部署流程,减少部署时间
7. 撤销与回退
revert 类型
| 图标 | Emoji 代码 | 含义 | 使用场景 |
|---|---|---|---|
| ⏪️ | :rewind: | 还原更改 | 回滚之前的提交,撤销已有的更改 |
| 🔄 | :repeat: | 回退到之前的版本 | 将代码库恢复到之前的特定版本 |
| ↩️ | :leftwards_arrow_with_hook: | 撤销更改,返回之前状态 | 撤销最近的更改,回到之前的状态 |
| 🔙 | :back: | 回到之前的提交状态 | 回到之前的某个提交状态 |
| 🗑️ | :wastebasket: | 撤销并删除不需要的更改 | 撤销并清理不需要的更改 |
使用示例:
⏪️ revert: 回滚上次提交的更改⏪️ revert: 撤销 #123 提交的功能更改🔄 revert: 回退到 v1.0.0 版本↩️ revert: 撤销最近的功能更改🔙 revert: 回到修复 bug 前的状态🗑️ revert: 撤销并清理不需要的临时更改
最佳实践建议
- 保持提交信息简洁明了:标题建议不超过 50 个字符,详细描述可以在正文部分展开
- 使用英文或中文保持一致:团队内统一使用一种语言
- 提交内容要具体:避免使用模糊的词语,如"修改"、"更新"等
- 关联 Issue:如果有相关的 Issue,在提交信息中引用
- 批量提交时的处理:如果是批量提交,可以不指定具体模块名称
- 使用 emoji 符号:适当使用 emoji 符号可以使提交记录更加直观
- 定期清理提交历史:对于不重要的提交,可以使用
git rebase进行整理 - 团队约定:团队内应该约定一套统一的提交规范,并在 README 中说明
总结
规范的 Git 提交信息是团队协作的重要基石,通过使用统一的类型和图标,可以使提交记录更加清晰、专业,提高团队的沟通效率和代码质量。掌握 Git 提交的艺术,让你的代码变更更加规范、易懂。