Loading... # AI 时代 Vibe Coding 三大保命符 # 一、概述 ## 1. 背景 AI 编程工具(如 Claude Code、Cursor 等)的普及带来了开发效率的革命性提升,但也引入了新的风险。AI 可能一次性修改大量代码,如果缺乏正确的开发策略,可能导致难以挽回的损失。 本文总结 AI 时代 Vibe Coding 的三大保命符:原子化、互解耦、可回滚。 ## 2. 核心原则 - 步子迈小(原子化) - 各管各的(互解耦) - 随时后悔(可回滚) # 二、原子化 (Atomic) ## 1. 定义 事情一件一件做,别贪多。每次只完成一个最小的可验证单元。 ## 2. 形象比喻 就像玩游戏"存盘"。 ### 非原子化(错误示范) 你一口气玩了 10 个关卡,打赢了 3 个 BOSS,捡了一堆装备,中间一次都没存盘。结果在最后一步如果不小心死机了,你之前的努力全白费,得从头再来。 ### 原子化(正确做法) 打完一个小怪,存个盘;捡到一个宝箱,存个盘。每次只做一个小动作就确认一下。这样就算出错了,你只损失最近这几分钟的进度,而不是一下午的心血。 ## 3. 代码实践 ```mermaid graph LR A[开始] --> B[任务分解] B --> C1[子任务1] C1 --> D1[完成并提交] D1 --> C2[子任务2] C2 --> D2[完成并提交] D2 --> C3[子任务3] C3 --> D3[完成并提交] D3 --> E[结束] style D1 fill:#90EE90 style D2 fill:#90EE90 style D3 fill:#90EE90 ```  **错误做法**:让 AI 一次性"改登录功能 + 换背景颜色 + 优化数据库" **正确做法**: 1. 让 AI"改登录",确认没问题后,git commit 2. 再让 AI"换背景",确认没问题后,git commit 3. 最后让 AI"优化数据库",确认没问题后,git commit ## 4. Git 原子化提交 ```bash # 每完成一个小功能就提交一次 git add src/auth/login.py git commit -m "fix: 修复登录密码验证逻辑" # 继续下一个功能 git add src/styles/background.css git commit -m "feat: 更新页面背景颜色" ``` # 三、互解耦 (Decoupled) ## 1. 定义 各管各的,谁也别挨着谁。模块之间应该保持独立,互不影响。 ## 2. 形象比喻 就像家里的电路系统。 ### 未解耦(错误示范) 你家客厅的灯坏了,结果连着厨房的冰箱、厕所的马桶、卧室的空调全都断电罢工了。这就是"纠缠不清"。 ### 已解耦(正确做法) 客厅灯坏了就只是客厅灯不亮,厨房依然能做饭,厕所依然能冲水。每个房间的电路是独立的,互不影响。 ## 3. 代码实践 ```mermaid graph TB subgraph 未解耦系统 A[用户头像功能] <--> B[支付系统] B <--> C[评论功能] C <--> A end subgraph 已解耦系统 D[用户服务] -.独立.-> E[支付服务] E -.独立.-> F[评论服务] F -.独立.-> D end style A fill:#FFB6C6 style B fill:#FFB6C6 style C fill:#FFB6C6 style D fill:#90EE90 style E fill:#90EE90 style F fill:#90EE90 ```  **错误场景**:AI 修改了"用户头像"的功能,导致"支付系统"崩溃 **正确架构**: - 用户服务:独立管理用户信息和头像 - 支付服务:独立处理支付逻辑 - 两个服务通过 API 通信,一个挂了不影响另一个 ## 4. 解耦实践要点 - 模块化设计:每个功能模块职责单一 - 接口隔离:通过明确的接口通信,避免直接依赖 - 依赖注入:使用依赖注入降低耦合度 - 事件驱动:使用消息队列实现异步解耦 # 四、可回滚 (Rollback) ## 1. 定义 世上真有后悔药。当出现问题时,能够快速恢复到之前的工作状态。 ## 2. 形象比喻 就像文档里的"撤销 (Ctrl+Z)"。 ### 不可回滚(错误示范) 你在纸上用油性笔画画,画错了就是画错了,涂不掉,只能把纸撕了重画。 ### 可回滚(正确做法) 你在电脑上画画,画错了一笔?点一下"撤销",马上回到画错之前的样子,就像什么都没发生过。 ## 3. 代码实践 ```mermaid graph LR A[当前版本 v1.3] -->|AI 改坏了| B[崩溃版本 v1.4-broken] B -->|git reset| A A -->|重新修改| C[修复版本 v1.4-fixed] style B fill:#FFB6C6 style A fill:#FFD700 style C fill:#90EE90 ```  **核心工具**:Git 版本管理 ```bash # 查看提交历史 git log --oneline # 回滚到上一个稳定版本 git reset --hard HEAD~1 # 或者创建新分支回滚 git checkout -b hotfix git reset --hard HEAD~1 # 使用 revert 更安全(保留历史) git revert HEAD ``` ## 4. 回滚策略 - 频繁提交:每个小功能完成后立即提交 - 清晰的提交信息:提交信息要能看懂改了什么 - 分支保护:主分支受保护,通过 PR 合并 - 发布标签:给稳定版本打标签,便于快速定位 # 五、综合案例:AlexZ 的教训 ## 1. 事件背景 开发者 AlexZ 在使用 AI 编程工具时遇到问题: - 没有进行原子化 commit - AI 把功能改坏了 - 之前正常工作的代码被删除 - 只能浪费时间重做 ## 2. 问题分析 ```mermaid graph TB A[AlexZ 的操作] --> B[一次性修改多个功能] B --> C[功能之间互相牵连] C --> D[没有及时提交代码] D --> E[AI 改错导致崩溃] E --> F[无法回滚] F --> G[被迫重做] style A fill:#87CEEB style E fill:#FFB6C6 style G fill:#FFA500 ```  **违反的三大原则**: 1. 不原子:让 AI 一口气干了太多事 2. 不解耦:功能之间互相牵连 3. 难回滚:没有存好档,没法用时光机回去 ## 3. 正确做法 ```mermaid graph TB A[开始任务] --> B[分解为小任务] B --> C[完成子任务 1] C --> D{测试通过?} D -->|否| C D -->|是| E[git commit] E --> F[完成子任务 2] F --> G{测试通过?} G -->|否| H[git 回滚到 E] H --> F G -->|是| I[git commit] I --> J[继续下一个任务] style E fill:#90EE90 style I fill:#90EE90 style H fill:#FFD700 ```  # 六、最佳实践总结 ## 1. 原子化检查清单 - [ ] 每次只修改一个功能 - [ ] 完成后立即测试 - [ ] 测试通过后立即 commit - [ ] 提交信息清晰描述改动 ## 2. 解耦检查清单 - [ ] 模块职责单一 - [ ] 模块间通过接口通信 - [ ] 修改一个模块不影响其他模块 - [ ] 可以独立测试每个模块 ## 3. 可回滚检查清单 - [ ] 使用 Git 管理代码 - [ ] 频繁提交,不要积累 - [ ] 提交信息清晰可读 - [ ] 重要版本打 tag - [ ] 熟练掌握回滚命令 ## 4. AI 编程工作流建议 ```mermaid sequenceDiagram participant U as 用户 participant AI as AI 工具 participant Git as Git 仓库 participant Test as 测试环境 U->>AI: 请求修改功能 A AI->>U: 返回修改代码 U->>Test: 测试功能 A Test-->>U: 测试通过 U->>Git: git commit 功能 A U->>AI: 请求修改功能 B AI->>U: 返回修改代码 U->>Test: 测试功能 B Test-->>U: 测试失败 U->>Git: git reset 回滚 U->>AI: 重新请求修改功能 B ```  # 七、常用 Git 命令参考 ## 1. 提交相关 ```bash # 查看当前状态 git status # 添加文件到暂存区 git add <文件名> git add . # 添加所有修改 # 提交到本地仓库 git commit -m "清晰描述本次改动" # 查看提交历史 git log git log --oneline # 简洁显示 ``` ## 2. 回滚相关 ```bash # 撤销未提交的修改 git checkout -- <文件名> # 撤销暂存区的修改 git reset HEAD <文件名> # 回滚到指定提交(保留修改) git reset --soft HEAD~1 # 回滚到指定提交(不保留修改) git reset --hard HEAD~1 # 回滚到指定提交(安全方式,生成新提交) git revert HEAD ``` ## 3. 分支相关 ```bash # 创建新分支 git checkout -b <分支名> # 切换分支 git checkout <分支名> # 合并分支 git merge <分支名> # 删除分支 git branch -d <分支名> ``` *** ## 参考资料 1. [Tz (@Tz_2022) on X](https://x.com/Tz_2022/status/2017896293947817988) 最后修改:2026 年 02 月 02 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏