合并功能分支没有从共同的祖先一路回来?

时间:2014-11-01 15:30:11

标签: git github version-control merge

我们说我有一个非常简单的分支情况,那里有 dev 分支和生产分支,在某些时候在过去有一个共同的祖先叫做 common

graph1

现在,是时候制作新功能了。我们想要今天 dev 中的功能,以及一个月内 production 中的功能。简单的做法是将功能从 common 中分离出来,然后在我们想要的时候将它合并到 dev production 中: / p>

graph2

但这一次,我不想这样做。我不想这样做,因为 dev 生产 common 以来都发生了很大变化,它已经发生了变化从 common 开发此功能真的很痛苦。

我真正喜欢做的是,在树的某个后期点开发它,就像这样,只是为了我自己的幸福,所以对 dev 的所有新更新当我制作这个特征时可以出现:

graph3

现在,当然这可以将功能合并到 dev 中,但是当我将此功能合并到 production 时,它会带来一个来自 dev 的一大堆我真的不想要的东西。

一种解决方案是合并 dev production 。但我真的不想这样做。我需要 dev 上的东西,而不是生产,可能很长一段时间。

当然,只要该功能不会弄乱 dev production 中可能发生冲突的任何内容,我想要的内容甚至只能在逻辑上成为可能。但它确实没有。它正在走向'与这两者兼容,以及我对 dev 所做的更改,因为 common 甚至与该功能无关。当我正在制作这个功能时,我只想要他们。我不想每次想要测试任何东西时都要将该功能合并到 dev

2 个答案:

答案 0 :(得分:2)

  

它将与两者兼容,我对dev所做的更改因为常见而与feature

无关

这意味着您可以从dev开始,然后,当您要在feature中合并prod时,您 rebase featureprod之上。

这样,您只会在prod之上添加功能提交,这可以合并feature(快进合并)

答案 1 :(得分:1)

假设您的feature分支从dev分支的某个点引入了2个提交:

                            F1---F2 [feature]
                           /
               D1---D2---D3---D4 [dev]
             /
...---COMMON
             \
               P1---P2---P3---P4 [production]

如果您打算

  1. 将该功能集成到dev分支
  2. 将该功能集成到production分支
  3. dev分支合并到production分支
  4. 完成此操作的方法不止一种,具体取决于您希望历史记录显示的内容。假设您希望最小化非快进合并的数量,请从:

    开始
    git rebase dev feature
    git checkout dev
    git merge feature
    

    你会有

                   D1---D2---D3---D4---F1'---F2' [feature, dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4 [production]
    

    然后,如果您想要production分支中的功能,但您还不想合并dev分支,请执行以下操作:

    git rebase --onto production <Commit ID of D4> feature
    git checkout production
    git merge feature
    

    获得:

                   D1---D2---D3---D4---F1'---F2' [dev]
                 /
    ...---COMMON
                 \
                   P1---P2---P3---P4---F1''---F2'' [feature, production]
    

    最后,您可以将dev分支与:

    集成
    git rebase production dev
    git checkout production
    git merge dev
    

    你将拥有:

    ...---COMMON---P1---P2---P3---P4---F1''---F2''---D1'---D2'---D3'---D4'
                                               |                        |
                                           [feature]            [production, dev]
    

    但是,如果你有冲突,你需要相应地合并它们。请参阅The Perils of Rebasing以避免两次具有相同作者,日期和消息的提交。