
周五下午四点半,离下班还有半个钟头,李工把九个文件、九百行改动一次性合并进了主分支。主分支是团队共用的那条线,合并就是把他的改动并进去。
那九百行是他用 AI 赶了两天攒的,中间只提交过三回。他合并前扫了一遍,看着挺顺。周一早上九点,对账的同事甩来一张截图:三天里有 38 单金额对不上。
查出来是九百行里的一段折扣计算,四行写错。他打开版本记录想退,发现这两天又叠了 11 次别人的提交,带进来 5 个新功能。退回这一步,怎么就成了两头堵?
为什么会这样
答案先给:一次改动能被整块拿掉,它才敢上线;一个档里塞的东西越多,出事时手越抖。
代码存在版本记录里,每次提交就是存一个档。想退回去,退的不是"那四行",是"那一整个档"。档里装了多少,退的时候就跟着退多少。
九百行如果分成十二次交,九百除以十二正好七十五,那四行只可能落在其中一次里。退一次,退七十五行,四分钟跑完验证。
混成一个档就没这条道了。要从九百行里挑出该退的四行,得逐段比对:一行看十四秒(假设),九百行一万两千六百秒,三个半钟头。挑完还得重验两小时,再和那五个功能的负责人逐个确认半小时,加起来六个钟头,是四分钟的九十倍。
这就像一车混装货。一车只装一家的,退一家卸一车,四分钟。一车混了五家的九百件,退一家得整车重装,六个钟头。

怎么解决
三条,从最便宜的开始。
一次只装一样东西: 合并前问自己一句,这坨改动能用一句话说清吗。说不清就拆开,成本是十分钟的拆分功夫,不花钱。改完差多少:九百行变十二次,回退从六个钟头压到四分钟。
每次提交写一行说明: 写清改了什么、坏了退哪一次,成本三十秒。改完差多少:出事时省掉三个半钟头的比对,那一行直接告诉你退哪个档。
合并前跑一遍跟钱有关的测试: 下单、算价、退款这几条路径,别的先不写,成本头一回半天。改完差多少:那四行在合并前就被拦住,六个钟头的账根本不发生。
别踩三个坑。
攒一天再提交。拆的意义全在粒度,攒回去等于没拆。
拆了不写说明。退的时候还是靠猜,等于只做了一半。
拿"撤销这次合并"去处理已经叠了别人提交的分支。那个按钮只在你后面没人叠东西时才安全。
平台怎么管这些问题
统一入口。 五款工具走同一个地址、一份密钥。在这个场景里,那九百行是哪几轮请求攒出来的,翻得到源头。
请求留痕。 每次调用留一条,写清谁、几点、哪个模型、用了多少 token(token 是模型读写文字的计数单位,像手机流量,用多少算多少)。在这个场景里,周一早上能直接翻到周五下午四点那一轮。
改动留档。 模型返回的改动对照存下来,就是一行行标出加了什么、删了什么的 diff。在这个场景里,那四行是哪一轮冒出来的,事后查得到。
按会话分开。 九个文件别塞进同一个会话里问。在这个场景里,回头能一段段对上是哪次问的,九百行不会变成一个黑盒。
用量归集。 按人、按项目出账。在这个场景里,六个钟头的返工折成钱,落到具体项目上。
失败告警。 调用失败或超时自动发消息。在这个场景里,不用等到周一早上那张截图才知道。
这些功能平时谁管,四件事。
谁能改规则:提交前那条"一次只装一样"的规矩,只有技术负责人能改,改完在群里贴一行。
谁能批减免:额度超了要加,走团队负责人一个人签字,不到处找人。
出事能不能倒查到人:每条调用带账号,先查出事前那两天的记录,能指到具体的人和那一轮的原话。
告警发给谁:发当天值班的那个人,名字写在值班表上,不发到一个群里。
这笔钱值不值
掏钱的是团队负责人,不是写代码的人。
一次返工六个钟头,按一小时一百五十元估(假设),九百元。一个月碰上两回,一千八百元。
快多少:回退从六个钟头到四分钟,一回省下五个多钟头。
多久回本:拆提交不花钱,改的是习惯,头一回就回来。写测试那半天按四个钟头算,六百元,一回返工就抵掉。
行业规则怎么管这件事
Google 的工程实践文档里有一页,叫 Small CLs,2019 年 9 月公开,挂在 google.github.io/eng-practices 上。CL 是 changelist 的缩写,指一次交上去等人看的改动,别的团队管它叫补丁或者拉取请求。
那一页的原话是:一百行通常是合理的改动大小,一千行通常太大,最终由评审的人判断。
它还写了该多大:合适的改动是一个自包含的变更,只解决一件事。
落回周五那九百行。九百贴着它说的上限,还压在九个文件上,横跨的模块越多,看的人越没法在脑子里拼出全貌。按这份规矩,那九百行本不该是一个档,该是十二个。
周一早上九点那张截图,李工后来把九百行拆成十二次重交。多花的不是写代码的工夫,是那六个钟头的退路。同一批活,第二回他四分钟就退了回去。
Token工厂:贰号token工厂
Codex、Claude Code、Trae、Qoder 要用的模型 token,统一接入、统一计费。
点这里看详情 →