【问题标题】:merging to master two branches with previous common history合并以掌握具有先前共同历史的两个分支
【发布时间】:2020-02-21 13:13:12
【问题描述】:

我正在询问与此相关的问题:https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt

我有三个分支:master、A 和 B。我将 B 合并到 A。但后来证明是一个错误,所以我恢复了这个合并。我知道现在不可能再做一个 B 到 A 的合并(因为我可能会在恢复之前丢失 B 的更改),我应该先恢复这个合并的恢复,然后再将 B 合并到 A。

主人来了……如果在第一次恢复合并后,有人将 B 合并到 master 然后 A 合并到 master 怎么办?还是相反的顺序?在第一次还原之前对 B 的更改会在 master 上吗?

谁能帮帮我?

BR

【问题讨论】:

    标签: git merge master revert


    【解决方案1】:

    你有这段历史(时间从左到右流动):

    -o--o--o--o           <- master
      \
       a--a--a---M--R     <- branch A
        \       /
         b--b--b          <- branch B
    

    R是它们的反转合并M

    如果在第一次恢复合并后,有人将 B 合并到 master 然后 A 合并到 master 怎么办?还是相反的顺序?在第一次还原之前对 B 的更改会在 master 上吗?

    也就是说,你会得到这段历史:

    -o--o--o--o--X----Y    <- master
     |          /     |
     |   b--b--b      |    <- branch B
      \ /       \    /
       a--a--a---M--R      <- branch A
    

    在这里,首先 B 被合并到 master,然后是 A。如您所见,反转现在是master 的一部分,它带来的更改也是如此,即它撤消了分支B 的更改。你可以看到X 和直到Y 的所有提交都有分支B 的更改,但是Y 和以后的这些更改都被还原了。

    另一方面,如果首先合并分支A,则分支B(以及它的反向提交R)已经包含在合并中。 git merge B 会告诉你:“已经是最新的了”。

    【讨论】:

    • 那么现在最好的解决方案是什么?在分支 A 上恢复此合并,然后将两个(分支 A 和 B)合并到 master?有没有更好的方法来解决这种情况?或者有什么办法可以更早地摆脱这种情况 - 而不是 revert of merge 做其他事情?
    • 您既没有指定要实现的目标,也没有指定限制条件。您可以做很多事情,但您应该做哪一件,取决于很多事情。
    猜你喜欢
    • 2012-06-02
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2012-08-23
    • 2023-03-20
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多