如何一次性为多分支的相同变更创建多个Pull Request
一次性为多分支创建相同变更Pull Request的解决方案
针对你需要为Release、Main、Demo三个分支同步热修复并创建PR的场景,以下是几种可落地的自动化方案:
1. 本地Git脚本自动化
通过编写Shell脚本,结合Git和代码托管平台的CLI工具(如GitHub CLI gh、GitLab CLI glab),一键完成cherry-pick、推送和PR创建操作。
示例脚本(GitHub环境)
#!/bin/bash # 配置参数 HOTFIX_COMMIT="你的热修复提交哈希值" RELEASE_BRANCH="release" MAIN_BRANCH="main" DEMO_BRANCH="demo" # 同步到Release分支(如果热修复已直接提交到Release,可跳过此段) git checkout $RELEASE_BRANCH git pull origin $RELEASE_BRANCH git cherry-pick $HOTFIX_COMMIT git push origin $RELEASE_BRANCH gh pr create --base $RELEASE_BRANCH --head $(git rev-parse --abbrev-ref HEAD) --title "紧急热修复:生产环境问题修复" --body "修复生产环境紧急问题" # 同步到Main分支 git checkout $MAIN_BRANCH git pull origin $MAIN_BRANCH git cherry-pick $HOTFIX_COMMIT git push origin $MAIN_BRANCH gh pr create --base $MAIN_BRANCH --head $(git rev-parse --abbrev-ref HEAD) --title "紧急热修复:同步到Main分支" --body "同步Release分支的热修复变更到Main" # 同步到Demo分支 git checkout $DEMO_BRANCH git pull origin $DEMO_BRANCH git cherry-pick $HOTFIX_COMMIT git push origin $DEMO_BRANCH gh pr create --base $DEMO_BRANCH --head $(git rev-parse --abbrev-ref HEAD) --title "紧急热修复:同步到Demo分支" --body "同步Release分支的热修复变更到Demo"
使用说明
- 提前安装并认证GitHub CLI(
gh auth login) - 脚本执行前替换
HOTFIX_COMMIT为实际的热修复提交哈希 - 如果遇到冲突,脚本会中断,解决冲突后重新执行即可
2. CI/CD流水线自动触发
利用代码托管平台的CI/CD工具(如GitHub Actions、GitLab CI),在热修复合并到Release分支后,自动同步变更到其他分支并创建PR。
示例GitHub Actions配置
name: 自动同步热修复到多分支 on: pull_request: types: [closed] branches: [release] jobs: sync-hotfix: if: github.event.pull_request.merged == true runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 with: fetch-depth: 0 - name: 配置Git身份 run: | git config user.name "GitHub Actions" git config user.email "actions@github.com" - name: 同步到Main分支并创建PR run: | git checkout main git pull origin main git cherry-pick ${{ github.event.pull_request.head.sha }} git push origin main:hotfix-sync-main gh pr create --base main --head hotfix-sync-main --title "自动同步:Release热修复到Main" --body "热修复合并到Release后自动同步" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: 同步到Demo分支并创建PR run: | git checkout demo git pull origin demo git cherry-pick ${{ github.event.pull_request.head.sha }} git push origin demo:hotfix-sync-demo gh pr create --base demo --head hotfix-sync-demo --title "自动同步:Release热修复到Demo" --body "热修复合并到Release后自动同步" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
使用说明
- 将此配置文件放在仓库的
.github/workflows/目录下 - 流水线会在Release分支的PR合并后自动触发
- 若同步时出现冲突,流水线会失败,需手动解决冲突后重新运行
3. 优化分支策略减少重复操作
调整分支管理流程,从根源减少重复PR的需求:
- 让Demo分支定期从Main分支拉取变更,而非单独同步热修复
- 热修复先合并到Release,再将Release分支合并到Main(而非cherry-pick),Demo同步Main即可
- 统一使用独立的热修复分支,合并到Release后,再基于该分支向Main和Demo提交PR
内容的提问来源于stack exchange,提问作者Arpit Jain
相关产品推荐
相关产品推荐

