# AI Commit Message 生成器教程：粘贴 git diff 生成规范提交信息

> 来源：工具派（https://gjupai.com） 原文页面：https://gjupai.com/tutorial/ai-commit-message-generator-guide

## 工具简介

**AI Commit Message 生成器**是工具派推出的一款面向开发者的提交信息辅助工具：把 `git diff` 的输出粘贴进来，它就会自动解析变更了哪些文件、新增和删除了多少行代码，并据此智能推断提交类型，一次性生成多条规范的 Commit Message 候选，每条候选都附带可以直接粘贴到终端执行的完整 `git commit` 命令。工具支持 **Conventional Commits、GitHub 风格、简洁风格、Angular 风格**四种提交规范，还能补充 scope、关联 Issue、标记破坏性变更，生成的整个过程在浏览器本地完成，diff 内容不会上传到服务器，打开即用、安全省心。

## 功能亮点

- **粘贴 diff 即生成**：直接粘贴 `git diff` 命令的输出（最多 50000 字符），自动解析 `diff --git` 行识别全部变更文件，并统计新增、删除的行数。
- **智能识别提交类型**：根据 diff 内容与文件名中的关键词自动判断提交类型——feat、fix、docs、refactor、perf、style、test、chore 八种类型各有专属彩色标签，一眼区分。
- **四种提交风格**：Conventional Commits（默认）、GitHub 风格、简洁风格、Angular 风格，覆盖个人项目到团队规范化的常见场景。
- **一次最多 5 条候选**：候选数量可选 1 / 3 / 5，第一条使用推断出的类型，其余候选依次轮换其他类型，方便对比挑选。
- **scope 自动推断**：「提交范围 scope」留空时，自动取变更文件中出现次数最多的第一级目录作为 scope，无需手动填写。
- **Issue 关联与破坏性变更**：填写 Issue 编号后正文自动追加「关闭 #123」；勾选「破坏性变更」会在 scope 后加 `!` 并在正文追加 BREAKING CHANGE 说明。
- **一键复制命令**：每条候选可单独复制完整 `git commit` 命令或仅复制主题行，底部还有「复制全部命令」一次带走所有候选。

## 参数说明

| 参数 | 说明 | 默认值 / 取值范围 |
| --- | --- | --- |
| git diff | `git diff` 命令的输出内容，引擎据此解析变更文件、统计行数并推断提交类型 | 必填，最多 50000 字符，右下角实时显示字符数 |
| 风格 | 生成提交信息所遵循的格式规范 | Conventional Commits（默认）/ GitHub 风格 / 简洁风格 / Angular 风格 |
| 候选数量 | 一次生成的候选条数 | 1 / 3（默认）/ 5 |
| 提交范围 scope | 提交范围，填入后以 `type(scope):` 形式出现在主题中 | 可选，留空时自动取变更文件最多的第一级目录 |
| 关闭 Issue | 本次提交关联并关闭的 Issue 编号 | 可选，如 `#123` / `PROJ-456` |
| 历史上下文（可选） | 粘贴最近几条 commit log，生成结果会附加「参考历史风格」提示，便于保持团队风格一致 | 可选，取前 3 条 |
| 破坏性变更 | 勾选后在 scope 后加 `!`，并在正文追加 BREAKING CHANGE 说明 | 默认不勾选 |

## 使用步骤

1. **打开工具页面**：左侧是输入与参数区（git diff 文本框、风格、候选数量、scope、Issue 等），右侧是「候选列表」结果区，页面顶部显示当前可用额度，无需安装任何软件。

![AI Commit Message 生成器主界面：顶部为工具标题与会员额度提示条；左侧输入区包含 git diff 多行](article/202607/1783996879249_6912.png)

2. **粘贴 git diff**：在终端执行 `git diff` 或 `git diff --cached`，把输出完整粘贴到左侧「git diff」文本框中，右下角会实时显示已粘贴的字符数。

3. **选择风格与候选数量**：「风格」下拉默认为 Conventional Commits，团队协作推荐保持默认；「候选数量」默认为 3 条，想多对比几个角度可以选 5 条。

4. **补充可选信息（可选）**：按需填写「提交范围 scope」（如 `src/api`，留空则自动推断）、「关闭 Issue」（如 `#123`），或在「历史上下文」中粘贴最近几条 commit log 作为风格参考；若本次包含不兼容改动，记得勾选「破坏性变更」。

5. **点击生成**：点「生成 Commit Message」按钮，右侧候选列表会立即出现若干条候选，每条都带有彩色类型标签和主题，例如 `feat(src): 新增 功能`。

6. **查看详情并复制**：点「展开详情」可查看该候选的正文（变更文件列表、新增/删除行数统计等）；点「命令」复制完整 `git commit -m "主题" -m "正文"` 命令直接到终端执行，点「主题」只复制标题行，也可以点底部「复制全部命令」一次复制所有候选。

## 使用技巧

- **提交前先暂存再取 diff**：执行 `git add` 后用 `git diff --cached` 拿到的就是本次真正要提交的内容，粘进去生成的提交信息最准确。
- **scope 拿不准就留空**：工具会自动从变更文件中推断出现次数最多的第一级目录作为 scope，比随手填写更贴合实际改动位置。
- **想让类型推断更准**：类型是根据 diff 内容里的关键词判断的（如出现 fix、bug、修复 会判为 fix），diff 越完整，第一条候选的类型就越靠谱。
- **团队风格统一用「历史上下文」**：把最近几条 commit log 粘进去，生成结果会附上「参考历史风格」提示，提醒你对齐团队既有写法。
- **GitHub 风格自动带 Issue 编号**：选 GitHub 风格并填写 Issue 后，主题末尾会自动追加 `(#123)` 格式，符合 GitHub 的自动关联惯例。
- **主题超长会被截断**：主题行最多保留 72 字符，超出部分会以省略号收尾，如果候选主题被截断，说明改动范围可能太大，建议拆分提交。

## 常见问题

**Q1：支持什么格式的 diff 内容？**
支持标准 `git diff` 命令的输出。引擎通过解析其中的 `diff --git a/... b/...` 行来识别变更文件，通过 `+` / `-` 开头的行统计新增与删除行数。即使粘贴的内容里没有 `diff --git` 行也能生成候选，只是无法列出文件清单和推断 scope。

**Q2：提交类型（feat、fix 等）是怎么确定的？**
工具根据 diff 内容和文件名中的关键词自动匹配：出现 fix/bug/修复 判为 fix，test/测试 判为 test，doc/readme/文档 判为 docs，refactor/重构 判为 refactor，perf/性能 判为 perf，style/格式 判为 style，chore/ci/build/依赖 判为 chore，都不匹配时默认为 feat。第一条候选使用推断类型，其余候选依次轮换其他类型供你挑选。

**Q3：四种风格生成的结果有什么区别？**
Conventional Commits 和 Angular 风格生成 `type(scope): 主题` 格式并附正文；GitHub 风格不带 type 前缀，但会在主题末尾追加 `(#Issue号)`；简洁风格则只保留纯主题，最精炼。四种风格复制出的都是 `git commit -m "主题" -m "正文"` 形式的完整命令。

**Q4：「命令」和「主题」两个复制按钮有什么区别？**
「命令」复制完整可执行的 `git commit -m "..." -m "..."` 命令，粘贴到终端即可提交；「主题」只复制标题行，适合在 IDE 的提交框里使用。候选较多时还可以点底部的「复制全部命令」一次带走所有候选。

**Q5：我粘贴的代码 diff 会上传到服务器吗？**
不会。提交信息的生成完全在浏览器本地完成，只有使用额度的校验需要联网，diff 内容本身不会上传到任何服务器，可以放心用于公司内部项目。

**Q6：「提交范围 scope」不填会怎么样？**
留空时工具会自动推断：有多个变更文件时取出现次数最多的第一级目录（如 `src`），只有一个文件时取该文件的第一级目录或文件名前缀，生成的主题形如 `feat(src): ...`。

