前言
我们一般都使用 Git 进行项目代码管理,为了规范提交格式,即 Commit message,可以事先设置好 Commit message 规则。
例如强制要求 Commit message 开头必须是事先规定好的格式,在此我列举出几个常用的:
- Feat:
- Update:
- FixBug:
- Docs:
- Style:
- Refactor:
- Perfect:
- Test:
- Chore:
本文主要是讲通过 Git 钩子来强制执行 Commit message 规则,具体步骤如下。
步骤 1:进入 Git 项目
cd /path/to/your/project
步骤 2:创建钩子文件
在项目根目录下执行下面命令( .git 同级目录),创建 commit-msg 文件
mkdir -p .githooks
touch .githooks/commit-msg
chmod +x .githooks/commit-msg
命令解释:
mkdir -p .githooks
: 创建一个名为 .githooks 的目录touch .githooks/commit-msg
: 创建一个名为 commit-msg 的空文件chmod +x .githooks/commit-msg
: commit-msg 文件添加可执行权限

创建(或修改)钩子文件 - 1

创建(或修改)钩子文件 - 2
./project/.git/hooks/
目录下。默认情况下,这个目录里有一些示例文件(如 pre-commit.sample),但它们是未启用的。步骤 3:写入校验逻辑
在 ./.githooks/commit-msg
中添加以下代码(用 VS Code、Vim、其他编辑器修改):
#!/bin/bash
# 正则表达式
regex="^(Feat|Update|FixBug|Docs|Style|Refactor|Perfect|Test|Chore): .+"
# 获取提交信息
commit_message=$(cat "$1")
# 检查提交信息是否符合正则表达式
if ! [[ $commit_message =~ $regex ]]; then
echo " ERROR: Commit message 格式不正确!"
echo " 请使用以下格式之一,并确保冒号后有描述内容:"
echo " Feat: 添加新功能"
echo " Update: 修改现有功能"
echo " FixBug: 修复 bug"
echo " Docs: 更新文档"
echo " Style: 修改代码格式"
echo " Refactor: 代码重构"
echo " Perfect: 完善功能"
echo " Test: 添加测试"
echo " Chore: 其他修改"
exit 1
fi
步骤 3: 配置 Git 使用自定义钩子
git config core.hooksPath .githooks
步骤 4:测试
尝试提交不符合格式的 commit:
git commit -m "Update Readme.md"
尝试提交符合格式的 commit:
git commit -m "Update: Readme.md"

尝试提交符号、不符合格式的 commit
Note: 提交类型的描述和示例
编写 Commit Message 时参考
提交类型 | 描述 | 示例 |
---|---|---|
Feat | 新功能 | Feat: 添加评论功能 |
Update | 现有功能更新 | Update: 提升页面加载速度 |
FixBug | 修复 bug | FixBug: 解决支付页面崩溃问题 |
Docs | 仅修改文档 | Docs: 更新 API 文档 |
Style | 代码格式调整 | Style: 移除多余空格 |
Refactor | 代码重构(无功能变动) | Refactor: 重构订单模块 |
Perfect | 完善已有功能 | Perfect: 增加密码找回提示 |
Test | 测试相关 | Test: 添加用户注册单元测试 |
Chore | 构建/配置/工具 | Chore: 更新依赖库版本 |
Feat:(新功能)
描述:用于新增功能,影响产品或系统的新增能力。
示例:
Feat: 添加用户注册功能
Feat: 支持 OAuth 第三方登录
Feat: 增加购物车结算功能
Update:(更新)
描述:用于已有功能的改进或优化,但不涉及 bug 修复或代码重构。
示例:
Update: 优化首页加载速度
Update: 提升搜索引擎索引表现
Update: 改进用户资料编辑界面
FixBug:(修复 Bug)
描述:用于修复代码中的错误或缺陷。
示例:
FixBug: 修复无法保存用户设置的问题
FixBug: 解决登录时 500 错误
FixBug: 修正 iOS 设备上按钮错位的 bug
Docs:(文档)
描述:只修改了文档内容,如 README、API 文档、注释等。
示例:
Docs: 更新 API 使用说明
Docs: 补充开发环境搭建指南
Docs: 修正 README 中的错误链接
Style:(代码风格)
描述:调整代码格式、缩进、空格,但不影响功能。
示例:
Style: 统一代码缩进为 4 个空格
Style: 调整 CSS 代码格式
Style: 移除多余的 console.log
Refactor:(代码重构)
描述:对代码进行优化或重构,不影响现有功能。
示例:
Refactor: 优化数据库查询逻辑
Refactor: 统一错误处理机制
Refactor: 抽取重复代码到公共方法
Perfect:(功能完善)
描述:用于完善现有功能,但不是新功能。
示例:
Perfect: 完善订单详情页面交互
Perfect: 增强用户权限管理
Perfect: 增加表单输入的错误提示
Test:(测试)
描述:添加或修改测试代码(单元测试、集成测试等)。
示例:
Test: 添加用户登录单元测试
Test: 增加 API 的集成测试
Test: 修正测试数据问题
Chore:(杂项)
描述:对构建、配置、工具等的改动,不影响业务代码。
示例:
Chore: 升级 Webpack 到 5.0
Chore: 配置 ESLint 代码检查
Chore: 优化 Git 提交钩子
Note: 在线的代码管理工具设置 Commit message 规则
一般在线的代码管理工具(例如阿里云的云效代码库)会提供设置 Commit message 规则,一般是输入正则表达式:
^(Feat|Update|FixBug|Docs|Style|Refactor|Perfect|Test|Chore):\s.+$
// ^:匹配字符串的开始
// (Feat|Update|FixBug|Docs|Style|Refactor|Perfect|Test|Chore):匹配开头必须是提供的关键词之一
// ::关键词后必须紧跟一个冒号
// \s:冒号后必须有一个空格
// .+:后面必须有至少一个字符(保证提交信息不会为空)
// $:匹配字符串的结束

阿里云的云效代码库设置 Commit message 规则
感谢您的耐心阅读!来选个表情,或者留个评论吧!