首页/开发/Git 与协作速查/推送后撤销过时审批
协作与代码评审75 条

推送后撤销过时审批

开启「Dismiss stale pull request approvals when new commits are pushed」后,新提交会清空已有批准,确保批准对应的是评审过的代码版本。

Git 与协作速查开发更新于 2026-10-13

撤销过时审批是什么

开启「新提交推送后撤销过时审批」之后,任何新增提交都会清空已有的批准记录,确保批准对应的是评审人真正看过的那个版本。它解决的是「批准之后又被追加未经评审的改动」这类问题,代价是每次补提交都需要重新确认一次。

基本信息

GitHub 位置分支保护设置中的撤销过时审批选项
GitLab 对应审批规则中配置新提交时移除已有审批
目的防止批准之后被追加未经评审的改动
效果已有批准被标记为过时,需要重新请求评审

典型使用场景

  • 主干等受保护分支上强制批准与代码版本一一对应
  • 合规或审计要求批准有明确对应的提交
  • 修复小问题后重新请评审人确认
  • 排查「明明批准了为什么还不能合并」
  • 在评审节奏快、补提交频繁的仓库里用它兜底

观察行为

观察行为
git push origin feature/login              # 推送新提交后原有批准会被标记为过时
git log --oneline -3                        # 确认本轮推送了哪些提交
gh pr view 128 --json reviewDecision,mergeStateStatus  # 查看当前评审与可合并状态

行为对照

动作结果后续
追加新提交已有批准被标记过时需要重新请求评审
只改描述或标签批准通常保留不影响合并
强推改写历史按平台实际状态判断以平台当前显示为准
若团队习惯用追加小改动的方式迭代,先与评审人约定:改动很小可以重新确认一次,改动较大就重新走一轮完整评审。
撤销机制变严格之后合入节奏会变慢,这是刻意的权衡;需要豁免的场景应显式写进团队规范,而不是靠临时沟通。

配合做法

  • 在团队规范里写清哪些改动需要重新评审
  • 用更小的提交减少重新评审带来的往返
  • 评审人对增量改动给出明确结论,而不是默认继续有效
  • 发现合并受阻时先检查批准是否已经过时

易错点

  • 撤销机制变严格后合入节奏会变慢,团队需要接受这种权衡,或明确豁免场景
  • 强推覆盖历史时平台行为可能不同,评审侧应以平台当前显示的状态为准
  • 不了解这项设置的人会以为批准丢了,反复重新请求评审,浪费双方时间
  • 选择关闭撤销而依赖人工判断时,批准与实际评审版本很容易脱节

数据来源与参考

  • GitHub Docs:About protected branches(dismiss stale approvals)
  • GitLab Docs:Merge request approvals(reset approvals)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌