Skip to content

一招降维打击:用 Git + AI 告别手写 Commit Message

还在为写 Commit Message 发愁?还在 git log 里看到一堆“update”、“fix”、“aaa” 想撞墙?今天教你一个组合拳,把 Git 和 AI 结合起来,从此 Commit Message 写得比谁都规范。

痛点:你每天都在踩的坑

你有没有经历过这种场景:

  1. 开发一个新功能,吭哧吭哧改了一堆文件
  2. 为了保险,每改一点就 git commit -m "wip" 或者 git commit -m "fix"
  3. 最后功能终于跑通了,回头看:十几个小 commit,信息全是垃圾
  4. 想合并成一个大 commit 好好写个总结,但又忘了自己改了啥

于是你开始:

  • 一个个文件翻,肉眼比对
  • 对着 git diff 发呆
  • 最后憋出一句 feat: 优化功能 了事

累不累?

TIP

根据 JetBrains 2024 年开发者报告,超过 60% 的开发者认为“写 Commit Message”是他们最不喜欢的 Git 操作之一。

解法:两步走,AI 帮你收尾

第一步:把多个 Commit 合并回工作区

假设你最近有 3 个小 commit,想一起处理:

方式一(一步到位,推荐):

bash
# 撤回最近 3 个 commit,改动直接回到工作区
git reset HEAD~3

方式二(分步理解):

bash
# 先回到暂存区
git reset --soft HEAD~3

# 再从暂存区退回工作区(必须!否则 git diff 看不到改动)
git restore --staged .

执行完后:

  • ✅ 所有 commit 被撤销
  • ✅ 所有改动完好无损地躺在工作区
  • ✅ 可以用 git diff 看到完整的变化

注意

git reset --softgit reset --mixed 的区别:

  • --soft:改动回到暂存区(此时 git diff 为空)
  • --mixed(默认,即 git reset):改动直接回到工作区(git diff 可见完整改动)

第二步:把 Diff 喂给 AI

bash
git diff > changes.txt

打开 changes.txt,全选复制,丢给 AI,附上这样一句话:

请根据以下 git diff 内容,生成一个规范的 git branch 名称及 commit message 提交信息,使用 Conventional Commits 格式(feat/fix/docs/style/refactor 等),中文描述,要包含主要改动点和影响范围。

AI 会给你输出类似下面的这样的东西,它包含两部分可直接复制执行的信息:

Git Branch

bash
git checkout -b feat/order-wechat-alipay-integration

Git Commit Message

bash
git commit -m "feat(订单模块): 接入微信支付和支付宝支付

- 新增 PaymentService 接口及微信/支付宝实现类
- 添加支付回调处理逻辑
- 订单状态机扩展:待支付 → 支付中 → 已支付
- 新增支付超时取消机制
- 补充相关单元测试"

完美! 比你手写详细十倍,还符合规范,而且 branch 和 commit 语义统一。

完整命令流(一键复制)

bash
# 1. 撤回最近 N 个 commit,改动回到工作区(N 改成你的数字)
git reset HEAD~3

# 2. 生成 diff 文件
git diff > changes.txt

# 3. 把 changes.txt 内容 + prompt 丢给 AI
#    → 拿到 branch 创建命令 + commit 提交命令

# 4. 一键执行 AI 返回的两条命令
git checkout -b <AI生成的branch>
git add .
git commit -m "<AI生成的commit message>"

高级玩法:做成 Git 别名

把撤回操作固化成一个命令:

bash
git config --global alias.uncommit '!git reset --soft HEAD~1 && git restore --staged .'

以后只需要:

bash
git uncommit
git diff > changes.txt
# 复制给 AI → 得到 branch + commit → 执行

为什么这是降维打击?

对比项肉眼做AI 做
改动多文件时看得眼花自动汇总
总结能力容易漏细节逐条列出
格式规范懒得写 type 和 scope自动加 feat:fix:
分支命名随手起名,随意语义化、规范化
branch 与 commit 一致性可能对不上完全统一
心情烦躁轻松

Commit Message 不再是你 Git 历史的污点,而是你项目最好的变更日志。

延伸思考:还能怎么玩?

这个工作流的核心思想可以迁移到更多场景:

1. Code Review 辅助

bash
git diff main...feature > review.txt
# 丢给 AI 生成 CR 要点

2. 自动生成 Changelog

bash
git log --oneline --pretty=format:"%s" v1.0.0..HEAD > commits.txt
# 丢给 AI 按类型分组,输出 Markdown 格式的 Changelog

3. 多语言提交信息

bash
git diff > changes.txt
# 让 AI 同时生成英文和中文两份 commit message

写在最后

这个工作流的核心不是偷懒,而是把精力留给写代码,把总结交给机器

Git 提供了精细化的操作工具(resetrestorediff),AI 提供了强大的文本理解能力。把它们拼在一起,你就得到了一个自动化的、规范的、零脑力消耗的 Commit 生成器

试试看,用一次你就回不去了。


INFO

如果觉得有用,欢迎分享给身边还在手写 “update” 的朋友。

参考资料