You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub中如何自动批准还原Pull Request,其他变更需审核?

GitHub自动批准还原Pull Request的实现方案

当然可以实现针对还原类PR的自动审批,同时保留其他代码变更的审核要求,核心是用GitHub Actions配合分支保护规则来做精准控制。

一、先明确要检测的还原PR条件

你需要先定义哪些还原PR符合自动审批的标准,比如:

  • PR标题包含Revert或还原关键词(GitHub自动生成的还原PR都会带这个标题)
  • 被还原的提交是近期的(比如7天内)
  • PR无代码冲突(处于可合并状态)

二、用GitHub Actions写自动审批流程

在仓库的.github/workflows目录下新建一个auto-approve-revert-prs.yml文件,内容如下:

name: 自动批准还原类PR
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  auto-approve-revert:
    runs-on: ubuntu-latest
    steps:
      # 第一步:判断是否是还原PR
      - name: 检测PR是否为还原类型
        id: check_revert
        run: |
          if echo "${{ github.event.pull_request.title }}" | grep -qi "revert"; then
            echo "is_revert=true" >> $GITHUB_OUTPUT
          else
            echo "is_revert=false" >> $GITHUB_OUTPUT
          fi

      # 第二步:判断被还原的提交是否是近期的
      - name: 验证提交时间是否在7天内
        id: check_commit_age
        if: steps.check_revert.outputs.is_revert == 'true'
        run: |
          # 获取PR基准分支的最近提交时间,也可以通过API获取原提交的时间做更精准判断
          COMMIT_DATE=$(git show ${{ github.event.pull_request.base.sha }} --format=%ci | head -n1)
          COMMIT_TIMESTAMP=$(date -d "$COMMIT_DATE" +%s)
          NOW=$(date +%s)
          # 计算天数差
          DIFF_DAYS=$(( (NOW - COMMIT_TIMESTAMP) / 86400 ))
          if [ $DIFF_DAYS -le 7 ]; then
            echo "is_recent=true" >> $GITHUB_OUTPUT
          else
            echo "is_recent=false" >> $GITHUB_OUTPUT
          fi

      # 第三步:检查PR是否无冲突
      - name: 验证PR是否可合并(无冲突)
        id: check_mergeable
        if: steps.check_revert.outputs.is_revert == 'true' && steps.check_commit_age.outputs.is_recent == 'true'
        run: |
          if [ "${{ github.event.pull_request.mergeable }}" == "true" ]; then
            echo "no_conflict=true" >> $GITHUB_OUTPUT
          else
            echo "no_conflict=false" >> $GITHUB_OUTPUT
          fi

      # 第四步:满足所有条件则自动批准
      - name: 自动批准PR
        if: steps.check_revert.outputs.is_revert == 'true' && steps.check_commit_age.outputs.is_recent == 'true' && steps.check_mergeable.outputs.no_conflict == 'true'
        uses: hmarr/auto-approve-action@v3
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

三、配置必要权限与分支规则

  1. 设置Workflow权限:进入仓库的「Settings」→「Actions」→「General」,在「Workflow permissions」里勾选「Read and write permissions」,确保GITHUB_TOKEN有审批PR的权限。
  2. 保留分支保护规则:在仓库的「Settings」→「Branches」里,给目标分支设置「Require a pull request before merging」和「Require approvals」(比如至少1个审核),这样非还原PR必须走人工审核,而符合条件的还原PR会被自动审批满足要求。

四、自定义调整建议

  • 可以修改时间阈值:把DIFF_DAYS -le 7里的7改成你需要的天数,比如3天。
  • 增加用户限制:如果只允许特定团队或用户发起的还原PR自动审批,可以在Workflow里添加检测提交者的步骤。
  • 更精准的还原检测:如果担心误判,可以通过GitHub API获取PR的diff内容,判断是否是完整的提交还原。

内容的提问来源于stack exchange,提问作者user835943

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:15:33