如何将含撤销合并提交的分支完整合并至Git master分支?
解决Git合并时忽略撤销合并中移除文件的问题
问题根源在于你之前撤销合并提交的操作,会让Git将那次合并的变更标记为“已拒绝”,后续合并回master时,Git会默认跳过这些内容。要完整合并所有新旧修改,包括被撤销的文件,可以通过以下两种方法处理:
方法一:交互式变基移除撤销操作(推荐,历史更整洁)
该方法会改写mybranch的历史,移除撤销合并的提交,让分支回到合并master后的状态,再重新应用后续修改:
- 切换到目标分支:
git checkout mybranch - 查看提交历史,找到撤销合并提交(x)的哈希值,以及该提交之前的mybranch节点(即合并master后、撤销操作前的那个提交)的哈希值,可通过
git log --oneline快速查看。 - 启动交互式变基:
git rebase -i <合并后撤销前的mybranch提交哈希> - 在弹出的编辑器中,找到撤销合并的那一行,将开头的
pick改为drop(或直接删除该行),保存并退出。Git会自动重新应用后续所有提交到合并master后的状态。 - 切换到master分支完成合并:
git checkout master git merge mybranch
方法二:合并时重新应用被撤销的合并(适合已推送的分支)
如果mybranch已经推送到远程仓库,不想改写历史,可以手动重新应用被撤销的合并内容:
- 切换到master分支:
git checkout master - 执行合并但暂不提交:
git merge --no-ff --no-commit mybranch - 找到当初撤销合并的提交哈希,执行樱桃拾取:
git cherry-pick -m 1 <撤销合并的提交哈希>注:
-m 1指定以master分支作为合并提交的父节点,因为合并提交包含两个父分支。 - 手动解决可能出现的冲突,完成提交:
git add . git commit
注意事项
- 操作前建议备份分支,避免失误:
git branch mybranch-backup - 方法一的变基操作会改写历史,若分支已推送,需和团队沟通后使用
git push --force-with-lease推送更新。
内容的提问来源于stack exchange,提问作者Siva Suriyan
相关产品推荐
相关产品推荐

