【问题标题】:Undo a wrong merge with Bazaar撤消与 Bazaar 的错误合并
【发布时间】:2014-06-16 14:59:14
【问题描述】:

我在使用 Bazaar 时遇到了一个问题,我想通过最佳实践来解决它。 这是上下文:

在我们项目的主干中,一个错误地合并主干中的一个分支(BranchA),但他在保留合并信息的同时对大多数文件使用了还原(因此来自集市的 BranchA 被有效地合并到主干中,防止以后真正合并它)。
合并的修订版本已提交为 r4。

在此(不希望的)合并之后,许多开发人员在 (r5 & r6) 之后立即提交。

所以我的问题是:如何撤消这个错误的合并?(同时保留之后的提交)。

我试图取消提交回 r3 并将每个 rev 从 r4 合并到 R6(省略 r4)
我试过'reverse cherry pick' r4 ...但是BranchA合并信息可能仍然被记住。

trunk
  |
  r6
  |
  r5
  |    branchA
  |     |
  r4 ---+
  |     |
  |    r2.2
  |     |
  r3   r2.1
  |     |
  r2 ---+
  |
  r1

如果您有解决方案或解决问题的线索,请分享!
(例如 REBASE 命令可以在这里提供帮助吗?)

【问题讨论】:

    标签: version-control merge bazaar


    【解决方案1】:

    由于合并中的还原出错导致信息丢失,因此不会有 100% 的修复。最好的办法是在trunk 和樱桃挑选r5r6 中创建一个新的r3 分支,如下所示:

    cd /path/to/repo
    bzr branch trunk -r3 branchX
    cd branchX
    bzr merge -c5 ../trunk
    bzr commit -m "cherry picked r5: $(bzr log --line -r5 ../trunk)"
    bzr merge -c6 ../trunk
    bzr commit -m "cherry picked r6: $(bzr log --line -r6 ../trunk)"
    

    或者,在采摘r5 之前,您可能希望以“正确的方式”从branchA 合并。

    rebase 命令在这里对您没有帮助。变基的目的基本上是对修订进行重新排序:无论是合并还是变基,最终文件中的内容都相同,只是修订历史图的形状不同。 rebase 的目的通常是让历史图看起来扁平化,可以很整洁,但它只是化妆品,就内容而言,最终结果是一样的。

    【讨论】:

    • 这就是我的结局!我从 r3 做了一个分叉,合并了选定的 r5 和 r6,并将结果推送到主干(所以是一个新的主干)。开发人员现在必须在他们的工作副本中拉出新的主干,因为如果他们尝试提交,bazaar 会警告不同的分支。
    • 如果您不想像这样重新创建固定的trunk,那么最好使用bzr merge . -r 4..3 反向选择合并修订。但正如您所指出的,这将保留 BranchA 合并的历史记录,这意味着您将无法再次可靠地从 BranchA 合并。恐怕您将不得不在这两者之间选择不太糟糕的结果。
    猜你喜欢
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2020-08-23
    • 2016-05-24
    • 2016-02-04
    相关资源
    最近更新 更多