我们正在尝试创建具有PR的工作流,以不断发布我们应用程序的新版本。
我创建了一个回购协议来说明正在发生的事情。 https://github.com/austinbv/test-pr
我们正在尝试的常规工作流程:
master
(https://github.com/austinbv/test-pr/pull/1)master
的PR创建为prod
(https://github.com/austinbv/test-pr/pull/2)来削减发行版master
被合并到prod
(https://github.com/austinbv/test-pr/pull/2)当我们从master创建合并到prod中时,我们总是会看到合并冲突,并且将应用自prod创建以来在master上发生的所有提交。
您可以在这里(https://github.com/austinbv/test-pr/pull/5)看到。
似乎不对劲的东西
git
来完成所有合并和变基工作欢迎就我们在做什么或是否滥用git / github提出任何意见
答案 0 :(得分:1)
您观察到的问题肯定是由于项目中的“合并请求”已被“合并”的方式引起的(我在引号之间加上了这个词,因为似乎实际上没有发生合并)。
更精确地说,GitHub提供了三种方式来将拉取请求集成到另一个分支中,请参见。以下截图摘自official GitHub documentation:
在集成拉取请求的三种可能方法中:
只有第一个会导致true merge并创建所谓的合并提交,即具有≥2个父母的提交。
其他策略实际上依赖于git rebase
命令(壁球是git rebase -i …
的变体),该命令具有以下“缺点”:
git rebase
是一种破坏性操作:它更改了重新提交的 SHA1 ,并且一些或所有重新提交的提交可能不再编译了。强势>改头换面后! (虽然最初的提交确实可以编译); master
到prod
创建PR#5时,会出现虚假的,意外的合并冲突; 最后,当您观察提交的图形时,在重新设置基础或壁球之后,您再也看不到了,只要对历史进行了调整,PR整合的贡献的确切“历史”是什么?由git rebase
制成的“线性”,请参见。以下是您的示例项目中gitk prod
然后gitk --all
生成的屏幕截图:
gitk prod
而基于git merge
的标准历史记录看起来像是“有向图”,参见。例如下面的屏幕截图取自this older SO answer:
gitk
在另一个示例项目中
因此,在这种情况下,您可能需要系统地使用创建合并提交 GitHub PR策略,该策略似乎更适合您的两步工作流程(合并到master
中,然后合并到prod
中。
顺便说一句,此工作流程看起来与所谓的Git flow非常相似,其中两个主要分支称为(develop
,master
)而不是({{1} },master
。
答案 1 :(得分:1)
开发人员在功能分支(https://github.com/austinbv/test-pr/tree/flowthrough)中工作
Developer推送Feature分支并从Feature分支创建PR到master(https://github.com/austinbv/test-pr/pull/1)
您遗漏了1a:在推送之前,开发人员将master
拉到master
上并将功能分支重新建立基础。
如果这样做,您将不会获得所有这些额外的历史记录,因为合并到master
上的每个分支都将在master
的顶部发散。