git commit 标签规范
2025-11-03 本文已影响0人
K891V
使用 git commit -m "<message>" 时,为了快速区分提交内容,使用如下规范。
统一格式为 标签: 描述内容 (注意冒号为英文字符,并且后有空格)。
例如:git commit -m "docs: 补充接口文档的参数说明"
| 标签 | 含义 / 使用场景 | 示例 |
|---|---|---|
feat |
新增功能(面向用户的新能力) | feat: 新增购物车批量结算功能 |
fix |
修复 bug(解决代码运行时的错误) | fix: 修复手机号格式验证失败的问题 |
docs |
文档更新(仅修改注释、README 等) | docs: 补充接口文档的参数说明 |
style |
代码风格调整(不影响功能,如格式美化) | style: 统一调整缩进为4个空格 |
refactor |
代码重构(既不是新增功能也不是修 bug) | refactor: 拆分用户服务类为多个模块 |
perf |
性能优化(提升代码运行效率) | perf: 优化商品列表查询的SQL语句 |
test |
测试相关(新增 / 修改测试用例) | test: 补充登录功能的单元测试 |
build |
构建 / 部署相关(依赖、配置修改) | build: 升级webpack版本到5.x |
chore |
其他杂项(不涉及代码逻辑的小改动) | chore: 清理项目中无用的临时文件 |
自用极简
| 标签 | 含义 / 使用场景 | 示例 |
|---|---|---|
feat |
新增功能(面向用户的新能力) | feat: 新增购物车批量结算功能 |
fix |
修复 bug(解决代码运行时的错误) | fix: 修复手机号格式验证失败的问题 |
refactor |
代码修改(既不是新增功能也不是修 bug) | refactor: 拆分用户服务类为多个模块 |
docs |
文档更新(仅修改注释、README 等) | docs: 补充接口文档的参数说明 |
补充说明:
-
描述内容尽量简洁(建议不超过 50 字),清晰说明 “做了什么”,避免模糊表述(如 “修改了代码”“优化了一下”)。
-
一次提交尽量只对应一个标签(如同时改了功能和文档,建议拆成两次提交)。
-
规范的核心是 “见名知意”,帮助团队快速理解提交目的,无需过度纠结标签分类,优先保证一致性。
利用 hooks 校验 commit 的格式
可以通过 Git 钩子(Hook) 实现对 commit 信息的强制校验,确保提交内容必须包含指定标签(如 feat:、fix: 等)。核心思路是利用 Git 的 commit-msg 钩子,在提交信息写入前执行脚本检查,若不符合规范则阻止提交。
文件路径:
[项目目录]/.git/hooks/commit-msg
注意:在hooks目录下有commit-msg.sample文件,可以复制一份文件,直接删除.sample。并且文件无后缀名。
#!/bin/sh
# 定义允许的标签(与之前的规范对应)
ALLOWED_TYPES="feat|fix|docs|style|refactor|perf|test|build|chore"
# 获取提交信息文件(Git 会将提交信息暂存到这个文件中)
COMMIT_MSG_FILE=$1
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
# 正则匹配:检查提交信息是否以 "标签: " 开头(标签必须是允许的类型,冒号后必须有空格)
if ! echo "$COMMIT_MSG" | grep -qE "^($ALLOWED_TYPES):\s"; then
echo "❌ 提交信息不符合规范!必须以以下标签开头:"
echo " feat: 新增功能"
echo " fix: 修复 bug"
echo " docs: 文档更新"
echo " style: 代码风格调整"
echo " refactor: 代码重构"
echo " perf: 性能优化"
echo " test: 测试相关"
echo " build: 构建/部署相关"
echo " chore: 其他杂项"
echo " 格式示例:feat: 新增购物车功能"
exit 1 # 非 0 状态会阻止提交
fi
实现效果:
image.png