← 中文资源

简体中文版本

大 PR 拆分工作流

把超大变更拆成可评审的切片:按层、按特性开关或按依赖顺序,每片独立保持绿色。

阅读英文原文

目标

巨型 PR 从来不是一个变更,而是几个被订书钉钉在一起的变更。沿着天然的缝拆开——预备重构、惰性模块、开关门控的接线、最终激活——一小时的扫视就变成四次专注的评审,每片独立可合并、可回滚。

步骤要点

  1. 找出天然缝隙:识别工作本身已有的边界——新模块与集成、数据层与 UI、独立子特性、预备性重构,形成切片计划。
  2. 按依赖排序、准备先行:重构与新抽象先落地,任何中间状态都编译通过且全绿。
  3. 用开关而非缺席来门控行为:按特性开关切片,代码路径以惰性方式合入而非半成品状态,生产行为保持关闭直到最后一片。
  4. 成系列评审带上下文:先给评审者系列全景图,每个切片评审都带着计划与前序上下文,而不是显得莫名其妙。
  5. 郑重收尾系列:最后一片翻转开关或拆除脚手架,收尾摘要链接全部切片供日后考古。

排错提示

中间提交不是绿的说明依赖顺序排错了,重构与抽象必须先行;模块写完才想合入是被迫攒大 PR 的根源,惰性合入加开关让集成持续发生;最后激活片要小到产品经理能读懂,行为变更的时刻应该清晰可见。

适用边界

拆分本身有协调成本,一两天的小改动直接评审更划算;特性开关的清理要进系列收尾清单,否则拆分留下开关债。

代码示例

mega-PR: gift-card payments (2,340 lines)  -> series:

  #1 prep: extract PaymentProvider interface
      (refactor, no behavior change, 118 lines)
  #2 core: gift-card provider module (inert,
      not registered, 612 lines)
  #3 data: card-balance table + migrations
      (additive, 214 lines)
  #4 wiring: register provider behind flag
      gift_cards=off (96 lines)
  #5 activate: flag default on + remove
      scaffolding (44 lines)

review experience: 5 focused reviews,
  each green at merge, revertable alone
  (vs 1 skim of 2,340 lines)