You need to enable JavaScript to run this app. 如何移除Git历史中的多个合并提交,实现无冲突线性提交历史?
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Git历史中的多个合并提交,实现无冲突线性提交历史?

解决方案

你需要的最终代码内容和现有master分支的内容完全一致,只是需要调整提交历史结构,因此可以直接复用已有合并结果,无需手动解决任何冲突,步骤如下:

方案一:批量cherry-pick(推荐)

  1. 基于提交c创建新的主线分支
git checkout -b new_master <提交c的哈希值>
  1. 批量拾取两个分支的全量提交,无需逐个指定提交哈希,填范围即可:
git cherry-pick <粉色分支首提交的父提交a^>..<粉色分支末提交b> <绿色分支首提交的父提交D^>..<绿色分支末提交E>
  1. 执行过程中如果出现冲突,不需要手动修改任何冲突文件,直接用现有master的正确代码覆盖当前目录所有内容:
git checkout master -- .
git add .
git cherry-pick --continue
  1. 重复步骤3直到所有拾取操作完成,此时new_master分支的代码和原master完全一致,提交历史就是无合并提交的线性结构。
  2. 将原master指向新的提交序列:
git checkout master
git reset --hard new_master
  1. 确认历史符合预期后强制推送即可:
git push --force

方案二:直接rebase(无需找提交范围)

如果你不想手动查询两个分支的提交范围,可以直接用rebase实现:

  1. 切换到master分支执行rebase:
git checkout master
git rebase c --no-merges
  1. 每次出现冲突时直接执行以下命令复用已有合并结果:
git checkout HEAD@{1} -- .
git add .
git rebase --continue
  1. 直到rebase完成后强制推送即可。

两种方案的核心都是复用你已经完成合并的正确代码结果,不管两个分支中间有多少提交,都只需要重复几次固定操作即可,不需要手动处理任何冲突。

内容的提问来源于stack exchange,提问作者halogenr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:18:04