Git重复合并提交问题:如何将Release分支修复合并到受保护的master分支?
解决Git合并时出现重复提交的问题
嘿,我来帮你搞定这个重复提交的麻烦!你遇到的问题大概率是因为Release/v1.0分支和master分支的历史有重叠——比如之前已经合并过部分提交,或者分支路径有交叉,直接用merge就会把重复的提交记录带进来。下面给你两种靠谱的解决方法:
方法一:用交互式Rebase整理提交(适合需要合并多个提交但去重的场景)
这种方式可以让你精准筛选需要合并到master的提交,剔除重复的部分:
- 先切回你的合并分支:
git checkout merge-to-master - 把分支重置到远程
master的最新状态,确保起点正确:git reset --hard origin/master - 启动交互式Rebase,以
Release/v1.0为基准整理提交:
这时候会弹出一个文本编辑器,里面列出了git rebase -i origin/Release/v1.0Release/v1.0上的所有提交。把不需要的提交(重复的那些)前面的pick改成drop,只保留你那个bug修复的提交。保存退出编辑器。 - 如果遇到冲突,先手动解决冲突,然后执行:
重复这个步骤直到Rebase完成。git rebase --continue - 最后把整理好的分支推送到远程(如果之前已经推过,需要强制推送,注意这个分支只有你在用才这么做):
之后就可以正常提交PR到git push -f origin merge-to-mastermaster了。
方法二:用Cherry-Pick只挑选目标提交(适合只需要合并单个bug修复的场景)
如果你的bug修复是单个独立提交,用这个方法更直接,完全不会引入重复提交:
- 先找到
Release/v1.0上那个bug修复提交的哈希值:
在输出里找到对应提交的一串字符(比如git log origin/Release/v1.0a1b2c3d),复制下来。 - 切回你的合并分支并重置到远程
master最新状态:git checkout merge-to-master && git reset --hard origin/master - 把目标提交“摘”到当前分支:
git cherry-pick a1b2c3d - 如果有冲突,解决后执行:
git cherry-pick --continue - 推送分支(需要强制的话用
git push -f),然后提交PR即可。
注意事项
- 强制推送
merge-to-master前,一定要确认这个分支只有你自己在使用,避免影响其他人的工作。 - 如果你之后还要维护
Release/v1.0分支,推荐用cherry-pick,不会打乱Release分支的历史;如果是想把Release/v1.0的所有新提交都合并到master且去重,rebase更合适。
内容的提问来源于stack exchange,提问作者dave0688
相关产品推荐
相关产品推荐

