假设有人在Github上向公共/主人提交PR。
有没有办法将该PR合并到另一个分支?否则,看起来我必须合并到public / master,然后将其合并到开发/暂存分支中。这就像让人们做一个修补程序,然后将修补程序合并到一个开发分支,这是我们通常应该避免的东西吗?
似乎让人们更有意义的是让人们跟踪并将PR提交给登台/开发分支而不是主人。
最好的方法是什么?棘手的部分是目前的临时/开发分支是私有的。听起来我必须将一个开发分支公开,然后引导人们分支并将PR提交给该分支?
答案 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
分支有一些提交(在这种情况下为B
和C
)也是私有的。
第二个问题是更重要的问题。如果提交B
与提交G
冲突,那么无论您如何尝试将更改从myfeature
转换为develop
,您将必须成为解决冲突的人。这不理想;我发现PR的作者更容易解决冲突,而不是维护者。
话虽如此,有两种解决方案:公开,或改组和合并。
这是我推荐的解决方案,因为它是最简单的长期解决方案。您可以将develop
分支推送到GitHub并将其公开。这将允许其他用户从develop
分支并向其发送PR。
您提到您的develop
分支中有某些私人文件。根据您需要这些文件的内容,您可以ignore
它们,或者从中提取敏感值以便在运行时加载。最好不要在您的仓库中的任何地方拥有私人文件,因为除其他原因外,您可能会意外地将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
发布新的更改之前,将无法看到它已合并。