我应该等到 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
的拉取请求只会带来提交 D
和 E
,但 different_feature > master
的另一个拉取请求会带来 D
、E
、F
和 G
.
如果您在 different_feature > master
已经 accepted/merged 之后尝试拉取请求 feature > master
,将没有任何东西可以合并,并且会导致 no-op。
此外,需要注意的是,没有什么会阻止您在稍后恢复 feature
提交(D
和 E
)而不恢复 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
拉取请求会将 D
、E
、F
和 G
提交到 master
,如果合并首先,它只会让 H
和 I
留在第二个 pull request 中合并,这将在第一个 pull request 合并后重新计算。
在我的团队项目中,我正在处理从 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
的拉取请求只会带来提交 D
和 E
,但 different_feature > master
的另一个拉取请求会带来 D
、E
、F
和 G
.
如果您在 different_feature > master
已经 accepted/merged 之后尝试拉取请求 feature > master
,将没有任何东西可以合并,并且会导致 no-op。
此外,需要注意的是,没有什么会阻止您在稍后恢复 feature
提交(D
和 E
)而不恢复 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
拉取请求会将 D
、E
、F
和 G
提交到 master
,如果合并首先,它只会让 H
和 I
留在第二个 pull request 中合并,这将在第一个 pull request 合并后重新计算。