1. 引言

在多人协作的软件开发中,清晰、简洁的 Git 提交信息(Commit Message)对于团队沟通和项目维护至关重要。它不仅是代码变更的注解,更是项目的“历史日志”。

本文将介绍编写 Git 提交信息的最佳实践,包括结构规范、内容建议、常用格式(如 Conventional Commits)以及命令行操作技巧。

2. 提交信息基础

2.1 什么是提交信息?

在 Git 仓库中,每次我们提交代码变更时,都会附带一条信息,用于说明本次提交的目的和内容。这个信息就是提交信息(Commit Message)。

一个完整的提交信息通常包括:

  • 提交 ID(哈希值)
  • 提交人和时间
  • 提交信息正文

提交信息的核心作用是帮助其他开发者(包括未来的自己)快速理解这次提交做了什么、为什么这么做。

2.2 为什么提交信息很重要?

  • 有助于代码审查:清晰的信息让 reviewer 更容易理解变更逻辑
  • 方便问题追溯:通过 git blamegit log 可快速定位问题出处
  • 支持自动化工具:如自动生成 changelog、版本号更新等
  • 提升团队协作效率:避免因信息模糊导致的沟通成本

模糊或随意的提交信息会让代码历史变得难以维护。

3. 最佳实践

3.1 结构化提交信息

一个结构良好的提交信息通常包含三个部分:

<主题行>(Subject)

<正文描述>(Body)

<标签和引用>(Footer)
  • 主题行:简明扼要地说明变更目的,建议使用动词开头(如 Add、Fix、Update)
  • 正文描述:详细说明变更内容、背景和动机,可多行
  • 标签与引用:如变更类型(feat、fix)、关联的 Issue 编号等

📌 各部分之间用空行分隔,便于工具解析。

3.2 内容撰写建议

✅ 主题行写法

  • 使用命令式语气(Imperative Mood)
    Fixed bug with login flow
    Fix bug with login flow

  • 说明“为什么”而不是仅仅“做了什么”
    Add import_key() function
    Add support for users to import keys

✅ 正文描述写法

  • 解释变更的背景、动机和影响
  • 避免技术细节堆砌,聚焦在“为什么”和“做了什么”
  • 示例:
Currently, users can only use keys created within the platform. Adds the
import_key() function to allow the import of keys created externally.

3.3 50/72 规则

这是一个广泛接受的格式规范:

  • 50:主题行不超过 50 个字符
  • 72:正文每行不超过 72 个字符

📌 这个规则源于 Git 自身的历史提交规范(如 Linux kernel)和可读性考虑。Git 会在正文自动添加 4 个空格缩进,因此 72 字符 + 4 个缩进 = 76 字符,控制在 80 字符以内更易阅读。

3.4 Conventional Commits 规范

Conventional Commits 是一种结构化提交信息的轻量级规范,被许多自动化工具(如 semantic-release)广泛支持。

常见类型(Type)

类型 描述
feat 新功能
fix 修复 bug
docs 文档变更
style 代码格式、样式相关
refactor 重构,不改变行为
test 添加或更新测试
chore 日常维护,如依赖更新、配置变更等

提交格式

<type>(<scope>): <subject-description>

<description>

<BREAKING CHANGE or footer>

📌 示例:

feat(api): Add support to create coupons
chore!: Update Python version to use newer libs

More recent versions of important project libs no longer support Python
3.6. This has prevented us from using new features offered by such libs.
Add support for Python 3.12.

BREAKING CHANGE: drop support for Python 3.6

4. 命令行操作技巧

4.1 使用 -m 参数提交

适用于简单提交,也可用于结构化信息:

git commit -m "feat(auth): Add support for social login"

如果要添加描述:

git commit -m "feat(auth): Add support for social login" \
           -m "Allow users to log in using their social accounts like Google and Facebook."

4.2 使用默认编辑器提交

更推荐用于结构化提交:

git commit

Git 会打开默认编辑器(如 Vim、Nano),我们可以自由编写多行结构化信息。

设置默认编辑器:

git config --global core.editor "vim"

5. 总结

优秀的 Git 提交信息应具备以下特点:

✅ 使用结构化格式(主题 + 描述 + 标签)
✅ 使用命令式语气(Add、Fix、Refactor)
✅ 遵循 50/72 规则
✅ 包含变更动机和影响说明
✅ 推荐使用 Conventional Commits 格式
✅ 使用编辑器编写结构化信息更清晰

6. 结语

清晰的提交信息不仅是代码变更的记录,更是项目协作和维护的基石。通过遵循本文介绍的最佳实践,你可以显著提升 Git 提交的专业性和可读性,也能更好地支持自动化工具的使用。

从今天开始,认真写好每一行提交信息吧!


原始标题:Best Practices for Git Commit Message