Git如何修改已合并分支的提交信息,无需重合并且不丢失后续提交
这个需求完全可以实现,你之前操作触发合并提示是因为git rebase -r在包含合并提交的分支上使用HEAD~N回溯基点时,默认只会沿着合并提交的第一父提交(也就是原dev分支的提交线)计数,你选中的基点不对,导致Git尝试重建整个合并流程。
操作步骤
- 先备份当前dev分支,避免操作失误丢失内容:
git branch dev-backup
- 用
git log --oneline --graph查看提交哈希,记录三个提交的哈希值:
- D提交的父提交哈希(记为X)
- 原合并提交B的哈希(记为B)
- 原dev分支上B的前序提交A的哈希(记为A)
- 切换到原feature分支的最后一个提交F,执行交互式rebase修改D、E的提交信息:
git rebase -i X
在弹出的编辑页面中,将D、E对应的行开头的pick改为reword(可简写为r),保存退出后Git会依次弹出编辑页让你修改两个提交的信息,修改完成后原F提交会生成新的对应提交,记录这个新提交的哈希(记为F')。
4. 替换原合并提交B的父提交,不需要重新执行合并操作:
git replace --graft B A F'
这个命令会直接修改B提交的父节点指向,完全复用你之前已经完成的合并结果,不会触发合并冲突处理。
5. 把修改永久固化到提交链中,原有C、G、H、I提交会自动衔接在新的B提交之后,不会有任何丢失:
git filter-branch -- --all
注意事项
如果你的dev分支已经推送到远程仓库,修改完提交链后需要执行git push origin dev --force强制推送,同时要通知所有协同开发的成员重新拉取dev分支,避免出现提交分叉。
内容的提问来源于stack exchange,提问作者Arthur Attout
相关产品推荐
相关产品推荐

