Git分支发起Pull Request时混入其他分支变更的问题及修复
问题修复方案
第一步:确认问题根源
先通过以下命令明确分支间的关联和变更状态:
- 拉取远程仓库最新状态:
git fetch origin - 检查branch-topic-95的变更是否已合并到远程staging:
git log origin/staging --oneline | grep <branch-topic-95的提交ID或关键词> - 查看分支提交历史对比:
git log --graph --oneline branch-topic-100 origin/staging
大概率是你的topic分支创建时基准选错(基于branch-topic-95而非staging),或是branch-topic-100的PR错误将95的变更带入了staging分支。
第二步:针对性修复问题
场景1:branch-topic-100的PR尚未合并到staging
- 切换到问题分支:
git checkout branch-topic-100 - 基于最新远程staging创建干净分支:
git checkout -b branch-topic-100-clean origin/staging # 将原分支的专属变更逐一复制到新分支 git cherry-pick <branch-topic-100的第一个专属提交ID>..<最后一个专属提交ID> - 用新分支替换原PR的关联分支,关闭旧PR即可。
场景2:branch-topic-100的PR已合并,导致staging混入95的变更
- 切换到staging分支并拉取最新代码:
git checkout staging && git pull origin staging - 回滚branch-topic-95的变更:
- 若PR是通过合并提交进入staging:
git revert -m 1 <合并提交的ID>(-m 1表示保留staging原有历史) - 若95的变更是单个提交:
git revert <branch-topic-95的提交ID>
- 若PR是通过合并提交进入staging:
- 将回滚后的staging推送到远程:
git push origin staging
第三步:规范后续分支创建流程
之后新建topic分支时,必须基于最新的远程staging,执行命令:
git fetch origin git checkout -b branch-topic-new origin/staging
第四步:清理冗余分支
删除不再需要的旧分支:
- 本地分支:
git branch -D branch-topic-100 branch-topic-95 - 远程分支(确认无用后):
git push origin --delete branch-topic-95
内容的提问来源于stack exchange,提问作者Adnan.
相关产品推荐
相关产品推荐

