排障:CC 改多了怎么办

CC 改多了不要立刻让它继续修。先让它列出全部改动,区分必须保留、可以讨论和应该撤回,再收窄回原任务范围。

收窄模板

CC 改多了时,第一反应不是“继续修一下”,而是暂停。继续修往往会把无关改动越滚越大。

本次修改超出范围了,请先暂停。

请不要继续改文件,先列出:
1. 所有被修改的文件。
2. 每个文件和原任务的关系。
3. 哪些修改是完成原任务必须的。
4. 哪些修改是无关优化、格式化或重构。
5. 如何只保留必要修改。

请先给出收窄方案,不要直接执行。

什么叫改多了

改多了通常分三类:

类型例子处理
范围扩大顺手改无关页面收窄到原目标
技术扩大引入依赖、重构架构先撤回或单独评审
文件扩大格式化、生成产物、临时文件分类确认是否保留

先看 diff

请只分析当前 diff,不要修改文件。

请按文件分类:
1. 和原始任务直接相关。
2. 可能相关,但需要确认。
3. 明显无关。
4. 可能是格式化、生成文件或临时文件。

请给出建议:哪些保留,哪些撤回,哪些需要我人工确认。

先不要让 CC 自己撤

很多人发现改多了,会马上说“把多余的撤掉”。这一步很危险,因为 CC 可能分不清哪些是用户手动改的,哪些是它刚才改的。

更稳的做法是先生成撤回计划。

请先生成撤回计划,不要执行。

要求:
1. 列出准备撤回的文件。
2. 说明每个文件为什么属于超范围修改。
3. 如果只撤回文件里的某几段,请列出具体片段。
4. 标出可能包含用户手动改动的地方。
5. 等我确认后再执行。

判断哪些改动该保留

类型处理
直接修复原问题保留
为修复原问题必须做的小调整保留,但说明理由
顺手优化暂缓或撤回
大范围格式化通常撤回
新依赖默认撤回,除非确认必须
生成产物根据项目规则判断,通常不手改
用户手动改动不允许覆盖

哪些改动可以暂缓

如果改动本身不错,但不属于当前任务,不要急着保留:

请把超范围但可能有价值的改动列为后续任务。

要求:
1. 不混入本次提交。
2. 说明它解决什么问题。
3. 说明为什么不属于当前任务。
4. 如果以后要做,怎么单独验收。

确认后再执行

可以按收窄方案处理。

要求:
1. 只保留完成原任务必须的修改。
2. 撤回无关优化和无关重构。
3. 不要丢失用户已有改动。
4. 完成后重新检查 diff 并解释。

不要丢用户改动

如果工作区里有你自己手动改过的内容,一定要先提醒 CC。

注意:工作区里可能有我手动改过的内容。

撤回超范围改动时:
1. 不要用 git reset --hard。
2. 不要直接覆盖整个文件。
3. 先说明准备撤回哪些具体片段。
4. 如果无法区分我的改动和你的改动,请停下来问我。

如果它已经装了依赖

你刚才引入了新依赖,请先暂停。

请说明:
1. 这个依赖是否是完成原任务必须的。
2. 有没有不引入依赖的方案。
3. 修改了哪些包管理文件。
4. 如果撤回依赖,需要撤回哪些文件变化。
5. 在我确认前不要继续安装或删除依赖。

如果已经改了很多文件

文件很多时,不要逐个让 CC 猜。先按目录和类型分组。

当前改动文件较多,请先分组。

请按下面格式输出:
1. 源码文件:
2. 样式文件:
3. 文档文件:
4. 配置文件:
5. 生成产物:
6. 包管理文件:
7. 其他:

每组说明和原任务的关系,以及建议保留还是撤回。

如果收窄后任务还没完成

撤回无关改动后,原任务可能还没完成。这时不要回到大范围修改,应该重新进入 Plan Mode。

无关改动已经收窄。

请重新进入 Plan Mode:
1. 原始目标是什么。
2. 当前还差什么。
3. 最小修改范围是什么。
4. 需要修改哪些文件。
5. 如何验收。

不要使用刚才被撤回的扩大方案。

收窄后的验收

请验证收窄结果。

要求:
1. 当前 diff 是否只剩原任务相关内容。
2. 是否撤回了无关重构。
3. 是否保留了必要修复。
4. 是否误删用户手动改动。
5. 是否需要重新 /verify。

防止下次再改多

下次执行同类任务前,请先提醒我设置边界。

边界包括:
1. 允许修改哪些文件。
2. 禁止修改哪些文件。
3. 是否允许安装依赖。
4. 是否允许格式化。
5. 验收标准是什么。

验收结果