如何撤销误合并到feature分支的dev内容,保留后续提交(SourceTree)
Git错误合并dev分支的撤销方案(保留后续提交)
理解正误判断
你对git reset的认知是正确的:直接执行reset指向合并前的提交,会移动HEAD指针,丢弃指针之后的所有提交记录,不符合你的需求。但git revert可以完美适配你的场景,它不会修改历史提交,只会生成新的提交来撤销指定合并操作的改动,你在feature分支的所有提交(包括错误合并后新增的提交)都会完整保留。
前置准备
- 先将本地feature分支的未提交改动全部暂存或提交,避免操作中数据丢失
- 定位到那次错误合并dev的提交哈希值:可直接在SourceTree的提交历史列表中查找,合并提交的描述通常带有
Merge branch 'dev' into [你的feature分支名]的特征
操作步骤
SourceTree 图形化操作(适配你当前使用的客户端)
- 打开SourceTree并切换到目标feature分支
- 在提交历史列表中右键点击错误的dev合并提交,选择「提交 > 还原提交」(部分版本翻译为「撤销提交」)
- 弹出的窗口会提示该提交为合并提交,需要选择保留的父提交:选择序号为1的父提交(对应合并前的feature分支状态),确认操作
- SourceTree会自动生成一个新的撤销提交,点击顶部的「推送」按钮,将该新提交同步到远程仓库即可
命令行操作(可选,用于理解底层逻辑)
- 切换到目标feature分支:
git checkout [你的feature分支名] - 执行revert撤销合并提交,合并提交必须指定
-m 1参数选择保留feature侧的父提交,否则会执行失败:git revert -m 1 [错误合并提交的哈希值] - 推送新生成的撤销提交到远程:
git push origin [你的feature分支名]
后续说明
整个操作不会修改任何已有历史提交,你所有的feature分支提交记录都会完整保留。后续如果需要正式合并dev分支的代码,重新执行正常合并流程即可,不会出现逻辑冲突。
内容的提问来源于stack exchange,提问作者Tushar Sharma
相关产品推荐
相关产品推荐

