在Github上,将PR合并到不同的分支。

7

假设有人在Github上向public/master提交了一个PR。

有没有办法将该PR合并到另一个分支中?否则,看起来我必须将其合并到public/master,然后将其向后合并到开发/暂存分支中。这就像让人们进行热修复,然后将热修复合并到开发分支中,这通常是我们应该避免的事情,对吧?

似乎更有意义的做法是让人们跟踪和提交PR到一个暂存/开发分支,而不是主分支。

那么最好的方法是什么呢?棘手的部分是目前暂存/开发分支是私有的。听起来我必须公开一个开发分支,然后引导人们从该分支分支并提交PR?


你应该定期将主分支合并到任何功能分支中。我不明白问题在哪里。master 应该是最新的稳定分支。它不总是最前沿的。只要 PR 看起来不错,有测试并且一切都通过了,就没有理由不合并到主分支。 - kylieCatt
1
嗯,直接合并到主分支(master)不如合并到开发分支更好吧?你所说的更像是一个热修复(hotlinx),对于大多数软件团队来说并不理想。 - Alexander Mills
有什么原因你的开发分支不能是公开的吗? - Scott Weldon
不是这样的。特性分支经常作为正常开发过程的一部分添加到主分支中,尤其是在大型团队中。如果您没有一个针对公共分支的PR进行审核的流程,在将它们合并之前,您不应该让该分支接受来自公众的PR。如果您的测试不够好或者您的CI流程不好或者不存在,您需要先解决这个问题。 - kylieCatt
我同意这个观点。但我认为最好先合并到开发分支。在我的看法中,从主分支合并回开发分支以捕获PR是应该避免的。这也是原始问题的终极目的所在。如何避免这种情况。例如,如果你在开发分支上进行了重大重构,但它还没有合并到主分支呢? - Alexander Mills
显示剩余2条评论
1个回答

4

根据定义,你无法针对你不知道存在的分支进行PR。

你的历史记录可能看起来像这样:

*--A--B--C [develop] (private)
    \
 ... D--*--*--E [master]
               \
                F--G--H--I [myfeature] (PR for this)

这里有两个问题。(1) myfeature 的 PR 无法针对 develop,因为 develop 是私有的,对于 myfeature 的作者来说是不可见的。(2) develop 分支有一些提交记录(在这种情况下是BC),也是私有的。
第二个问题更为重要。如果提交记录 B 与提交记录G 冲突,则无论如何将myfeature中的更改合并到develop 中,都需要由您来解决这个冲突。这不是理想的解决方案;我发现让 PR 的作者负责解决冲突比维护者容易得多。
有两种解决方法:公开或变基合并。

公开

这是我建议的解决方案,因为它将是最简单的长期解决方案。您可以将您的develop分支推送到 GitHub 并使其公开。这将允许其他用户从develop分支分支,并针对其发送 PR。
您提到您的develop分支中有某些私有文件。根据您需要这些文件的方式,您可能可以将它们ignore,或者将敏感值提取出来在运行时加载。最好永远不要在您的 repo 中放置私有文件,因为您可能会意外地将develop变为公开状态。
如果您使用此解决方案,则已经非常接近使用我建议的Git Flow工作流方式。

变基合并

如果您绝对不能使develop公开,则需要进行变基合并。首先执行:
git rebase --onto develop master myfeature

您的历史记录现在会是这样的:
           F'--G'--H'--I' [myfeature]
          /
*--A--B--C [develop]
    \
 ... D--*--*--E [master]
               \
                F--G--H--I

接下来,您可以像平常一样合并到 develop 分支:

git checkout develop
git merge --no-ff myfeature

给你:
           F'--G'--H'--I' [myfeature]
          /             \
*--A--B--C---------------J [develop]
    \
 ... D--*--*--E [master]
               \
                F--G--H--I

这种解决方案的另一个缺点是,就GitHub而言,PR尚未合并,所以您需要手动关闭它。与此相关的是,提交PR的用户在您从develop发布新更改到master之前将无法看到已合并的状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接