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

时间:2016-11-08 00:36:02

标签: git github git-merge pull-request

假设有人在Github上向公共/主人提交PR。

有没有办法将该PR合并到另一个分支?否则,看起来我必须合并到public / master,然后将其合并到开发/暂存分支中。这就像让人们做一个修补程序,然后将修补程序合并到一个开发分支,这是我们通常应该避免的东西吗?

似乎让人们更有意义的是让人们跟踪并将PR提交给登台/开发分支而不是主人。

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

1 个答案:

答案 0 :(得分:2)

根据定义,您无法针对您不知道存在的分支定位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它们,或者从中提取敏感值以便在运行时加载。最好不要在您的仓库中的任何地方拥有私人文件,因为除其他原因外,您可能会意外地将develop公开。

如果您使用此解决方案,那么您已经非常接近使用Git Flow工作流程,我也建议您这样做。

Rebase和Merge

如果你绝对不能公开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的用户在您从developmaster发布新的更改之前,将无法看到它已合并。