教程 搜索 / 原生 Mac IDE / Magic Push:AI 自动生成提交消息
📝 文字 ● 初级 更新于 2026-05-13

Magic Push:AI 自动生成提交消息

暂存。点击。推送。Magic Push 读取实际的 diff,生成一条描述修改内容与原因的提交消息,然后推送——不再有"wip"占位符,不再有"fix stuff"记录。

大多数工程师都知道一条好的提交消息应该是什么样的,但大多数工程师的提交日志里却充斥着糟糕的记录。问题不在于好消息难写——其实并不难。问题在于,当你准备好提交时,活已经干完了,人也累了,diff 还很复杂,再用精炼的祈使句把这一切总结出来,是你最不想做的一件事。于是你敲下"fix"、"updates",最糟糕的是"wip",然后继续。三周后,某个地方出了问题,你试着用 git blame 定位回归点,却发现那条提交消息什么都没说。

这个问题是不对称的:写提交消息只需三十秒,而读一条烂消息,每次都要多花好几分钟。然而成本由未来的你承担,时间却是现在的你节省的,所以这种惰性会不断累积,最终让日志越来越差。唯一可持续的解法是消除写时的摩擦。如果写一条好消息的时间成本为零,你自然就会写好。

Magic Push 弥合了这道鸿沟。它让 AI 读取已暂存的 diff——改了哪些文件、哪些行、改动的形状——然后起草一条描述这些变化的提交消息。你审阅草稿,有偏差就修改,然后推送。全程耗时大约等于读三行文字的时间。"好好写条消息"的心理门槛,从"需要思考三十秒"降低到"读五秒钟"。

你将学到

第 1 步:暂存你的改动

1

像操作普通 UI 一样使用 git 面板

在侧边栏打开 git 面板。你会看到两个区域——"未暂存"列出当前的编辑内容,"已暂存"列出准备提交的内容。点击即可在两个区域之间移动文件,也可以展开文件后按 hunk 单独暂存。

粒度很重要:Magic Push 描述的是已暂存的内容,而不是所有修改。如果你改了五件事但只想提交其中一件,只暂存那一件即可。生成的消息将围绕那一件,而不是整个 diff。

第 2 步:点击"生成提交消息"

2

diff 进去,消息出来

在 git 面板的提交消息输入框上方,有一个按钮(通常是闪烁星形图标,有时标注"建议")。点击它,AI 会读取已暂存的 diff,然后在输入框中生成一条草稿消息,通常是一行祈使句式的摘要,对于非琐碎的改动还会附带一段正文。

举例来说:给某个 HTTP handler 添加限速日志的 diff,可能会生成:"Add rate-limit logging to /api/upload"。将三个文件重构为使用共享 helper 的 diff,可能会生成:"Extract shared signing logic into AuthHelper"。如果 diff 混合了两处不相关的改动,可能会生成:"Add rate-limit logging and rename UserRepo to UserStore"。最后这条是一个信号:当 AI 难以用一句话概括时,这个提交很可能是"两个提交穿着一件外套"。

"两个提交穿着一件外套"的气味:如果生成的消息用"and"连接了两个不相关的改动,通常正确的做法是拆分暂存——先提交第一处改动并附上对应消息,再单独提交第二处。Magic Push 的困惑本身就是有价值的信息。

第 3 步:编辑草稿

3

AI 知道改了什么,但不一定知道为什么

AI 生成的草稿善于描述改了什么,因为它能看到 diff。但对于改动的原因,它就力不从心了——原因不在 diff 里,而在你脑子里、工单里,或者上周的讨论中。当原因很重要时(大多数非琐碎的提交都如此),请在草稿基础上补充原因。

示例:"Rename UserRepo to UserStore"是 diff 呈现的内容,但原因可能是"Match the StoreRepo / FooStore naming convention adopted in #1422"。AI 不知道 #1422,除非你告诉它。请把它加进去。

对于琐碎的提交(lint 修复、格式调整、拼写改正),草稿通常无需修改。

第 4 步:推送

4

一步完成提交与推送

消息就绪后,点击推送按钮。git 面板会使用你的消息完成提交,然后推送到跟踪的远程分支。整个流程——暂存、生成、编辑、推送——对于典型的改动通常不超过一分钟。

如果你只想提交而不推送(还没准备好分享),有一个独立的"仅提交"选项。等你准备好了再推送。

第 5 步:为团队调整消息风格

5

配置一次,处处生效

不同团队有不同的提交消息规范:Conventional Commits(feat: ...fix: ...chore: ...)、不带前缀的祈使句、只写简短摘要不带正文、在末尾引用工单 ID 等。

只需在项目根目录的 CLAUDE.md 中告诉 AI 你团队的规范一次:

## Commit messages

Use imperative voice, no conventional-commit prefix. End with the
ticket ID if applicable, e.g. "Add rate-limit logging (#1422)".

之后生成的草稿都会遵循该规范。整个仓库都能受益——任何在这个项目中使用 LingCode 的人都将获得相同的风格。

第 6 步:何时不该使用它

6

AI 不知道的秘密

  • 安全修复。当一次提交修复了 CVE 级别的问题时,你可能希望用一条极简的消息提交,并在发布后才披露细节。AI 生成的完整描述会暴露漏洞的形状。这类提交请手写。
  • 高度依赖上下文的提交。如果某次提交只有在了解工单、客户或历史事故的前提下才有意义,AI 生成的内容虽然准确,却流于表面。不如自己动手写。
  • 包含数百个文件的 squash 提交。AI 最擅长处理聚焦的 diff。庞大的 squash 只会得到一条笼统的总结。要么提高提交粒度(更好的做法),要么手动编写 squash 消息。
如果你的团队有"禁止直接推送到 main"的规定,不要让 AI 帮你推。Magic Push 只会推送到你当前所在的分支。如果团队使用基于 PR 的工作流,请推送到功能分支后再开 PR。(你也可以通过 PreToolUse hook 来强制执行——"拒绝任何目标为 main 的 git push"。)

下一步