Git 中使用 Revert 导致的合线问题

问题复现

首先模拟一下, 当前有一条功能主分支, 叫做 A, 目前 A 的开发进度为 A, A1

现在需要在 A 分支上开发一个次要功能, 于是新建了分支 B, B 开发了一段时间之后, 开发进度为 B, B1, 此时 B 功能开发完成了, 但是出了一个 Bug

之后需要修复 B 分支上的这个 Bug, 于是新建了分支 C, 问题修改进度为: C, C1, C2, Bug 修复完毕

下面是 Git 记录:

开发记录

或许这样会看得更清晰一些:

开发记录

此时问题已经修复完毕, 分支 C 需要合并到分支 B 中, 但是由于操作失误, 分支 C 直接合并到了分支 A, 并且合线人员看到合错线了, 使用了 Revert 进行了反合线, 如图:

开发记录

开发记录

之后 C 分支正常往 B 分支合线

开发记录

B 分支向 A 分支合线

开发记录

至此功能 B 合线完成.

上面这个情景合线后的 A 分支会有问题吗?

答案是会有问题. 分支 A 上面压根就没有任何分支 B 和分支 C 上的内容. 因为之前的 Revert 操作的内容是删除分支 B 和分支 C 的内容, 所以导致 B C 在合线进来之后就又被删除掉了, 导致 A 分支上什么都没有.

开发记录

解决方案

  • 方案 1: 直接禁止使用 Revert, 一了百了 ~ 哈哈

  • 方案 2: 执行了 Revert 命令之后再次执行一次 Revert 命令
    开发记录

  • 方案 3: 回退到 Revert 之前的结点, 之后强制推送, 就可以恢复到没有执行 Revert 之前的状态
    开发记录

  • 方案 4: 回退到 Revert 之前的结点, 新建分支, 之后删除旧的错误分支,也达到了恢复到没有执行 Revert 之前状态的目的