如何将合并提交4ccc77eb与前置提交8dc19c8b压缩为单个合并提交?
解决方案
你可以通过直接创建新的合并提交来实现需求,这个提交会以main和dev作为父节点,同时复用8dc19c8b中已解决好冲突的文件内容,无需重复处理冲突。具体步骤如下:
获取已解决冲突的提交树ID
先获取8dc19c8b提交对应的树对象ID(该树保存了此提交的所有文件最终状态):git rev-parse 8dc19c8b^{tree}执行后会输出一串哈希值,记为
TREE_ID(格式类似abc123...)。创建目标合并提交
使用git commit-tree命令生成以main和dev为父节点的合并提交,内容复用上述树ID:git commit-tree -p main -p dev -m "Merge branch 'dev' into topic (resolved conflicts)" TREE_ID执行后会输出新的合并提交ID,记为
NEW_COMMIT_ID。将topic分支指向新提交
把当前topic分支的指针重置到新创建的合并提交上:git reset --hard NEW_COMMIT_ID
完成后,topic分支将仅保留一个合并提交,父节点为main和dev,文件内容与8dc19c8b完全一致,原有的8dc19c8b和4ccc77eb会从分支历史中移除(若无其他引用指向它们,后续会被Git自动清理)。
注意:若
topic分支已推送到远程仓库,需使用git push --force-with-lease更新远程分支,这会覆盖远程历史,请确保团队成员同步操作以避免冲突。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

