4.如何撤销合并
如果需要回退某个合并提交,怎么办?
思路
首先要知道合并的原理(可查看《3.Git合并的原理》)
如下图是分支合并的情况(节点为提交,术语称为快照),假设需要在master上剔除iss53分支,则需要回退到C2快照,(找到iss53是从哪里切出来的,从根拔除)那么如何找到iss53是从哪个节点切出来的呢?
别急,在《3.Git合并的原理》中有介绍到,分支引用的原理。每个分支都有一个文件去做快照提交记录,例如图中的A分支,在.git\logs\refs\heads目录下,对应A文件中保存的第一个快照便是分支A的基础快照:
步骤
1.备份master分支:在master分支上新建master-copy分支;
2.找到iss53分支的基础快照C2
3.master分支上执行回退命令:
git reset —hard C2
4.master分支上补回撤销后丢失的commit:
分为两种情况:
1.期间合并了其他分支到master的commit(如果分支还在则再次合并进master)
2.期间在master上修改的commit(使用cherry pick或者create patch,注意解决冲突时要检查一遍是否是自己想要的提交内容)