根据定义,你无法针对你不知道存在的分支进行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
,或者将敏感值提取出来在运行时加载。最好永远不要在您的 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
之前将无法看到已合并的状态。
master
应该是最新的稳定分支。它不总是最前沿的。只要 PR 看起来不错,有测试并且一切都通过了,就没有理由不合并到主分支。 - kylieCatt