这篇讲什么
现在 AI agent 普遍能跑 git add、git 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.md或AGENTS.md,写硬规则(不准 force push、不准 amend 共享分支、不准提交到main)。 - 确认
.gitignore已经覆盖.env*、凭证文件、以及 agent 可能溜进去的本地缓存。 - 配 pre-commit hook(
gitleaks、detect-secrets之类),人和 agent 都漏看的情况下,secret 仍然出不去。
具体步骤
- 在
CLAUDE.md/AGENTS.md写规则:永远不要 commit secrets、永远不要 amend 已发布 commit、永远不要直接提到main、永远不要git push --force。 - 用”先审再提”流程:让 agent 把文件暂存好、写好 message,然后你跑
git diff --cached看一眼再确认。 - 让 agent 用 conventional commit 格式建议 message(
feat:、fix:、chore:),但最后由你拍板——subject line 是最容易漂的。 - 在规则里限制 commit 大小(“一个逻辑变更一个 commit,最多约 200 行改动”)。AI 大 commit 是 review 疲劳无声失败的高发区。
- 提交后跑
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 不能用,回滚只能全有或全无。