0

所以我刚刚开始使用 Mercurial 并遇到了一个我不确定如何正确处理的问题。这是示例场景:

Demo Branch --- Good Change 1  --- Bad Change 2  --- Good change 3  --- Good change 4
Prod Branch --- \Good Change 1 --- \Bad Change 2 --- \Good Change 3 --- \Good Change 4

因此,本质上,一个好的更改已提交、测试并与生产合并。而不是一个糟糕的变化被测试,假设工作,并被推送到生产中。最后,还有 2 个不错的更改被推送到生产环境中。我们现在意识到“呃-哦”​​第二个变化实际上是一个问题!我们需要恢复它,但我们仍然在那里浪费了很好的更改 3 和 4。

Backout 对演示有效,但对 prod 无效,因为它是一个合并。我最终让一切正常,但有很多移植、更新和合并。似乎应该有一种简单的方法来解决这个问题,同时保持其他一切向前发展。谢谢!

4

2 回答 2

0

我的理解是,事情就是这样开始的。

Demo   G1----B2----G3----G4
          \     \     \     \
Prod   ----M1----M2----M3----M4

...然后您退出了演示分支上的错误更改

Demo   G1----B2----G3----G4----BOB2
          \     \     \     \
Prod   ----M1----M2----M3----M4

此时您需要做的就是再次合并

Demo   G1----B2----G3----G4----BOB2
          \     \     \     \      \
Prod   ----M1----M2----M3----M4-----M5

回退变更集与任何其他变更集没有什么不同。它只是具有与原始相反的效果。我认为您所做的是尝试退出包含错误更改到您的 Prod 分支 ( M2) 的合并,但这会产生一些奇怪的影响,如此所述。

或者,您可以在两个分支上都退出B2,这也应该没问题。

Demo   G1----B2----G3----G4----BOB2
          \     \     \     \      
Prod   ----M1----M2----M3----M4-----BOB2
于 2013-04-22T15:55:23.370 回答
0

Backout 对演示有效,但对 prod 无效,因为它是一个合并

怎么回事?如果变更集是 repo 中的普通变更集,则推送此变更集后将是相同的变更集。

推!=合并,永远不会被合并。如果您想丢弃变更集,可以在源存储库中通过回退来完成(因此 - 获取新的附加变更集)并发布此更改,您必须将回退变更集推送到产品(肮脏的历史,但毕竟是正确的回购状态)

于 2013-04-22T09:45:32.547 回答