目录

大橙子

VX:ZzzChChen
Phone:13403656751
Email:zxydczzs@gmail.com

X

Git Revert Revert!

一、前言

最近在工作中遇到个很有趣,让人费解的一个操作,举例子说明。

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

二、实验

  1. 我们先创建一个示例仓库进行init操作;image.png

  2. init操作后我们得到了一个新的分支develop

    image.png

  3. 接下里我们在这个分支中做一些操作,然后合并到master中。image.png

  4. 接着我们去revert这次合并image.png

  5. 从上述图中已经看到了master分支已经revert了这条记录,然后我们在重新merge一下。
    在这个分支中时可以看到还有1.txt存在的image.png

    image.png
    在master中已经revert了,然后去merge,被告知两个分支是一致的image.png

  6. 接着我们重新Revert Revert操作,会发现上次1.txt回来了。image.png

    image.png

三、总结

资料可以看一眼
https://www.sobyte.net/post/2021-06/fixing-the-problem-of-lost-code-after-git-revert-and-merge-again/

基本上来说就是上述中3、4、5中提及的现象,大家可以实验一下。


标题:Git Revert Revert!
作者:zzzzchen
地址:https://dczzs.com/articles/2022/05/02/1651463743535.html