Git dev/stage/production分支部署流程的合并冲突解决方法
解决Git分支策略中的合并冲突与MR干净性问题
核心问题拆解
你的问题出在feature分支合并了dev的所有变更,导致向stage提MR时混入了不属于当前feature的内容。本质是feature分支的基线被污染了,原本应该基于stage,结果变成了基于dev的混合分支。
具体解决方案
1. 撤销已污染的feature分支(如果已经合并了dev)
如果你的feature分支已经合并了dev,先把这部分无关变更去掉:
# 查看提交日志,找到合并dev到feature之前的那个提交哈希(比如abc123) git log --oneline # 重置分支到合并前的干净状态 git reset --hard abc123
注意:如果已经推送到远程仓库,需要强制推送:
git push -f origin <你的feature分支名>,确保团队成员同步这个操作。
2. 调整QA测试的分支流转方式(避免污染feature基线)
不要直接把dev合并到feature,改用临时中转分支处理QA测试:
- 从你的feature分支拉一个临时分支:
git checkout -b temp-feature-qa - 把dev分支合并到这个临时分支,解决所有冲突:
git merge dev - 提交这个临时分支到dev的MR,用于QA测试
- QA通过后,回到原feature分支,把它变基到最新的stage分支:
git rebase stage - 此时向stage提MR,feature分支只会包含你自己的开发变更,不会带dev的其他内容
3. 日常开发保持feature分支纯净
- 开发过程中,定期把feature分支变基到最新的stage分支:
git rebase stage,提前解决和stage的冲突,避免后期批量冲突 - 永远不要直接合并dev到feature分支,保持feature的基线始终是stage
4. 处理无法变基的极端情况
如果因为代码改动太大,变基会产生大量冲突,可以用cherry-pick提取当前feature的提交到干净分支:
# 从最新的stage拉一个新的干净分支 git checkout -b clean-feature stage # 把原feature分支的所有提交哈希列出来,逐个cherry-pick到新分支 git cherry-pick <提交哈希1> <提交哈希2> ... # 解决每个cherry-pick的冲突,完成后用这个干净分支提MR到stage
优化后的工作流建议
把你的流程调整为:
- 从stage分支创建feature分支
- 开发期间定期
git rebase stage同步基线 - 拉临时分支合并dev,提交到dev做QA测试
- QA通过后,将原feature分支
rebase stage,提交到stage的MR - 发布阶段提交stage到production的MR
内容的提问来源于stack exchange,提问作者artbandin
相关产品推荐
相关产品推荐

