Conventional Commits

Summary: Conventional Commits 是一种广泛使用的提交消息规范, 旨在通过标准化的格式提高提交信息的可读性、可维护性, 并支持自动化工具 (如生成 CHANGELOG、语义化版本控制等).


本文由 deepseek-r1 辅助生成.

Conventional Commits 核心格式

提交消息的格式为:

1
2
3
<type>[optional scope]: <subject>
[optional body]
[optional footer]

1. 类型 (Type)

类型说明
feat新增功能 (对应语义化版本的 minor)
fix修复 Bug (对应语义化版本的 patch)
docs文档更新 (如 README、注释等)
style代码样式调整 (不影响逻辑的格式修改, 如空格、缩进等)
refactor代码重构 (既不修复 Bug 也不新增功能的结构性修改)
perf性能优化
test测试代码更新 (单元测试、集成测试等)
build构建工具或依赖更新 (如 Webpack、npm 等)
ciCI 配置修改 (如 GitHub Actions、Travis 等)
chore其他杂项修改 (不涉及代码或文档的改动, 如清理临时文件)
revert回滚之前的提交

2. 作用域 (Scope, 可选)

  • 描述修改的影响范围 (如模块、组件、文件等), 用括号包裹:
1
2
feat(login): add OAuth2 support
fix(api): handle null response

3. 主题 (Subject)

  • 简短描述 (不超过 50 字符), 使用祈使语气 (如 “add” 而非 “added”):
1
docs: update installation guide

4. 正文 (Body, 可选)

  • 详细说明修改内容和动机, 与主题用空行隔开:
1
2
3
4
fix: prevent memory leak in data processing

- Add cleanup logic for event listeners
- Update error handling in async functions
  • 关联 Issue: 关闭的问题或任务 (如 Closes #123)
  • 破坏性变更: 用 BREAKING CHANGE: 标记重大变更 (触发语义化版本的 major 版本) :
1
2
3
feat: remove deprecated API

BREAKING CHANGE: The `oldMethod()` is no longer supported.

完整示例

1
2
3
4
5
6
7
feat(auth): add password reset endpoint

- Add POST /auth/reset-password endpoint
- Send email notification on reset request

Closes #45
BREAKING CHANGE: Remove deprecated `resetByUsername` method

扩展规范 (Angular 风格)

许多团队基于 Angular Commit Guidelines 扩展, 例如:

  • ci: 持续集成配置
  • build: 构建系统
  • perf: 性能优化
  • revert: 回滚提交

自定义规范 (服务于博客)

在个人博客场景中, 大部分提交可能确实围绕内容创作文档维护展开. 如果觉得 docs 类型过于笼统, 可以基于 Conventional Commits 的灵活性和你的实际需求, 自定义更细分的类型. 以下是一些针对博客优化的类型建议:


自定义类型建议

类型适用场景
post发布新文章 (替代 feat, 专用于内容创作)
update更新已有文章 (如补充段落、修正过时信息)
meta元数据修改 (如调整文章分类、标签、SEO关键词等)
seoSEO 优化 (如添加 Alt 文本、优化标题、调整 sitemap)
media媒体文件更新 (新增/替换图片、视频、音频等)
fix修正错误 (如文章中的技术错误、死链修复等)
style排版或样式调整 (如 Markdown 格式、代码高亮、CSS 美化)
translate翻译内容 (新增或更新多语言版本)
refactor内容重构 (重新组织文章结构, 优化逻辑流)
chore维护性任务 (如更新依赖、清理冗余文件)

使用示例

1. 发布新文章

1
post: add article about quantum computing basics

或带作用域 (如分类):

1
post(physics): introduce quantum entanglement

2. 更新现有文章

1
update: add code example to CSS animation guide

3. 调整标签/分类

1
meta: add 'AI' tag to GPT-4 article

4. SEO 优化

1
seo: optimize meta description for homepage

5. 媒体文件管理

1
media: replace header image with WebP format

扩展建议

  1. 保持类型简洁:

    避免过度细分 (如 image/video 可统一为 media), 否则会增加维护成本.

  2. 结合作用域 (Scope):

    用作用域标记文章分类、技术栈等, 增强可读性:

    1
    2
    
    update(react): migrate class component to hooks
    fix(linux): correct permission command in tutorial
  3. 在 README 中记录规范:

    在博客仓库的文档中明确自定义类型, 便于协作 (示例) :

    1
    2
    3
    4
    5
    6
    
    ## 提交规范
    - `post`: 新文章
    - `update`: 更新旧文
    - `meta`: 标签/分类调整
    - `seo`: 搜索引擎优化
    ...

与标准 Conventional Commits 的对比

标准类型博客场景替代类型优势
docspost, update明确区分新内容创作与旧内容更新
featpost避免将文章发布与技术功能新增混用
stylestyle保留, 用于代码或排版美化
chorechore保留, 用于维护任务

何时仍应使用 docs

如果博客包含非文章类文档 (如项目说明、API 文档) , 可保留 docs 类型:

1
docs: update contribution guidelines

使用 emoji

在 commit 消息前加入 emoji 可能会帮助你更快的了解信息.1

vscode 插件.

References

0%