大家好,我是程序员阿丁。
上上周写了一篇对比文章——用 Copilot 和 Claude Code 同时做 Git 多版本比对,两个都没搞定。
后来搞了个土耳其 ChatGPT Plus,接上 Codex,同一件事又试了一次。(土耳其区比正常便宜很多,怎么搞的回头有时间我单独写一篇教程)这次做出来了。
但我复盘发现:前两次失败错的是我,不是 AI。第三次能成,最有价值的也不是 GPT 写了什么代码,而是我跟它协作的过程中,纠正了我自己的认知。
第一次提问 vs 第三次提问
这是当时给 Copilot 和 Claude Code 的原话:
「当前工具只支持新旧两个版本比对,想改成多选版本号,生成合并报告。」
就一句话。没例子,没说清楚逻辑,没边界条件。
这是第三次给 Codex 的原话:
「我现在给你举个例子,比如我一共提交了5次。我如果想要看我的提交2和提交4到底改了啥,我现在没法实现。我现在只能是手工去回滚之后用文件夹比对。先分析需求是否可行,有任何疑问直接问我,直到你有95%的把握理解我要做的需求之后再说。」


差别太大了。第一版是「我有一个想法」,第三版是「我给你需求文档」。
这不是模型教我的——是前两次失败教我的。
Codex 的几个亮点
抛开提问质量的差异,Codex + GPT 在协作里表现出来的能力,确实是前面两个工具没有的。
它翻了代码,找到了根因。 不是看了需求就出方案,是先扫了一遍仓库:
"当前代码里读的是工作副本状态,不是从提交快照读,这可能是你说必须手工回滚的根因。"

Claude Code 和 Copilot 都没说这句话。
它把我没说清的事说清了。 我一句「多版本比对」,Codex 直接帮我把语义拆成了两种:
提交2 快照 vs 提交4 快照 → 看到的是提交3 + 提交4 的结果 选提交2 + 提交4,只看这两个分别改了什么 → 这才是我要的
这东西我当然是知道的,但我说得模糊,它帮我说清楚了。
它没照我说的做,给了更好的方案。 我说用临时目录复制当前项目,它说不要:用 Git 原生的干净快照,天生不会带入未提交文件。

但第一版做出来的也不对
Codex 按我描述的手工流程(回滚 → 跟 HEAD 比较)精准地自动化了,结果跑出来不对——A 需求加了一个文件,B 需求又删了它,只选 A 需求时,报告里该出现的文件没有出现。
第一反应是觉得它理解错了。想了半天才搞明白:错的不是 Codex,是我的手工流程本身就有漏洞。
提交历史:C → A 加文件 → B 删文件 → HEAD
只选 A,Codex 的做法是:从 HEAD 快照撤销 A。但 A 加的文件已经被 B 删了,HEAD 里压根没有这个文件——撤销了个空气,比不出差异。
我以前手工回滚时没踩到这个坑,是因为恰好没遇到后面提交改过前面需求文件的情况。不等于这个流程是对的。
所以 Codex 没做错,它老老实实还原了我的错误流程。反而是一跑、看到不对的结果,我才发现以前自己以为正确的做法其实是错的。
想通了
那天晚上我想明白了:从 HEAD 往回看是错的,应该从过去往后看。
回来跟 Codex 重新讨论:
"我大概率是分需求来上线的。A 需求加文件,B 需求删了。如果只选 A,新增就得体现;如果 AB 都选,就是无变更。"
我们重新设计了方案:
基线 = 最早选中版本的前一个版本old = 基线new = 基线 + 按顺序应用选中版本报告 = old vs new不从 HEAD 往回看,从最早选中版本往前看,只挑我们关心的版本应用。后来在界面上直接改名「Git 需求包」「SVN 需求包」——因为它做的事情就是按需求打包上线。

还有一个顺带解决的问题:Git merge commit。
按原来的方案——从 HEAD 反向撤销——如果遇到 merge commit(合并提交),它有两个父提交,你不知道该往哪个方向撤销,语义直接卡死。所以第一版直接不支持 merge commit,遇到就报错跳过。
换了新方案之后方向反过来了——从基线往前按顺序应用提交,merge commit 沿当前分支的第一父提交路径走,正常处理。功能没变,架构变了,这个问题自己就消失了。
不只是功能,是完整交付
需求包做完之后,我们又接着做了:
- 多项目批量报告
:一次把多个项目全跑完生成总报告。像我们 Java 的 Spring Cloud 微服务,一个需求动可能会动好几个项目,这个功能就是给这种场景用的 - 重命名识别
:文件重命名能在报告里正确识别和展示,标记为🟣重命名,之前没有这个 - 差异快速定位
:报告里加了「上一个差异」「下一个差异」导航按钮,体验跟 IDE 里看 diff 一样

- UI 优化
:界面布局调整,操作更顺 - 导出提示精简
:信息提示更清晰
638 条消息,缝缝补补的搞了 3 天,感觉功能应该差不多了。
我的真实结论
第一,模型确实有差距。 GPT 的理解深度在复杂需求上明显更强。它能从你的描述反推出你没说清的意图,能指出你方案里的缺陷。
第二,前两次失败不是白费的。 正是因为跟 Copilot 和 Claude Code 来回了那么多轮,我才学会了怎么跟 AI 描述需求——举例比抽象重要,说清约束比说清目标重要,让 AI 先分析比直接写代码稳。
第三,AI 也会忠实地帮你犯错的。 如果你自己都不知道要什么,AI 会精准地帮你实现一个错误的东西。Codex 没做错——它完美地自动化了我那个有漏洞的手工流程。反而是这个错误的结果,让我自己发现了自己的认知盲区。
我后来把聊天记录导出来看了一遍,发现这 638 条消息里最值钱的不是 GPT 写了什么代码——是我跟它协作的过程中,把我自己的认知缺陷给修了。
谢谢你看我的文章。有啥想法评论区聊。
夜雨聆风