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 }}
三、配置必要权限与分支规则
- 设置Workflow权限:进入仓库的「Settings」→「Actions」→「General」,在「Workflow permissions」里勾选「Read and write permissions」,确保
GITHUB_TOKEN有审批PR的权限。 - 保留分支保护规则:在仓库的「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
相关产品推荐
相关产品推荐

