Git Revert Revert!
一、前言
最近在工作中遇到个很有趣,让人费解的一个操作,举例子说明。
- 有两个分支,一个分支A,一个分支B,他们两个要合并在一起后,跟分支C合并,一通操作下来合并好之后,在commit记录中也可以看到两个分支的提交,然后提测,被告知分支A的功能没有实现,当时很费解,最后排查下来,发现在提测分支C中,没有分支A的代码,且无论你怎么merge分支A,永远都是无任何修改。
- 当时有点不明所以,接着排查,发现在提测分支C中,有个操作为Revery分支A的提交记录,会不会和这个有关呢?将这个现象告知公司大佬后,由于时间比较紧张且分支A的代码没有多少,就手动将分支A的代码copy到了提测分支C中让测试人员继续。
- 之后在公司大佬研究后给出了个答案,大概问题出现原因为,提测分支C中的git提交线只要存在针对于某次merge的revert操作,就会一直忽略掉这个merge里包含的提交内容。
- 如果对这句话不太了解的话,咱们用通俗的话来讲就是,你撤回了这个分支上的某次提交,git就会认为你不需要这一段代码,所以你想要把代码在合并上去,是不行的,因为他们的commit记录是一致的,所以会被告知两个分支是一致的。
- 至于怎么解决这个问题,就是标题所述,Revert Revert,将你Revert的那次记录,重新执行一遍revert操作,原先找不到的代码就会自动回到原分支上。
二、实验
-
我们先创建一个示例仓库进行init操作;
-
init操作后我们得到了一个新的分支develop
-
接下里我们在这个分支中做一些操作,然后合并到master中。
-
接着我们去revert这次合并
-
从上述图中已经看到了master分支已经revert了这条记录,然后我们在重新merge一下。
在这个分支中时可以看到还有1.txt存在的
在master中已经revert了,然后去merge,被告知两个分支是一致的 -
接着我们重新Revert Revert操作,会发现上次1.txt回来了。
三、总结
基本上来说就是上述中3、4、5中提及的现象,大家可以实验一下。