AI 写代码越改越乱?用 Git 分支给 AI 上一道保险
AI 写代码越改越乱用 Git 分支给 AI 上一道保险没有分支管理的 AI 编程就像没有安全带的自动驾驶——出事只是时间问题。一、单分支 AI一场灾难的配方很多人用 AI 写代码的方式差不多在main分支上直接让 Cursor/Copilot 改代码改完能跑就提交改完跑不了就 CtrlZ改完跑不了又回不去了——那就只能硬着头皮修。我自己的 CodeStep 项目就踩过。项目初期只有main一个分支某次让 AI 帮我重构课程加载模块它一口气改了 16 个文件、加了 1574 行代码。课程加载确实更优雅了但编辑器的光标定位功能也跟着坏了。16 个文件的改动混在一起我根本分不清哪些是重构、哪些是 AI 顺手改坏的。类似的情况还有不少让 AI 加个新功能它改了 A 文件实现功能顺便优化了 B 文件B 文件挂了让 AI 修个 bug修好了但顺手把另一个功能改出了新 bugAI 反复修改同一个文件提交历史全是 “update” “fix again” “really fix this time”回滚都不知道回哪个说白了AI 写代码速度快、改动范围大单分支开发下所有改动混在一起出问题就没法隔离和回退。分支管理的价值就在于——给每一次 AI 改动一个隔离的沙箱改好了合并改坏了直接扔掉main始终是干净的。二、三种工作流你该选哪个知道要用分支了Git 工作流有好几种选哪个Git Flow——正规军但太重maindevelopfeature/loginrelease/1.1hotfix/urgentv1.0dev-1feat-1feat-2merge-featfix-bugv1.1v1.1sync-devhotfix-1v1.1.1v1.1.1sync-hotfix5 种分支main、develop、feature、release、hotfix流程严谨适合发布周期明确的中大型团队。但对个人开发者和 AI 编程场景来说开个功能要切 3 次分支、合 3 次代码AI 改完你还得走 release 流程太磨叽了。GitHub Flow——极简派我的推荐mainfeat/loginfeat/dashboardai/refactorstableAI写登录功能合并loginAI写仪表盘测试通过✓合并dashboardAI改崩了...就两条规则main分支永远可部署所有新功能从main拉分支完成后再合并回来为什么适合 AI 编程因为 AI 的每一次改动都可以是一个 feature 分支。改好了合并改崩了删掉重来main永远是安全的。简化版 Git Flow——小团队折中方案2-5 人的小团队可以在 GitHub Flow 基础上加一个develop分支做集成测试避免未经 AI 验证的代码直接进main。怎么选团队规模推荐工作流分支模型为什么个人 AIGitHub Flowmain feature每次AI改动隔离改崩直接扔2-5人小团队简化 Git Flowmain develop featuredevelop做集成验证中大型团队Git Flow全套5种分支流程规范职责清晰个人开发者 AI 编程GitHub Flow 就够了下面实战就用它。三、实战给 AI 改动加上安全带还是我的 CodeStep 项目。需求是为项目添加开源准备LICENSE、CONTRIBUTING.md、CI 配置等。错误做法在 main 上让 AI 直接改# 在 main 分支上直接操作gitcheckout main# 让 AI 添加开源文件...# AI 添加了 LICENSE、CONTRIBUTING.md、CI 配置...# 同时 AI 顺手 修改了 3 个源码文件优化代码结构gitadd.gitcommit-madd open source files and some improvements# 推送后发现 CI 挂了3个源码文件的改动有问题# 但已经推送到 main 了回滚其他协作者已经拉取了...一坨提交里混着开源文件和 AI 的优化出问题根本没法隔离。正确做法功能分支隔离 AI 改动# 1. 确保 main 是最新的gitcheckout maingitpull origin main# 2. 创建功能分支gitcheckout-bfeat/open-source-prep# 3. 让 AI 在这个分支上操作# 添加 LICENSE、CONTRIBUTING.md、CI 配置...# 4. 检查 AI 改了什么这一步很关键gitdiff--stat# 16 files changed, 1574 insertions(), 4 deletions(-)# 16个文件我只是让AI加开源文件为什么改了16个# 5. 撤回 AI 顺手 改的无关内容gitcheckout main -- path/to/unrelated-file.js# 或者交互式选择要保留的改动gitadd-p# 6. 提交gitcommit-mfeat: add open source preparation files - Add MIT LICENSE - Add CONTRIBUTING.md with git workflow guide - Add CI/CD workflows for testing and release - Add issue/PR templates# 7. 推送并创建 PRgitpush origin feat/open-source-prep# 在 GitHub 上创建 Pull Request自己 review 一遍# 8. 确认没问题后合并gitcheckout maingitpull origin maingitbranch-dfeat/open-source-prepgitpush origin--deletefeat/open-source-prep关键差异在于AI 改了 16 个文件但我在分支里发现并撤回了无关改动。就算没发现PR 里也能看到完整 diff合并前还有审查机会。而在 main 上直接改这些安全网全没了。给 AI 编程的分支命名建议每次 AI 改动都像一次实验分支名可以直接体现意图分支前缀用途AI 场景示例feat/新功能feat/add-java-coursesfix/Bug 修复fix/editor-cursor-bugrefactor/重构refactor/course-loaderai/AI 实验性改动ai/optimize-renderingai/前缀是我自己加的——对 AI 做的大范围不确定性改动单独标记一下心里有数改崩了直接删分支零成本。四、踩坑与急救用分支管理 AI 改动这几个坑踩过的人最多坑1忘记同步 mainAI 在旧代码上改了一堆AI 在功能分支上改了 2 天要合并了才发现 main 已经被别人更新了。# rebase 方式推荐个人分支gitcheckout feat/my-featuregitfetch origingitrebase origin/main# 有冲突就解决gitadd.gitrebase--continuegitpush-forigin feat/my-feature# rebase 后需要强制推送# merge 方式分支已经共享给其他人时用这个gitcheckout feat/my-featuregitfetch origingitmerge origin/main建议每天开始让 AI 改代码前先git fetch origin git rebase origin/main保持分支新鲜。坑2AI 把分支改崩了想扔掉重来# 还没提交直接丢弃所有改动gitcheckout.gitclean-fd# 已经提交了回退到某个好的提交gitreset--hardgood-commit-hash# 整个分支都不要了gitcheckout maingitbranch-Dfeat/ai-experiment这就是分支管理的精髓扔掉一个分支的成本是零但在 main 上回滚的成本可能很高。坑3误删了分支# 用 reflog 找回gitreflog# 找到分支最后一次提交的 hash比如 def5678gitcheckout-bfeat/lost-feature def5678git reflog是 Git 的时光机90% 的误操作都能用它救回来。坑4AI 改的代码提交到了错误的分支# 把最近 1 个提交移到正确的分支gitcheckout feat/correct-branchgitcherry-pickcommit-hashgitcheckout feat/wrong-branchgitreset--hardHEAD~1五、一页纸总结分支管理 3 原则main 上只放稳定的代码——所有 AI 改动都在功能分支里做main 随时可以部署一个分支只做一件事——别让 AI 在一个分支上既加功能又修 bug 又重构出问题没法隔离开工前先拉取——每天开始工作前git pull避免在旧代码上让 AI 改出新冲突AI 编程分支工作流速查# 开始新任务gitcheckout maingitpullgitcheckout-bfeat/xxx# AI 改完后检查gitdiff--stat# 看改了哪些文件gitdiff# 看具体改动gitcheckout main -- file.js# 撤回无关文件# 提交与合并gitadd.gitcommit-mfeat: xxxgitpush origin feat/xxx# 创建 PR / 合并后清理gitbranch-dfeat/xxxgitpush origin--deletefeat/xxx# AI 改崩了扔掉重来gitcheckout maingitbranch-Dfeat/xxx# 同步最新代码gitfetch origingitrebase origin/main工作流选择场景工作流核心分支个人 AI 编程GitHub Flowmain feature2-5 人小团队简化 Git Flowmain develop feature中大型团队Git Flowmain develop feature release hotfixAI 写代码的时代版本控制不是可选项是你的安全网。每次让 AI 改代码之前先创建一个分支——这个习惯能让你少踩很多坑。