You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何撤销非压缩Git合并提交及相关操作疑问解答

Git合并撤销及相关问题解答

提交结构示意图

执行git log --oneline会得到如下提交日志:

c6 merge iss53 to master
c5
c3
c4
c2
c1
...

其中c4、c6属于master分支,c5、c3属于iss53分支。

一、撤销刚完成的合并的简便方法

不用手动查找c4的哈希值,有两种更简便的方式:

  • 直接执行 git reset --hard HEAD~:合并提交默认会把当前分支合并前的节点作为第一个父节点,HEAD~会直接指向这个父节点(也就是c4),一键回到合并前的master状态。
  • 执行 git reset --hard ORIG_HEAD:Git在完成合并后,会自动把合并前的HEAD状态存入ORIG_HEAD,这个命令直接调用该记录,同样能快速撤销合并。

二、为什么git reset --hard HEAD~指向c4而非c5?

合并提交(比如c6)有两个父节点:

  1. 第一个父节点:执行合并操作时当前分支(master)的最后提交,也就是c4
  2. 第二个父节点:被合并分支(iss53)的最后提交,也就是c5

Git中HEAD~(或HEAD~1)默认会跟随第一个父节点,所以它指向的是c4,而非c5。如果要指向第二个父节点,可以用HEAD^2(^后加数字指定父节点序号)。

三、执行git reset --hard c5的结果

执行该命令后,master分支会直接切换到iss53分支的c5提交节点,具体影响包括:

  • 丢弃合并提交c6,同时丢弃master分支原本的c4提交(c4到c6的所有变更都会被清除)
  • 工作区和暂存区会被重置为c5对应的代码状态,也就是iss53分支合并前的状态
  • master分支的提交历史会变成c5 → c3 → c2 → c1...,相当于和原本master分支(c4及之前)的关联被切断。

如果之后想恢复到原来的master状态,可以通过git reflog找到c4或c6的记录,再执行git reset --hard <对应哈希值>。

内容的提问来源于stack exchange,提问作者JoonT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:52:38