很多人第一次用 Codex、Claude Code 或 Cursor 改项目,最容易卡住的不是“AI会不会写代码”,而是“它改完之后我敢不敢上线”。尤其是个人工具站、WordPress 主题、小程序、自动化脚本这类项目,一次看似很小的修改,可能顺手改到配置、样式、依赖和构建文件。
所以 AI编程版本管理的重点,不是把 Git 讲成一本厚书,而是建立一条可执行的安全线:每个任务有边界,每次改动能看差异,每个结果能测试,每次事故能回滚。
如果你还在摸索 AI 编程工具的整体使用方式,可以先看站内的 AI编程工具专题 和 普通人AI实践专题。本文更聚焦一个具体问题:怎样让 AI 改代码时少失控,出了问题也能退回来。
为什么 AI 编程更需要版本管理
传统手写代码时,开发者通常知道自己改了哪些文件。AI Agent 不一样,它会根据上下文自动寻找相关文件,可能一次修改多个模块,还会顺手补文档、改配置、更新样式。如果提示词不够清楚,它甚至会用“看起来更合理”的方式重构一段你暂时不想碰的代码。
这不代表 AI 编程不可靠,而是说明你需要把工作流设计成“可检查”。版本管理就是这套检查机制的底座。
一套合格的 AI编程版本管理流程,至少要回答四个问题:
- 这次任务到底允许 AI 改哪些文件?
- 改动完成后,怎么快速看出它做了什么?
- 上线前用什么测试证明它没有破坏旧功能?
- 如果结果不对,能不能在几分钟内回到上一个稳定状态?
前面站内写过 AI编程任务说明模板,那篇解决的是“怎么把需求说清楚”。本文补上下一环:需求进入项目之后,怎么用分支、提交和回滚保护结果。
第一步:每个 AI 任务单独开分支
不要让 AI 直接在主分支上长期改。最稳的做法,是把每个独立任务放到一个单独分支里。分支名称不用复杂,但要能看懂任务意图,例如:
feature/ai-search-filter
fix/mobile-header-overlap
content/update-topic-page-links
refactor/seo-check-script
对个人项目来说,这一步最大的价值是“隔离”。AI 改错了,你可以直接丢掉这个分支;AI 改得不错,也可以在合并前慢慢审。
如果你使用 Codex CLI 或类似的 Agent 工具,建议在任务开始前把分支状态告诉它:
当前在 feature/ai-search-filter 分支。
只处理搜索筛选问题,不要改登录、支付、部署配置。
完成后请列出修改文件、测试命令和需要人工确认的风险点。
如果项目比较大,还可以配合工作树使用。站内这篇 Codex 新工作树使用教程 讲过内容创作者也能理解的工作树思路:不同任务放在不同目录,互不干扰。
第二步:先让 AI 读代码,再让它动手
很多翻车来自一个习惯:上来就让 AI “直接修”。更稳的方式是先让它做只读分析。
你可以这样写:
先不要修改文件。请阅读相关代码,说明你认为问题发生在哪里、准备改哪些文件、每个文件为什么要改。等我确认后再执行。
这一步看似慢,其实省时间。因为 AI 的分析结果会暴露它是否误解了业务边界。如果它把一个样式问题分析成架构重构,说明你应该马上收窄任务。
对 Claude Code、Cursor、Codex 这类工具都一样:先看计划,再授权修改。尤其是涉及数据库字段、支付、用户权限、服务器配置、SEO 模板时,不要跳过这个确认。
第三步:小步提交,不要攒成一个大包
AI 很擅长一次做完很多事,但版本管理不鼓励把所有东西攒成一个大提交。更建议按结果拆成几个小提交:
- 第一类:只改业务逻辑。
- 第二类:只改样式或文案。
- 第三类:只补测试。
- 第四类:只更新文档或说明。
这样做有两个好处。第一,审查差异时更容易看懂。第二,如果某一类改动有问题,可以只回滚那一部分。
提交信息也不要写成“update”“fix bug”。你可以让 AI 帮你总结,但要保留业务含义,例如:
fix: prevent mobile header overlap on article pages
test: add regression coverage for search filter
docs: document wordpress publishing checklist
如果你不是程序员,也可以用中文提交信息,重点是让三个月后的自己能看懂:
修复移动端文章页顶部导航遮挡问题
补充搜索筛选的回归测试
更新 WordPress 发布检查说明
第四步:每次改完都看差异
AI 改完后,不要只看页面有没有变好。你至少要看一次文件差异。重点不是逐行理解所有代码,而是识别三类异常:
- 任务外文件:这次明明只改前端样式,却动了环境变量、构建配置或权限文件。
- 大面积重写:本来是小修复,却把成熟模块重构了一遍。
- 删除保护逻辑:为了让测试通过,删掉校验、日志、错误处理或人工确认步骤。
可以把这段检查要求写进 AI 提示词:
请基于 git diff 做一次自查:列出本次修改是否包含任务外文件、大面积重写、删除校验逻辑、潜在兼容性问题。不要只总结优点。
这和 AI代码审查工作流 是同一套思路:AI 可以参与审查,但最终要把风险点摆到人能判断的位置。
第五步:测试命令写进任务闭环
版本管理不是只管提交,还要记录“这个提交为什么可信”。所以每个 AI 编程任务,都应该在最后留下测试命令和测试结果。
常见项目可以这样要求:
- 前端项目:运行 lint、类型检查、单元测试和构建。
- WordPress 维护:检查文章页、专题页、移动端导航、关键 SEO meta。
- 自动化脚本:用测试数据跑一遍 dry-run,再跑真实目标。
- 后端接口:检查核心接口、错误分支、权限边界和日志。
站内的 AI编程测试工作流 已经讲过如何让 Cursor、Claude Code、Codex 帮你补测试。这里要强调的是:测试结果要和版本一起留下来。否则你只知道“它当时好像能跑”,不知道后来为什么坏。
一个简单的任务收尾格式可以是:
修改文件:
- src/components/SearchPanel.tsx
- tests/search-panel.test.ts
已运行检查:
- npm run lint:通过
- npm test -- search-panel:通过
- npm run build:通过
人工确认:
- 移动端筛选按钮是否符合预期
- 旧文章列表排序是否保持不变
第六步:准备三种回滚方式
AI 编程里最让人安心的不是“永远不出错”,而是“出错后退得回来”。至少准备三种回滚方式。
1. 放弃当前未提交改动
适合 AI 刚改完,你一看方向完全错了。这个时候不要继续让它在错误基础上修补,直接放弃未提交改动更干净。
注意:如果项目里还有你手写但未提交的改动,不要粗暴清空。先看差异,确认哪些是 AI 做的,哪些是你自己的。
2. 回滚某一个提交
适合改动已经提交,但上线前发现问题。回滚单个提交比重置整个分支更稳,尤其适合多人协作或已经推送到远端的项目。
3. 从稳定标签或备份恢复
适合生产环境出问题。网站主题、插件、自动化脚本上线前,可以给稳定版本打一个标签,或者保留部署包。这样即使 AI 改动混进多个提交,也能快速恢复服务。
如果你经常让 AI 参与线上修复,可以把 AI编程调试流程 和本文的版本管理流程合起来用:先复现,再定位,再小步修改,最后用测试和回滚方案收尾。
一套适合普通人的 AI 编程版本管理模板
下面这段可以直接放进你的项目说明或任务提示词里:
本项目使用小步 AI 编程流程:
1. 每个任务单独分支,不直接在主分支长期修改。
2. 修改前先分析,不要立即动手。
3. 只改任务相关文件,避免顺手重构。
4. 修改后列出 git diff 风险点。
5. 提交前运行必要测试,并记录命令结果。
6. 每次提交只表达一个清晰意图。
7. 如发现方向错误,优先回滚,不在错误改动上反复补丁。
如果你维护的是个人博客、工具站或小团队项目,这套模板已经够用。不要一开始追求复杂的工程制度,先把“能看懂、能测试、能退回”落实下来。
哪些任务必须更谨慎
不是所有 AI 编程任务风险都一样。下面这些任务建议提高审查标准:
- 涉及登录、权限、支付、隐私数据的代码。
- 涉及环境变量、服务器部署、数据库迁移的修改。
- 涉及 SEO 模板、URL 结构、重定向规则的修改。
- 涉及大面积依赖升级、框架迁移和构建工具替换的任务。
- 涉及生产数据批量更新、文件删除、远程命令执行的自动化脚本。
这些任务不是不能交给 AI,而是要把权限、测试和回滚写得更细。比如只允许先生成迁移脚本,不允许直接执行;只允许给出更新计划,不允许直接改生产配置。
老达点评
AI 编程真正改变的,不是“以后不用懂代码”,而是普通人也能把更多维护工作拆成任务交给工具执行。但工具越强,越要有边界。没有版本管理的 AI 编程,很容易变成一次次凭感觉试错;有版本管理的 AI 编程,才会逐渐变成可复盘、可交付、可长期维护的工作流。
我的建议很简单:不要等项目变复杂了才学版本管理。从今天开始,每个 AI 任务单独分支,每次修改看差异,每次提交带测试记录。你不需要一开始就像专业团队一样完善,但至少要让自己知道:这次 AI 到底改了什么,我为什么相信它,坏了以后怎么退回来。