设想:
- 您在 CI/CD 公司环境中工作,其中多个不同团队的更改会一直合并到主版本中。
- 有时,必须撤销其中一个合并,以便基于 master 的发布能够成功发布 - 因为其中一个团队推送了包含错误的“合并到”提交。
- 当团队再次开始处理损坏的功能(编写修复程序)时,第一个动作是恢复恢复,以免弄乱主人的历史记录。
问题:
我注意到“双重还原”使得它看起来像是进行第二次还原的一个人编写了最初还原的全部功能,即使它是由许多人的多次提交组成的。
假设该功能由 100 次提交组成。
- 挑选樱桃相当复杂。
- 另外,您不能进行 rebase,因为这需要强制推送到 master,而这是被禁止的。
问题:
有没有一种轻量级的方式来维护原作者?
我知道的唯一方法是撤销撤销。或者重新应用原始更改。[1] 在合并提交的情况下就是这样。
因为恢复的合并必须小心处理。
有了这个:
您将得到以下结果(顶部为最新):
然后,您可以在重新应用/恢复恢复提交消息中指向原始合并提交:
不使用恢复
我会用恢复来处理小错误。我认为是一些不太明显的错误,如果消除这些错误,原本很明显正确的快照就会恢复正常。
但是您不需要恢复或进行任何其他糟糕的提交:您可以部署以前的提交。
鉴于这样的历史(最上面的是最新的):
你部署了 (2),但发现 (4) 有问题。因此你进行了还原:
现在,您面临的问题是可能需要还原大量(例如 100 次提交)合并提交。由于您想更精确地解决问题,因此可能会立即重新应用此操作。好的,但让我们假设还原不会导致合并冲突。那么您将面临大量的版本控制混乱。
但还有另一个问题。(1) 是一个经过充分测试的提交吗?不,不是。(1) 的快照可能完全未经测试。是的,(4) 中有一些不好的东西。但它可能是将 (3) 和 (2) 结合在一起的东西——尚未经过测试。
这里唯一好的并且经过充分测试的提交是 (6)。你可以部署它:
没有什么可以阻止你。要么标记它,要么只使用哈希值 — SHA-1 哈希值可以唯一地标识你的部署。
部署先前快照的注意事项:状态变化
如果您在其中一次提交中对应用程序进行了有状态更改,则无法部署以前的版本。例如:
(3)这里会造成麻烦。也许你更改了一些数据库表。如果你重置为以前的版本,应用程序就会变得混乱。
笔记