AI 编程与智能体

[Vibe Coder #3] AI 把代码全写了,为什么还需要 Git?(1 分钟回滚搞坏的应用)

进行 Vibe coding 时,总会遇到这一天:你让 AI 给一款直到昨天还运行正常的应用添加一个功能,结果 AI 到处修改,最终整个应用都无法运行。即使你请求“恢复到刚才的状态”,AI 也无法准确还原。修改了 20 个地方,其中到底哪里…

4 分钟阅读
[Vibe Coder #3] AI 把代码全写了,为什么还需要 Git?(1 分钟回滚搞坏的应用) 封面图

进行 Vibe coding 时,总会遇到这一天:你让 AI 给一款直到昨天还运行正常的应用添加一个功能,结果 AI 到处修改,最终整个应用都无法运行。即使你请求“恢复到刚才的状态”,AI 也无法准确还原。修改了 20 个地方,连 AI 自己也不知道问题出在哪里。

Git 就是为这一天而存在的。很多人会问:“AI 不是会记住所有代码吗,为什么还需要 Git?”先说结论:AI 记不住代码。 对话变长后它会忘记,打开新对话又会变成一张白纸。记住代码历史的不是 AI,而是 Git。

Git 就是游戏的存档点

Git 的概念和游戏存档完全一样。进入 Boss 战前要先存档,因为即使死了,也能从存档点重新开始。Git 的提交就是这个存档。一次提交会永久保存项目所有文件在这一刻的快照。

提交会像存档文件一样不断积累。“登录功能完成”时有一个提交,“接入支付”之前又有一个提交。你随时都能回到任意时刻。AI 把应用搞坏时,你需要的正是这个功能。不必在 20 个修改处中寻找问题,直接把整个项目恢复到最后一个存档点即可。

COMMIT 存档点时间线流程图:AI 搞坏应用后回滚到最后一次提交,并推送到 GitHub 进行备份
有了存档点,就不必找出 20 个修改处中到底哪里有问题

只需要知道 4 个术语

Git 有几十个命令,但 Vibe coder 只需要掌握 4 个概念,甚至不用记命令,直接用语言告诉 AI 即可。

  • 仓库:附加在项目文件夹上的“存档数据仓库”。AI 编程工具通常会在开始时创建它。
  • 提交:存档,即把当前时刻的快照记录到仓库中。
  • 推送:将存档文件备份到云端。备份服务器就是 GitHub,因此即使电脑损坏,代码也能保留下来。
  • 回滚(恢复):将整个项目恢复到过去的存档点。

在 GitHub 上备份时有一点需要注意,第 2 集已经讲过。如果将仓库设为公开(Public),机器人几分钟内就会扫描它。除非有特殊理由,默认应设为私有(Private)

实战节奏:“一个功能,一次提交”

使用 Git 可以概括为一个习惯:每当有一件事运行正常,就保存一次。

  • 终于可以登录了 →“提交当前状态”
  • 修改设计之前 →“先提交,再修改”
  • 今天的工作结束 →“提交并推送到 GitHub”

无论是 Cursor 还是 Claude Code,AI 编程工具都能理解这些话并代你完成。不需要亲自输入命令,关键在于时机。如果在 Boss 战(大型修改)前不存档,死掉后就没有可返回的地方。让 AI 进行大型修改前的那次提交,是最有价值的提交。

相反,最常见的失败是几天不提交地不断累积工作,最后 AI 把应用搞坏。因为没有可返回的存档点,应用正常运行时的代码就永远消失了。未提交的更改连 Git 也保护不了。

搞砸时:1 分钟回滚

如果 AI 搞坏了应用,请按以下顺序操作。

  1. 冷静地告诉 AI:“刚才的修改把应用搞坏了。恢复到最后一次提交的状态。”
  2. AI 执行回滚后,提交时间点之后的所有更改都会消失,项目也会回到存档点。
  3. 确认应用恢复运行后,把刚才失败的修改拆成更小的单元再试一次。不要一次修改 20 个地方,一次只改一件事。

这里再次涉及第 1 集中的区分。回滚只恢复代码。 DB 中积累的数据与 Git 无关,会原样保留。即使把代码恢复到昨天的状态,今天注册的用户也不会消失。反过来,误删的数据也无法通过 Git 恢复。代码的历史由 Git 负责,数据的历史由 DB 备份负责。

.env文件也一样。第 2 集中已将.gitignore加入忽略列表,使 Git 不再跟踪它,因此 Git 不会保护这个文件。重新生成密钥后,最好单独记录在密码管理器等地方。

对比插画:代码胶片在文字“ROLLBACK REWINDS CODE ONLY”旁倒带回过去,而 DATABASE 金库保持不变
回滚只倒回代码,数据的历史由 DB 备份负责

今天可以做的自检

可以这样问 AI。

  1. “这个项目创建 Git 仓库了吗?最后一次提交是什么时候?”—如果没有仓库,或者最后一次提交是一周前,现在就是提交的时候。
  2. “是否正在备份(推送)到 GitHub?仓库是公开还是私有?”—如果没有备份,就让 AI 创建;如果处于公开状态,请考虑切换为私有。
  3. “未提交的更改积累了多少?”—如果当前运行正常,就立即让 AI 提交。

总结

  • AI 记不住代码的历史。记忆是 Git 的工作。
  • 提交是存档,推送是云端备份(GitHub),回滚是回到存档点。
  • 节奏只有一个:每当运行正常,以及大型修改之前,都说“提交一下”。
  • 回滚只恢复代码。DB 数据和.env属于 Git 之外的世界。
  • 除非有特殊理由,仓库默认应设为私有。

下一集是部署。我们将解释为什么在自己电脑上完美运行的应用,放到互联网后却无法运行,以及 localhost、服务器、域名和环境变量分别是什么。