前言

我们一般都使用 Git 进行项目代码管理,为了规范提交格式,即 Commit message,可以事先设置好 Commit message 规则。

例如强制要求 Commit message 开头必须是事先规定好的格式,在此我列举出几个常用的:

  1. Feat:
  2. Update:
  3. FixBug:
  4. Docs:
  5. Style:
  6. Refactor:
  7. Perfect:
  8. Test:
  9. 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

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

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

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

笔记
Git 钩子存放在 ./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

尝试提交符号、不符合格式的 commit

Note: 提交类型的描述和示例

编写 Commit Message 时参考

提交类型描述示例
Feat新功能Feat: 添加评论功能
Update现有功能更新Update: 提升页面加载速度
FixBug修复 bugFixBug: 解决支付页面崩溃问题
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 规则

阿里云的云效代码库设置 Commit message 规则