首页/开发/代码质量与评审速查/Draft PR:未完成改动的共享方式
代码评审64 条

Draft PR:未完成改动的共享方式

把未完成的改动以草稿(Draft)状态推送:可跑 CI、可收集早期反馈,同时明确表示暂不可合并,避免评审者误判。

Draft PR 是什么

草稿(Draft)是 GitHub 与 GitLab 都提供的状态:把还没完成的改动先推上去,CI 照常运行,评审者能看到进展,但明确表示暂不可合并。它化解的是一对矛盾——想早点暴露构建与测试问题,又不想让评审者把半成品当成正式提交来读。

基本信息

对应名称GitHub Draft pull request / GitLab Draft merge request
触发方式创建时选 Draft,或在标题前加 Draft: 前缀
CI 行为照常触发流水线,提前暴露构建与测试问题
状态切换点 Ready for review 转为正式评审

典型使用场景

  • 大改动想先跑一轮 CI:早期发现编译错误与失败用例
  • 方案还想听反馈:先让人看结构,避免做完才发现方向不对
  • 依赖尚未合并:本改动必须等上游落地后才能转正
  • 长任务分支:保持可见度,避免在本地囤积数千行未提交代码
  • 实验性改动:明确告知团队不打算合并,只作讨论素材

转正前的自查

  • 描述是否完整:背景、改动范围、验证方式都写清楚
  • 流水线是否全绿:构建、测试、静态检查都通过
  • 遗留项是否交代:注明后续由谁在哪个任务里处理
  • 想被重点看的部分是否指明:替评审者标出最需要反馈的地方

状态约定与期望行为

状态是否请求评审期望行为
Draft否不进入评审队列,评论视为早期讨论
Ready for review是进入队列,按正常时限响应
长期草稿否作者主动关闭或更新说明,避免腐烂

用命令行切换状态

用命令行切换状态
gh pr create --draft --title "refactor: 拆分订单服务" --body "结构还在调整,先跑一轮 CI"
gh pr view --json isDraft    # 确认当前是否为草稿
gh pr ready                  # 转为正式评审
gh pr ready --undo           # 退回草稿状态
草稿适合「先跑 CI 再定方案」的节奏:拿到真实的失败用例,比在本地反复猜测要快得多。
草稿阶段不等于免检:流水线失败同样要修,否则转正后仍然卡在最开始那一步。
长期草稿会腐烂:分支越放越难合并,团队也分不清哪些是废弃工作,最好约定转正或关闭的期限。

易错点

  • 草稿长期不转正:团队当作废弃分支,代码逐渐腐烂,合并冲突越积越多
  • 在草稿上反复强推:早期评论指向的代码已不存在,讨论无法追踪
  • 误以为草稿不跑 CI:流水线照跑,配置错误会长期占用构建资源
  • 把草稿当私人备份:占着团队可见的评审队列,干扰优先级判断
  • 把草稿当作不写描述的借口:转正时描述仍缺失,评审者只能靠猜

数据来源与参考

  • GitHub Docs · Draft pull requests
  • GitLab Docs · Draft merge requests
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌