我应该等到 Git grandchild branch 合并到 master 直到子分支合并到 master 吗?

Should I wait to merge Git grandchild branch to master until child branch is merged to master?

在我的团队项目中,我正在处理从 master. 分支出来的 feature 分支 我已经提出了 feature 的拉取请求,并且它正在接受审查但是我需要一段时间才能合并它。

与此同时,我正在做一些依赖于我在 feature 中实现的代码的事情,但相关性不够大,无法在同一分支中实际实现。所以我从 feature 分支出来,像这样:

master
└── feature
    └── different_feature

如果我提出 different_feature 的拉取请求并且它在 feature 之前获得批准,我可以简单地将它合并到 master 吗?或者我应该等到合并 different_feature 直到 feature 合并到 master

我对第一个选项的担心是,稍后当您查看日志时,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

提前致谢。

[编辑] 忘了提这个:在我从 different_feature 分支后,我对 feature 做了一些额外的承诺。所以 different_feature 仅部分继承 feature.

中所做的更新

[更新] 最后,我等到 feature 合并到 master,然后将 different_feature 重新设置为 master ] 在合并到 master 之前。这允许我将 feature 中完成的更新与 different_feature 中完成的更新分开。

附带说明一下,在提出 different_feature 的拉取请求时,我了解到您可以通过将请求的基本分支设置为 [=13= 来仅比较您在此分支中所做的更改] 而不是 master。只需确保在合并该拉取请求时将其更改回 master

在你描述的情况下(我添加了一些示例提交来推理)

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

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

如果您在 different_feature > master 已经 accepted/merged 之后尝试拉取请求 feature > master,将没有任何东西可以合并,并且会导致 no-op。

此外,需要注意的是,没有什么会阻止您在稍后恢复 feature 提交(DE)而不恢复 F 和 G,前提是您在合并期间不压缩提交


评论后编辑

实际情况好像更像

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

但总体原则是相同的,如果您还记得 git 基本上是基于提交,而不是分支。

第一次PR后的情况(J是merge commit)

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

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