用途:在刚完成一次非平凡 bug 修复或功能实现后,丢弃原实现,从基线分支重新构建,并应用第一次实现中学到的经验。第一次是探索,第二次才是解决方案。琐碎改动或动手前已完全理解的工作不适用。
主要能力与流程:
- 开始前要求工作区干净,若有未提交内容则拒绝继续;记录当前分支为 <first-pass>。
- 解析基线分支,顺序为:用户显式提供的 ref、上游跟踪分支(git rev-parse --abbrev-ref --symbolic-full-name @{u},且不等于 first-pass 分支)、默认分支(git symbolic-ref refs/remotes/origin/HEAD,回退 main 再 master)。
- 列出第一次实现中改动的测试文件:git diff --name-only <base>...<first-pass> -- '/test' '/spec' '/tests/',并按项目调整模式。
- 说明计划(first-pass 分支、基线、新分支名 <first-pass>-v2、将沿用的测试),等待确认。
- 从基线创建重写分支:git switch -c <first-pass>-v2 <base>,不修改 first-pass 分支。
- 原样沿用测试:git checkout <first-pass> -- <test-paths>,提交信息为 second-pass: carry over tests from first pass。
- 重读任务描述,再读一次 first-pass 差异(git diff <base>..<first-pass>)以回忆问题形态和边界情况,然后关闭差异、从零实现,不复制代码块,靠理解重新输入。持续运行保留的测试作为行为契约。
优化维度:重写须在优雅性(更少活动部件、更短、意图更清晰)、健壮性(第一次发现的边界情况成为一等公民,只做针对性处理)、架构契合(遵循周边代码约定)三方面同时优于第一次实现;任一不达标则重置分支重试或放弃保留第一次实现。
收尾报告:first-pass 分支、重写分支、基线;行数变化(git diff --shortstat 对比);一段结构性变化说明;保留测试是否通过;建议用户用 git diff <first-pass>..<first-pass>-v2 比较后自行选择合并哪个分支。不要删除 first-pass 分支,由用户决定。
限制:需要干净工作区;依赖 git 分支与测试文件命名约定;不自动删除分支;未提供具体平台、收费或效果信息。