AI agent 的 git commit 实践

提交信息、提交边界,以及绝不能让 AI commit 的东西。

这篇讲什么

现在 AI agent 普遍能跑 git addgit commit,有些还能 git push。问题不在工具本身,而在信任边界——一次没看就批准的 commit,可能泄 secret、覆盖同事提交,或者把真实变更埋在一个 47 文件的大杂烩里。这篇讲怎么给 AI 写 commit message 规范、怎么划分 commit 边界、以及哪些操作绝对不能让它代劳。

这篇适合谁看

用 Cursor agent 模式、Claude Code、Codex 或任何带 shell 的 AI 工具的开发者。如果你曾经在没看暂存 diff 的情况下按过”是的,跑吧”,这篇就是写给你的。前提是你日常用 git 且在意 history 的整洁。

什么时候适合用

在打开”自动 commit”开关之前看一遍。在 agent 第一次提了让你尴尬的 commit 之后再看一遍——因为它一定会,而你在那之后改的规则才会真正生效。

开始前准备

  • 想清楚信任边界放在哪:agent 暂存、人 commit;或者 agent commit、人 push。两种都行,但要明确选一种。
  • 在 repo 根放 CLAUDE.mdAGENTS.md,写硬规则(不准 force push、不准 amend 共享分支、不准提交到 main)。
  • 确认 .gitignore 已经覆盖 .env*、凭证文件、以及 agent 可能溜进去的本地缓存。
  • 配 pre-commit hook(gitleaksdetect-secrets 之类),人和 agent 都漏看的情况下,secret 仍然出不去。

具体步骤

  1. CLAUDE.md / AGENTS.md 写规则:永远不要 commit secrets、永远不要 amend 已发布 commit、永远不要直接提到 main、永远不要 git push --force
  2. 用”先审再提”流程:让 agent 把文件暂存好、写好 message,然后你跑 git diff --cached 看一眼再确认。
  3. 让 agent 用 conventional commit 格式建议 message(feat:fix:chore:),但最后由你拍板——subject line 是最容易漂的。
  4. 在规则里限制 commit 大小(“一个逻辑变更一个 commit,最多约 200 行改动”)。AI 大 commit 是 review 疲劳无声失败的高发区。
  5. 提交后跑 git log -1 --stat,确认文件列表跟你预期一致。出现意外文件就 git reset HEAD~1 撤回。

给 agent 的 commit message 模板

把这段贴进 AGENTS.md,agent 就不用每次重新发明格式:

type(scope): 60 字符以内的祈使句摘要

- 改了什么(1-3 个 bullet,文件 / 区域)
- 为什么(ticket 链接或简短理由)
- 跑了哪些测试 / 怎么验证的

期待 agent 输出形如:fix(auth): refresh token before retry on 401,加 2-3 行 bullet,而不是 200 字的小作文。

绝不能让 AI commit 的东西

  • 任何匹配 **/.env***/secrets.***/*.pem**/credentials.json 的文件——哪怕 agent 坚持”只是本地用”。
  • 大于约 1MB 的二进制——*.sqlite、大 PNG 等会把 history 撑爆。
  • migration、schema 变更、infra/terraform/ 下的所有改动——必须人工 review。
  • 已经有脚本生成的产物(dist/build/、各种 *.lock 重建)——提交脚本变更,不提交产物。
  • 共享分支上的 merge commit——merge 编码意图,让人选合并策略。

建议的操作流程

暂存 -> agent 提议 message -> 人读 diff -> 人 commit -> 人 push。在已经开了 PR 的分支上,agent 永远不拥有最后的 git push。单人 feature 分支可以让它 push,但要求它先打印 remote 名和分支名再执行——这样你能在落地前抓到打字错误。

FAQ

  • 能让 agent 跑 git commit --amend 吗?: 只允许 amend 它本次 session 自己创建且还没 push 的 commit。同事的 commit 一律不行。
  • git rebase 呢?: 本地 feature 分支随便;已经 push 共享过的分支禁止。这条写进 AGENTS.md
  • PR body 也让 agent 写吗?: 可以,但当草稿——agent 不知道哪个 reviewer 关心哪个细节。
  • conventional commits 还是大白话?: 都行,但在 repo 规则里选一种,否则 agent 会一会儿一种风格。
  • 不想要的 AI commit 怎么撤?: git reset --soft HEAD~1 保留改动在暂存区;git reset --hard HEAD~1 全丢。只要遵守前面的规则,push 还没发生。
  • 会不会拖慢节奏?: 第一周会;第三周 agent 学会你的风格之后,每个 commit 的 review 大概 10-15 秒。

容易踩的坑

  • “改得很小”就让 agent 自动 commit 不审——小改动恰恰是最容易藏惊喜的地方。
  • 允许 git commit -am(自动暂存改动文件)——会把无关 edit 也扫进来。
  • 让 agent amend 共享 commit”清理 history”——这是改写公共历史。
  • 没有 CLAUDE.md / AGENTS.md——agent 每个 session 都自己发明一套约定。
  • 只口头说”别动 X”——规则必须写进 repo,否则一个 session 内就遗忘。
  • 一个 session 一个超大 commit——bisect 不能用,回滚只能全有或全无。

相关阅读

标签: #AI 编程 #教程