我们有一个标准的Web项目,并为该项目维护3个核心分支:Master,Beta和Develop。以下是我们使用的流程/工作流程的摘要:
(1)请求新功能/更新,因此我们创建了一个新功能分支。
(2)对新功能分支进行提交,并将功能分支合并到“开发”功能中。科; '发展'然后将分支发布到要测试的测试环境中。
(3)测试/批准新功能后,在同一功能分支中进行新的拉取请求;这个新的拉取请求旨在合并到“测试版”中。科。
' Beta'分公司拥有我们所有的"准备就绪"功能:事实上,我们发布了' Beta'直接分支到生产环境,当它准备就绪时,我们立即合并' Beta'分支到主人'分支....通过这样做,'大师' branch始终是生产环境中代码的副本。
问题:在上面的步骤3中,当我们尝试将新功能分支合并到“测试版”中时。分支,pull请求包括已合并到' Develop'科。
示例:5个功能分支分别合并到“开发”中。分支(分支标记为1,2,3,4和5)。所有5个都经过测试,但是前4个有bug。所以分支" 5"已批准,我们尝试为该功能分支创建一个拉取请求并将其合并到“测试版”....但是当我们这样做时,拉取请求包括所有5个功能分支....不仅仅是分支的提交" 5"。
我们必须做错事!我们可以做些什么来修复我们的流程/工作流程?
答案 0 :(得分:6)
(3)测试/批准新功能后,在同一功能分支中进行新的拉取请求;这个新的拉取请求旨在合并到“测试版”中。分支。
' Beta'分公司拥有我们所有的"准备就绪"功能:事实上,我们发布了' Beta'直接分支到生产环境,当它准备就绪时,我们立即合并' Beta'分支到主人'分支....通过这样做,'大师' branch始终是生产环境中代码的副本。
问题:在上面的步骤3中,当我们尝试将新功能分支合并到“测试版”中时。分支,pull请求包括已合并到' Develop'分支。
不,这没有意义。如果发生这种情况,您就省略了重要信息,例如:
在每种情况下,您的工作流程都会从根本上被打破,无法就您对Beta分支的想法发挥作用。因此,如果你想避免挑选(糟糕!糟糕!糟糕!)你怎么能实现你想做的事情?有一些基本选项:
答案 1 :(得分:1)
这就是git的工作方式。您需要为每个功能创建单独的分支。
答案 2 :(得分:1)
一旦你合并一个分支与另一个分支,合并分支提交就会在主分支上提交。
您可能想要做的事情甚至不在开发分支上进行开发,而是针对每个功能(当然是序列化功能)进行分支,然后单独检查在将许多功能分支的包合并到开发分支之前的错误。
要消除进入开发分支的错误,您需要让代码在功能分支上运行,然后合并或通过还原功能分支来还原更改使用git revert
然后再次合并分支(有效地仅还原它引入开发分支的提交。
恢复开发分支(或层次结构中的任何更大的分支)在业界通常是不明智的,除非您只合并一个功能...因为不同的提交可以在它们之间建立依赖关系并且可能导致恢复比它解决的伤害更大。
答案 3 :(得分:1)
你是对的,我们的工作流程与传统的GitFlow不同。特征 分支完全独立地合并为E
develop
或beta
。测试/批准新功能后,会在同一功能分支
中生成新的拉取请求
f2--f2--f2 (f2)
/ \
d--d--d--D1-------D2 (develop)
\ /
f1---f1
一堆不需要/不相关的功能分支提交也合并到“beta”中
奇怪:那就像f2在D2合并提交中一样(有f2但也有f1)。
要进行测试,您可以尝试使用命令行cherry-pick the exact commits you want,然后merge them with --squash
。
git checkout -b tmp develop
git cherry-pick $(git merge-base develop f2) f2
git checkout beta
git merge --squash tmp
通过这种方式,您可以验证只能获得您想要测试的f2
合并分支,而不是所有其他功能。
一旦验证了,我们就可以从GUI(例如SourceTree)
答案 4 :(得分:1)
你说将功能5合并到测试版中也会将功能1-4带入测试阶段。如果是这样,功能1-4的提交肯定在功能5分支中。有三种方法可能发生:
特征5在特征1-4合并到开发之后从开发中分支出来。
在功能1-4合并到开发中后,Develop被合并到功能5(upmerge)。
功能1-4直接合并到功能5中。
请注意,分支不仅包含直接提交给分支的提交,还包括从repo开始到分支点的所有提交,以及分支中的任何提交都合并到分支中。
顺便说一句,即使你改变了' merge'到了'' rebase'或者'开发'到任何其他分支。答案 5 :(得分:1)
我会按照以下步骤进行。
我会记住以下事项。