如何写出干净的 Git Commit

如何写出干净的 Git Commit
最新回答
最美的风信子¢

2026-02-07 15:48:05

写出干净的 Git Commit 不仅能提升代码库的可读性,还能为项目维护、协作和自动化工具提供便利。以下是基于 AngularJS 规范的详细指南:

一、Commit 结构规范

干净的 Commit 由三部分组成,用空行分隔:

<header><body><footer>1. Header(必填)

格式:<类型>(<作用域>): <主题>示例:

feat(core): add new command 'Upload' to UIfix: update GET headers (#142)
  • 类型(8种常见类型):

    build: 构建系统或外部依赖变更(如 gulp、npm)。

    ci: CI 配置或脚本修改(如 GitHub Workflow)。

    docs: 仅文档更新。

    feat: 新功能。

    fix: 错误修复。

    perf: 性能优化。

    refactor: 代码重构(非修复或新增功能)。

    test: 测试用例补充或修正。

  • 作用域:根据项目模块自定义(如 core、server、router),参考 AngularJS 的

    作用域列表
    。

  • 主题:

    使用祈使句、现在时态(如 add 而非 added)。

    首字母小写,末尾不加句号或逗号。

    长度建议不超过 50 字符。

2. Body(必填,除非类型为 docs)
  • 详细描述变更背景和动机,用现在时态。
  • 每行不超过 72 字符,段落间空一行。
  • 示例:The `Upload` command enables users to submit files via the UI.This change refactors the existing API handler to support multipart form data.
3. Footer(可选)
  • 用于关联 Issue 或破坏性变更说明。
  • 示例:Closes #142BREAKING CHANGE: The `GET /data` endpoint now requires authentication.
二、实践建议
  1. 使用工具辅助

    通过 git commit -m 直接写简单 Commit,但复杂变更建议用编辑器详细编写。

    工具推荐:

    Commitizen
    :交互式生成规范 Commit。

    Conventional Changelog
    :自动生成变更日志。

  2. 团队统一规范

    在项目根目录添加 CONTRIBUTING.md 说明 Commit 规则。

    通过 Git Hook(如 commit-msg)校验格式(示例脚本):

    #!/bin/shif ! head -1 "$1" | grep -qE '^(feat|fix|docs|style|refactor|test|chore)([a-z-]+):'; then echo "Commit 格式错误!示例:feat(core): add new feature" >&2 exit 1fi
  3. 避免的常见错误

    模糊描述:"fix bug" → 应写明修复内容(如 fix: resolve null pointer in user API)。

    混合变更:一个 Commit 包含多个不相关修改(如功能+格式调整)。

三、示例对比? 不规范的 CommitFixed login
  • 问题:未说明类型、作用域,主题不清晰。
? 规范的 Commitfix(auth): prevent brute force attacks on loginAdded rate limiting to the login endpoint (5 attempts/minute).Updated error messages to avoid exposing system details.Closes #123四、为什么重要?
  1. 自动化工具支持

    semantic-release 根据 Commit 类型自动生成版本号(如 feat 触发 minor 版本)。

  2. 代码审计与回溯

    清晰的 Commit 帮助快速定位问题(如 git bisect 结合 fix 类型过滤)。

  3. 团队协作效率

    一致的格式减少沟通成本(如 BREAKING CHANGE 标记需通知依赖方)。

通过遵循上述规范,你的 Git 历史将变得如 AngularJS 仓库般清晰易读,为项目长期维护奠定基础。