艺术化你的 Git 提交:类型与图标(全网最全)的实践准则

3 阅读14分钟

引言

在软件开发的协作过程中,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 分支到 release
  • sync: 同步 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: 撤销并清理不需要的临时更改

最佳实践建议

  1. 保持提交信息简洁明了:标题建议不超过 50 个字符,详细描述可以在正文部分展开
  2. 使用英文或中文保持一致:团队内统一使用一种语言
  3. 提交内容要具体:避免使用模糊的词语,如"修改"、"更新"等
  4. 关联 Issue:如果有相关的 Issue,在提交信息中引用
  5. 批量提交时的处理:如果是批量提交,可以不指定具体模块名称
  6. 使用 emoji 符号:适当使用 emoji 符号可以使提交记录更加直观
  7. 定期清理提交历史:对于不重要的提交,可以使用 git rebase 进行整理
  8. 团队约定:团队内应该约定一套统一的提交规范,并在 README 中说明

总结

规范的 Git 提交信息是团队协作的重要基石,通过使用统一的类型和图标,可以使提交记录更加清晰、专业,提高团队的沟通效率和代码质量。掌握 Git 提交的艺术,让你的代码变更更加规范、易懂。