VSTS Git 在子分支合并回主分支后将孙子分支合并到主分支

VSTS Git merge grandchild branch into master after child branch has been merged back into master

我们有一个很长的 运行 分支 branch1,从 master 分支出来,它正在进行完整的回归测试,这需要一段时间。

在测试时,我正在研究一项功能,该功能需要在 branch1 中进行更改,将其称为 branch1a,它是从 branch1 分支出来的。我仍在努力,但应该很快就会完成TM.

今天早上,branch1测试结束,合并回master。我们正在使用 VSTS。我不确定它是如何合并的(rebase、squash 等)。有一个 PR,其中列出了 branch1 的一堆提交和其他 PR。看起来它在主历史记录中显示为 1 次提交。

现在我不太确定完成后该做什么,我的父分支有点消失了,但又好像没有。如果我创建一个 PR vs master,我会更改 400 个文件,如果我创建它 vs branch1,我会更改 12 个文件。

看起来合并将使用公共父级,在 branch1 被分支之前,而不是我从 branch1 分支 branch1a 的地方,这似乎可能会导致很多问题(尽管从技术上讲,只有实际最新文件中的一些更改)。

rebase 而不是合并在这里更有意义吗?我的提交应该非常干净地重播现在的 master(如果我正确理解 rebase)。

我们在 VSTS 中有政策,因此我们不能直接提交给 master——我们需要使用 PR。我不确定我是否可以创建一个使用 rebase 的 PR...也许我应该分支 master,branch2,并将我的分支 rebase 到 branch2,然后从 branch2 做一个 PR 到 master?

像git那样思考会有帮助;所以从这个意义上说,branch1 不是 "sort of gone"。它要么已经被删除并且消失了,要么它没有被删除并且没有消失。根据你的描述,我认为是后者。

为了真正确定,您应该找出分支是如何与 master 结合的。我怀疑它只是合并了。根据您如何看待 master 的历史,您可能(也可能不会)将合并的结果描述为 "a single commit"。 (IMO,在这方面,squash 的文档可能令人困惑。)

那个单次提交是否有第二个 parent?如果是这样,那就是真正的合并。如果不是,那就是南瓜(这会让事情变得更难)。如果只有一次提交,那不是简单的 rebase(但 squash 实际上只是一种特殊类型的 rebase,所以我猜这是分裂头发)。

如果是真正的合并,一切都很好。您可以将 branch1a 合并到 master;至多这可能会使冲突的解决变得更加令人生畏。如果你想把它分解成更小的冲突解决工作(或者如果你只是想在分支拓扑中保持对称感),你可以合并 branch1abranch1 然后合并 branch1master 再次。

我不希望变基会使事情变得更容易,如果任何 branch1a 提交已被推送到远程仓库,那么我建议不要变基。无论如何,变基的原因是如果你想要一个更线性的历史,有些人发现它更清晰(即使它可能会创建不可构建的中间状态)。

至于你的最后一段……你的想法让事情变得太复杂了。没必要。