【问题标题】:Merging feature branches without branching all the way back from common ancestor?合并功能分支而不从共同祖先一直分支回来?
【发布时间】:2014-12-28 17:23:52
【问题描述】:

假设我有这样一个非常简单的分支情况,其中有一个 dev 分支和一个 production 分支,它们在过去的某个时候有一个共同的祖先称为普通

现在,是时候制作一个新功能了。我们希望今天在 dev 中使用该功能,并在一个月后在 production 中使用。最简单的做法是从 common 中分离出该功能,然后在我们想要的时候将其合并到 devproduction 中:

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

我真正想做的是从树中的某个稍后点开发它,就像这样,只是为了我自己的快乐,以便 dev 的所有新更新都可以当我制作该功能时出现:

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

一种解决方案是合并 devproduction。但我真的不想这样做。我需要 dev 上的东西,而 production 可能已经很久了。

当然,只要该功能不会与 devproduction 内部的任何会发生冲突的东西发生冲突,我想要的甚至在逻辑上都是可能的。但事实并非如此。它将与两者兼容,并且我对 dev 所做的更改因为 common 甚至与该功能无关。当我制作这个功能时,我只希望它们在那里。而且我不想每次我想测试任何东西时都将功能合并到 dev 中。

【问题讨论】:

    标签: git github version-control merge


    【解决方案1】:

    它将与两者兼容,并且我对 dev 所做的更改因为 common 甚至与 feature 无关

    这意味着你可以在dev 之上开始,然后,当你想将feature 合并到prod 中时,你rebase featureprod 之上。

    这样,您将仅在 prod 之上带来功能提交,这可以合并 feature(快进合并)

    【讨论】:

      【解决方案2】:

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

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

      如果你的意图是

      1. 将该功能集成到dev 分支中
      2. 将该功能集成到production 分支中
      3. dev 分支合并到production 分支中

      完成此任务的方法不止一种,具体取决于您希望历史记录显示的内容。假设您想最小化非快进合并的数量,从以下开始:

      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 以避免两次提交具有相同的作者、日期和消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 2013-09-11
        • 2012-08-23
        相关资源
        最近更新 更多