【问题标题】:Should I wait to merge Git grandchild branch to master until child branch is merged to master?我是否应该等到子分支合并到主分支后才将 Git 孙分支合并到主分支?
【发布时间】:2019-06-12 08:54:20
【问题描述】:

在我的团队项目中,我正在开发一个从 master. 分支出来的 feature 分支合并它。

同时,我正在处理一些依赖于我在feature 中实现的代码但相关性不足以在同一分支中实际实现的东西。所以我从feature 分支出来,像这样:

master
└── feature
    └── different_feature

如果我对different_feature 提出拉取请求并且在feature 之前获得批准,我可以简单地将其合并到master 吗?还是我应该等到 different_feature 合并到 master 后再合并 different_feature

我对第一个选项的担忧是,稍后当您检查日志时,feature 的某些部分将在fghij 中合并到master,而实际上它应该在abcde 中合并。如果我们想保留 different_feature 而摆脱 feature(回滚),这可能会很不方便。

git log (from newest to oldest - with dummy commit hashes)

abcde Merge pull request: feature
fghij Merge pull request: different_feature
klmno Merge pull request: something_implemented_before_all_this

提前致谢。

[编辑] 忘了提及这一点:在我从 feature 分支之后,我对 feature 做了一些额外的提交。所以different_feature 只是部分继承了feature. 中所做的更新

[更新] 最终,我等到feature 合并到master,然后将different_feature 重新定位到master,然后再将其合并到master。这让我可以将feature 中完成的更新与different_feature 中完成的更新区分开来。

作为旁注,当提出 different_feature 的拉取请求时,我了解到您可以通过将请求的基本分支设置为 feature 而不是 master 来仅比较您在此分支中所做的更改.只需确保在合并该拉取请求时将其更改回 master

【问题讨论】:

    标签: git merge branch


    【解决方案1】:

    在您描述的情况下(我添加了一些示例提交以进行推理)

    A---B---C <<< master
             \
              D---E <<< feature
                   \
                    F---G <<< different_feature
    

    feature &gt; master 的拉取请求只会带来DE 的提交,但different_feature &gt; master 的另一个拉取请求会带来DEFG

    如果您在different_feature &gt; master 已经被接受/合并之后尝试拉取请求feature &gt; master,则将没有任何东西可以合并,这将导致无操作。

    另外,需要注意的是,没有什么可以阻止您在稍后恢复 feature 提交(DE)而不恢复 F 和 G,只要您在合并


    在 cmets 之后编辑

    实际情况好像更像

    A---B---C <<< master
             \
              D---E---H---I <<< feature
                   \
                    F---G <<< different_feature
    

    但总体原理是一样的,如果你还记得 git 基本上是基于提交而不是分支工作的话。

    第一次 PR 后的情况(J 是合并提交)

    A---B---C---------------J <<< master
             \             /
              D---E---F---G <<< different_feature
                   \
                    H---I <<< feature
    

    different_feature &gt; master 拉取请求会将DEFG 提交到master,如果先合并,它只会让HI 离开在第二个 pull request 中合并,第一个合并后会重新计算。

    【讨论】:

    • 感谢您的评论。实际上,我不认为是这种情况,因为在我从 different_feature 分支之后,我一直在向 feature 添加新的提交(我根据我在 feature 的拉取请求中获得的反馈进行了一些修改)。换句话说,different_feature 继承了feature 的一部分,但不是全部。
    • 所以以您的图表为例,在feature 中的DE 之后有一些较新的提交。
    • 好的,我明白了,但情况有点不同。我会编辑。
    • 谢谢!抱歉,我应该在我最初的问题中提到额外的提交。
    • @Risa 关于这一点没有可靠的答案,因为它最终将取决于更改的性质。在复杂情况下,按照引入更改的时间顺序合并事物可能更直接,并在 different_feature 之前合并 feature,但在更简单的上下文中,这也可能是不必要的约束。
    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 2017-08-14
    • 1970-01-01
    • 2015-06-23
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多