如何移除Git提交历史中间的合并提交?
删除提交历史中的合并提交
直接用git rebase -i看不到合并提交是因为默认rebase会线性化提交历史,自动忽略合并记录。你可以用带--rebase-merges参数的rebase命令来保留并编辑合并提交:
- 确定基准提交ID:找到第一个要删除的合并提交的前一个提交(比如你示例里的
commit 2的ID),作为rebase的起点。 - 启动交互式rebase并保留合并:执行命令:
旧版本Git可以用git rebase -i --rebase-merges <commit2的ID>-p(--preserve-merges)替代--rebase-merges,不过前者已被标记为废弃,优先使用后者。 - 编辑提交列表:在弹出的编辑器里,找到那两行对应合并提交的记录(格式类似
merge -C <合并提交ID> develop into branch),直接删除这两行。 - 完成rebase:保存并退出编辑器,Git会自动重新应用后续的所有提交,跳过你删除的那两个合并。如果过程中出现冲突,解决冲突后执行
git rebase --continue即可。
注意事项
- 如果这个分支已经推送到远程仓库,完成本地修改后需要强制推送:
用git push --force-with-lease--force-with-lease比直接--force更安全,能避免覆盖其他人的推送。但执行前一定要和团队成员沟通,因为这会修改公共提交历史。 - 如果你担心rebase出错,可以先创建一个临时分支备份当前状态:
git branch backup-branch
内容的提问来源于stack exchange,提问作者Christopher Yourth
相关产品推荐
相关产品推荐

