如何用GitHub Action自动移除PR中指定文件的变更?
方案可行性
这个方案完全可行,但要注意:Fork仓库发起的PR默认GitHub Action是只读权限,得先调整仓库的Action权限,或者用PAT令牌给Action开写入权限,才能修改PR分支并推送变更。
具体实现步骤
1. 编写Action工作流文件
在你的上游仓库 .github/workflows/ 目录下新建 exclude-config-files.yml,内容如下:
name: 自动排除配置文件变更 on: pull_request: types: [opened, synchronize] permissions: contents: write # 授予Action写入仓库的权限 jobs: clean-config-changes: runs-on: ubuntu-latest steps: - name: 拉取PR分支代码 uses: actions/checkout@v4 with: ref: ${{ github.head_ref }} fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - name: 重置指定配置文件到上游主分支版本 run: | # 这里列出要排除的文件,多个用空格分隔 TARGET_FILES="mkdocs.yml another-config.yaml" for FILE in $TARGET_FILES; do # 从上游main分支拉取文件的原始版本(如果你的主分支是master,替换成master) git fetch origin main git checkout origin/main -- $FILE done - name: 提交并推送变更 run: | git config user.name "GitHub Action Bot" git config user.email "action-bot@github.com" # 检查是否有变更需要提交 if git diff --quiet; then echo "没有配置文件变更需要排除,直接结束" exit 0 fi git commit -m "chore: 自动移除配置文件变更" git push
2. 配置仓库Action权限
进入仓库的 Settings → Actions → General,找到「Workflow permissions」区域,选择「Read and write permissions」并保存。这样默认的GITHUB_TOKEN就有了分支写入权限。
3. 可选:冲突处理优化
如果PR里的配置文件和上游有冲突,上面的脚本会直接覆盖成上游版本。要是需要更友好的提示,可以修改重置步骤的脚本:
TARGET_FILES="mkdocs.yml another-config.yaml" for FILE in $TARGET_FILES; do git fetch origin main git checkout origin/main -- $FILE if git diff --name-only | grep -q "$FILE"; then echo "已重置文件 $FILE 为上游主分支版本" else echo "文件 $FILE 与上游版本一致,无需操作" fi done
注意事项
- 最好在PR模板里提前说明:配置文件的修改不会被合并到上游,Action会自动移除这些变更,避免贡献者疑惑。
- 如果贡献者的分支开启了保护规则,得调整规则允许Action推送变更。
- 要是不想直接修改贡献者的分支,也可以改成在Action里新建一个分支,排除配置文件后提交,然后在PR里留言让维护者合并这个新分支。
内容的提问来源于stack exchange,提问作者Evolve
相关产品推荐
相关产品推荐

