目录

chen 的个人博客

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