GitHub Actions自动生成Dev转Main PR显示历史提交的问题求助
自动从dev到main的PR显示全部历史提交问题
分支流程
- 功能/问题开发基于
issue_branch,从dev分支创建 - 开发测试完成后,提交
issue_branch到dev的PR,人工审核后合并 - 当该PR合并到
dev时,触发create-main-pr任务,自动创建dev到main的PR
问题
自动生成的main分支PR会显示所有过往版本的提交历史,哪怕只在issue_branch做了一处小改动(单个提交)也会出现这个问题,并非仅在 squash 合并时发生。
预期结果
该PR应仅展示上次发布以来的新提交。已知问题和SHA有关,但不清楚修复方案。
当前使用的GitHub Actions代码
create-main-pr: runs-on: ubuntu-latest timeout-minutes: 10 if: | github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev' steps: - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.MY_SECRET }} - name: Create Pull Request id: create-pr uses: peter-evans/create-pull-request@v5 with: token: ${{ secrets.MY_SECRET }} commit-message: "chore: promote dev to main" branch: promote-dev-to-main delete-branch: true title: "🚀 Promote Dev to Main" body: | ## Automated Promotion PR This PR was automatically created to promote changes from `dev` to `main`. ### ✅ Pre-merge Checklist - [ ] Changes have been reviewed - [ ] Tests are passing - [ ] Documentation is up to date ### 📝 Notes - This PR was automatically generated - Please review carefully before merging - Manual merge required labels: | automated promotion base: main branch-suffix: timestamp
已尝试的操作
发布完成后同步main与dev分支,创建issue_branch并做一处小改动,合并至dev后触发任务生成PR,但问题依旧。
修复方案
1. 确保发布后dev与main完全同步(根源性解决)
每次将main发布后,必须强制将dev重置为main的状态,避免历史分叉:
# 可在发布流程的Action中执行此逻辑 git checkout dev git fetch origin main git reset --hard origin/main git push origin dev --force
这样后续从dev开出的issue_branch提交历史会完全基于最新的main,合并到dev后,dev和main的历史只会有新提交的差异,不会出现分叉。
2. 修改自动PR的创建逻辑,以main为基准创建临时分支
当前Action直接用dev分支创建PR到main,若历史分叉会显示所有差异提交。改成先基于main创建临时分支,再合并dev的变更,PR差异就只会是新提交:
create-main-pr: runs-on: ubuntu-latest timeout-minutes: 10 if: | github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'dev' steps: - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.MY_SECRET }} - name: Prepare Promotion Branch run: | git checkout main git pull origin main git checkout -b promote-dev-to-main git merge origin/dev --no-ff --no-edit git push origin promote-dev-to-main - name: Create Pull Request id: create-pr uses: peter-evans/create-pull-request@v5 with: token: ${{ secrets.MY_SECRET }} commit-message: "chore: promote dev to main" branch: promote-dev-to-main delete-branch: true title: "🚀 Promote Dev to Main" body: | ## Automated Promotion PR This PR was automatically created to promote changes from `dev` to `main`. ### ✅ Pre-merge Checklist - [ ] Changes have been reviewed - [ ] Tests are passing - [ ] Documentation is up to date ### 📝 Notes - This PR was automatically generated - Please review carefully before merging - Manual merge required labels: | automated promotion base: main branch-suffix: timestamp
3. 统一合并方式,避免历史混乱
确保所有合并到dev的PR使用保留完整提交历史的合并方式(非squash、非rebase),这样dev的历史是线性的,和main同步后不会出现SHA不一致的分叉问题。
内容的提问来源于stack exchange,提问作者mywn9
相关产品推荐
相关产品推荐

