公司要求提交信息必须规范feat: xxx、fix: xxx、还要带tapd链接。我每次 git commit 都要憋五分钟写出来的还是“改了点东西”。后来我让 AI 替我写提交信息——diff 一丢进去它自动生成规范格式还帮我加上“影响范围”和“为什么改”。老板看 Git 日志说“xxx 最近提交质量很高啊你每天工作到几点” 我“正常六点下班。”前言Git 提交信息这件事说大不大说小不小。小到你随便写个“update”不影响跑代码。大到代码回滚、发版生成 CHANGELOG、甚至背锅溯源时一句清晰的“fix: 修复订单金额计算溢出” 比“改了一下”值一万倍。但人都有惰性尤其加班赶业务时谁有空写小作文AI 就不一样它看 diff 快、理解上下文、还能按约定格式输出。今天我就教你用 AI 自动生成高质量的 commit message顺便集成到 Git 钩子里让你以后闭着眼敲git commit就行。一、为什么你讨厌写 commit message没灵感改了好几个文件不知怎么概括。规范记不住feat/fix/docs又要查表。懒反正也没人看写个“x”交差。但规范化的 message 真的有用自动生成CHANGELOG.md。git blame时一眼看出某个改动的原因。同事 review PR 时不用猜你改了啥。既然人是懒的就让 AI 当你的“秘书”。二、AI 怎么写 commit message核心思路git diff --staged拿到本次变更的代码差异丢给 AI让它根据 Conventional Commits规范生成消息。我给你写了一个脚本ai-commitPython 版你也可以用 Node#!/usr/bin/env python3 import subprocess import sys from openai import OpenAI client OpenAI(api_key你的key) # 获取暂存区的 diff diff subprocess.check_output([git, diff, --staged]).decode(utf-8) if not diff.strip(): print(没有暂存的变更请先 git add) sys.exit(1) prompt f 请根据以下 Git diff按照 Conventional Commits 规范生成一条提交信息。 格式type(scope): subject 其中 type 可选feat, fix, docs, style, refactor, perf, test, chore scope 可选如组件名或模块名subject 简短描述不超过50字。 如果变更涉及多个不相关改动请拆成多条用换行分隔。 只输出提交信息不要解释。 diff: {diff[:8000]} response client.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}], ) message response.choices[0].message.content.strip() print(message)把这个脚本保存为ai-commit放到 PATH 里。以后你只需要git add . ai-commit # 它会打印出 AI 生成的 message git commit -F (ai-commit) # 直接使用或者再懒一点用git commit -m $(ai-commit)一行命令。三、集成到Husky每次 commit 自动调用你可以在.husky/prepare-commit-msg里加入脚本让 AI 自动填充编辑器#!/bin/sh # 自动生成 commit message 并预填到编辑器 exec /dev/tty AI_MSG$(ai-commit) echo $AI_MSG $1这样你敲git commit时编辑框里已经有 AI 写好的草稿你只需要检查一下不满意就改省得自己从头敲。四、真实案例AI 写的 message 有多专业某次我改了订单模块的一个 bug之前只判断了user.discount存在性没判断类型传了个字符串导致计算错误。AI 根据 diff 生成了fix(order): 优惠金额类型错误导致计算异常 - 增加 discount 字段的类型校验确保为 number - 添加单元测试覆盖字符串场景还帮我分了一行 body 说明其实 Conventional Commits 允许 body但我的提示词没要求。厉害的是它居然知道这是“类型错误”和“计算异常”而且自动给定了fix(order)。另一个案例我重构了一个函数把if-else改成了策略模式。AI 生成refactor(payment): 用策略模式替换多层条件分支 提升可扩展性便于新增支付渠道这一看就是老手写的。五、进阶结合TAPD/Jira自动关联任务很多公司要求 commit 里带任务 ID。你可以在提示词里加入当前分支名分支名通常含任务号branch subprocess.check_output([git, branch, --show-current]).decode().strip() # 假设分支名为 feature/TAPD-1234然后把“请从分支名提取任务ID加入提交信息”写进 prompt。AI 会生成类似feat(order): 添加满减优惠券 TAPD-1234连 hook 都不用改全自动。六、局限性AI 不是每次都完美巨大 diff超过上下文长度AI 看不到全貌。可以只改最近几个文件或者用git diff --cached --stat先给 AI 看概览再让它选择重点文件。多个无关改动AI 可能会合并成一条而你应该拆成多条。这时候手动分两次 commit 就好。隐私代码 diff 会发给 OpenAI API公司敏感项目慎用。可以本地跑开源模型CodeLlama、DeepSeek Coder替代。七、效果我的 Git 日志变“教科书”之前我的日志fix update 修改现在feat(user): 支持手机号登录 fix(cart): 修复商品数量为0时仍可结算的bug perf(list): 虚拟滚动优化长列表滚动帧率提升50% docs(readme): 更新环境配置说明老板进仓库看了一圈专门在群里说“xxx 的提交信息写得真规范大家学习一下。” 我默默把 AI 脚本分享给了同事。现在全组都在用老板还纳闷怎么大家突然都变“专业”了八、总结把时间花在改 bug 上不是写小作文AI 写 commit message省时、规范、专业。集成到 Git 钩子无感使用。支持从 diff 推断 type、scope、甚至业务含义。敏感项目换本地模型。下一回你git commit时让 AI 替你写。你只需要 review 一下不满意手动改两字。从此 Git 日志不再是“xxx: 111”而是真正的“项目史书”。