GitHub Actions重置分支后PR未显示文件删除差异问题
GitHub Actions重置beta分支至master的异常问题
我使用以下GitHub Actions工作流将beta分支重置至master分支的最新提交:
name: Reset Beta Branch on: workflow_dispatch jobs: resetBeta: name: Reset Beta Branch runs-on: ubuntu-latest steps: - name: Checkout master uses: actions/checkout@v3 with: ref: master - id: commit uses: pr-mpt/actions-commit-hash@v2 - name: Checkout Beta Branch uses: actions/checkout@v3 with: ref: beta - name: Get Current Branch Name run: git branch - name: Set Git User run: | git config user.name github-actions git config user.email github-actions@github.com - name: reset branch to master run: | git fetch --all git reset --hard origin/master - name: Create Pull Request uses: peter-evans/create-pull-request@v4 with: title: Changes by reset-beta-branch action body: Reset beta branch back to head of master ${{ steps.commit.outputs.short }} add-paths: . commit-message: resetting beta branch to master branch: reset-beta delete-branch: true
预期结果
- diff应显示test.txt文件从beta分支被删除
实际结果
- test.txt未出现在PR的diff中,但已从待合并至beta分支的reset-beta分支中消失
问题原因
- 工作流中使用
git reset --hard origin/master属于历史重写操作,GitHub PR的diff默认对比的是两个分支的当前提交快照,不会展示历史变更带来的文件删除,因为这种操作本质是让本地beta分支直接指向master的提交,而非生成新的提交来修改文件。 - 先checkout master再切换到beta的操作,可能导致本地仓库状态残留,PR动作无法正确识别分支的实际变更。
修复方案
修改工作流,直接基于master创建新分支再向beta发起PR,确保diff能正确展示文件删除:
name: Reset Beta Branch on: workflow_dispatch jobs: resetBeta: name: Reset Beta Branch runs-on: ubuntu-latest steps: - name: Checkout full repository uses: actions/checkout@v3 with: fetch-depth: 0 # 拉取完整仓库历史,保证分支对比准确 - id: commit uses: pr-mpt/actions-commit-hash@v2 with: ref: master # 获取master分支的提交哈希 - name: Configure Git user run: | git config user.name github-actions git config user.email github-actions@github.com - name: Create reset branch from master run: | git checkout -b reset-beta origin/master - name: Create Pull Request uses: peter-evans/create-pull-request@v4 with: title: Reset beta branch to latest master body: Reset beta branch back to head of master (${{ steps.commit.outputs.short }}) commit-message: Reset beta branch to master's latest commit branch: reset-beta delete-branch: true base: beta # 指定PR目标分支为beta
方案说明
- 直接从master分支创建
reset-beta分支,确保该分支完全继承master的文件状态(无test.txt) - 向beta分支发起PR时,GitHub会对比beta与reset-beta的快照差异,test.txt的删除会清晰显示在diff中
- 拉取完整历史避免分支对比时出现状态异常
内容的提问来源于stack exchange,提问作者aphexlog
相关产品推荐
相关产品推荐

