张芷铭的个人博客

Conventional Commits 通过标准化提交信息结构,让历史兼具可读性与机器可解析性,完美适配 SemVer。

官网:Conventional Commits

核心结构

1
2
3
4
5
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

必填:类型(type)和描述(description)

类型(type)

类型作用SemVer
feat新增功能MINOR
fix修复 bugPATCH
docs文档更新-
style代码格式(不影响逻辑)-
refactor重构(非新功能/非修复)-
perf性能优化-
test测试相关-
build构建相关-
ciCI 流程变更-
chore日常琐事-

范围(scope)

可选,用括号包裹,限定变更模块:

  • feat(parser): 添加日语支持
  • fix(api): 修复登录 bug

破坏性变更

对应 SemVer MAJOR 版本:

方式示例
类型后加 !feat!: 移除旧版登录接口
脚注声明BREAKING CHANGE: 登录接口路径变更为 /v2/login

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 基础功能
feat(lang): 添加日语支持

# 修复 bug 并关联 Issue
fix: 解决表单重复提交问题

通过添加请求 ID 过滤重复响应

Refs: #456

# 破坏性变更
feat!: 支持配置文件继承

BREAKING CHANGE: extends 字段用于继承配置

# 文档修正
docs: 修正 CHANGELOG 中的拼写错误

核心优势

  1. 自动化支撑:自动生成 CHANGELOG、计算版本号
  2. 协作效率:变更意图一目了然
  3. 流程联动:触发自动化构建、发布

常见问题

  • 初始开发阶段需要遵守吗? 需要,协作成员需通过提交信息了解变更
  • 类型大小写敏感吗? 不敏感,但建议团队保持一致(推荐小写)
  • 一个提交符合多种类型? 拆分提交,保持单一职责
  • 提交类型用错了怎么办? 合并前用 git rebase -i 编辑;已发布则无需修改

Comments