我们目前正在从svn迁移到git,我们在svn中使用基于trunk的工作流程。如何合并仅包含在git分支中的提交
我们有两个git分支,主开发和发布。开发和发布是主分支。我们不想从开发中创建一个功能分支,并且在我们完成合并之后,通过拉取请求进行开发。 QA在开发分支上进行所有测试。 QA批准后,我们不想将功能分支合并到发布分支中。现在这里的问题是,如果有10个以前的特性合并到开发之前,我们创建了这个特性分支,那么所有这10个特性的提交也将包含在合并请求中。
我们想知道的是如何将FEATURE BRANCH中的提交合并到发布分支中。
我们研究了在sprint结束时创建发布分支的git流,但问题在于它将包含合并开发的所有功能。在我们的系统中,我们对开发分支进行QA测试,而不是单个功能分支进行QA测试,在git流程中,您应该先单独测试每个功能分支,以避免过早集成并减少回退。我们可能可以使用它,但问题是我们无法为我们的所有功能设置服务器的资源进行测试(服务器/每个功能的部署)
关于我们现在正在发生的事情的基本概念svn现有工作流程
我们有两个分支,干线和分段。我们开始我们的主干工作,在完成我们的功能后,我们将工作交给主干。后缀我们得到一个释放完成的干线分支到质量保证环境。质量保证测试的功能,在我们从质量保证中得到确认后,我们将我们的功能合并到暂存分支中。为此,我们从trunk中选择所需的修订版本,并将它们合并到分段分支中。 QA然后进行另一个最终的回归测试。在我们的冲刺结束时,我们从分期到生产和演示环境进行构建。
有谁知道我们如何使用两个分支开发和发布,并从开发创建功能分支,只将功能分支更改合并到发布分支。这是因为我们每个分支只能有两个测试环境。请注意,这个应用程序没有任何单元测试。
亚历山大Polomodov
编辑更新1
感谢您的见解。由于评论大小不够,我将其添加到主帖子中。具有讽刺意味的是,这是我们最初尝试的,但没有找到它来满足我们的需求。主要原因是每当我们创建一个功能分支时,如果发生冲突,只有在试图合并到开发分支时才会检测到。这是因为我们在没有其他人的变化的情况下开始我们的本地发展。现在让我们假设我解决了合并冲突,现在让我们来说说特征分支本身(我有一个问题,我在哪里修复它,稍后再介绍)。然后在QA通过并给我OK后,我将我的分支合并到版本中。 但是现在我得到另一个冲突,为什么?由于我简单地解决了合并冲突以匹配开发分支,现在导致此冲突的其他人的代码不能正常运行。如果我们要开发一个功能分支,并且当我们从开发中提交一个合并请求来释放IF时,分支中的提交只能以某种方式进行,那么剩下的唯一问题就是修复发布分支上的任何合并冲突ONCE。而且,由于我们创建了功能分支,所以每个人都将与其他人的代码一起工作。
编辑更新2
我试了第二种方法,但不能使它工作,在理论上这是我想做的事。我创建了一些我使用的示例步骤。
#create the repository
git init
#create the initial java source
mkdir src
gedit src/Test.java
#add and commit the code to the repository in master
git add src
git commit
#create the release branch from master
git checkout -b release
#create the develop branch from master
git checkout master
git checkout -b develop
#create the feature1 branch from develop
git checkout -b feature1
gedit src/Test.java #add another method
git add src/
git commit
#merge the feature1 to develop
git checkout develop
git merge feature1
#create the feature2 branch from develop after the merge
git checkout -b feature2
gedit src/Test.java #add another method
git add src/
git commit
#merge the feature2 to develop
git checkout develop
git merge feature2
#create a branch for rebasing the feature2
git checkout feature2
git checkout -b feature2release
git rebase release
在上面我创建一个主和两个分支开发和释放它。之后,我开始创建功能分支,并将其开发并提交给它们,并将它们合并到开发中。每个功能只是将新的java方法添加到代码中。现在我只想合并功能2中引入的方法来释放,而忽略任何其他提交的提交(在这种情况下只是由功能1引入的方法)。现在要做到这一点,我创建了一个feature2release分支,然后通过发布来重新分配。但是,当我这样做时,我收到以下消息。
Current branch feature2release is up to date.
你能告诉我我做错了什么,或者我应该怎么做。
我更新了主帖并回复了答案,因为评论部分不够长,请看看。 – MilindaD
想知道如果我创建了一个功能分支,开发并重新设置该功能分支以发布? – MilindaD
我已经添加了关于使用重新定位的一些想法,请仔细查看此方法的缺点以及依赖于已发布的未发布分支的示例 –