无法完全合并Git提交,如何合并重复提交并理清分支结构?
Git提交历史清理方案
问题背景
提交Paises ISO 3166-1均修改相同文件,最终文件状态一致,但分支前的蓝线上存在多个该提交。尝试git rebase -i c5d892b4后仍未达到预期,需求如下:
- 仅保留一个
Paises ISO 3166-1提交 - 让分支从
custom分出的关系清晰可见 - 删除指定提交:0a691a8c、cc4861a3、452b4608、846721da
- 恢复到合并操作搞砸前的状态
解决步骤
1. 先恢复到合并前的干净状态(可选)
如果当前rebase后的状态已混乱,通过reflog找回之前的正确历史:
- 执行
git reflog,找到合并操作前的HEAD记录(比如类似HEAD@{n}: commit: 合并前的提交说明) - 执行
git reset --hard <对应哈希值>,回到未搞砸的状态
2. 交互式rebase清理提交
执行命令启动交互式rebase,目标覆盖c5d892b4及之前的提交:
git rebase -i c5d892b4~1
在弹出的编辑器中:
- 找到要删除的4个提交,将它们行首的
pick改为drop(或直接删除对应行) - 找到所有重复的
Paises ISO 3166-1提交,只保留一个,其余同样改为drop - 保存并退出编辑器,Git会自动重新生成干净的提交历史
3. 验证与推送
- 执行
git log --graph --oneline查看历史,确认分支从custom分出的关系清晰,且仅保留了一个目标提交 - 私有仓库直接推送:
git push;公共仓库需强制推送(提前告知协作成员):
git push --force-with-lease
内容的提问来源于stack exchange,提问作者Daviid
相关产品推荐
相关产品推荐

