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 之前状态的目的