我有3个git分支 - Develop,QA和Master。开发人员使用Develop分支进行所有开发。一旦开发人员完成任务并且代码被提交到Develop分支,则提交将合并到QA分支进行测试。测试完成后,代码将合并到Master分支,然后进行部署。我们刚刚在QA分支中发现了一个必须在部署之前修复的错误。修复已在Develop分支中进行,但也包括我们此时不想部署的更改。那么,我们如何修复质量保证中的错误?我的第一个想法是直接对QA分支进行更改以解决问题,然后将这些更改合并回Develop分支。但我不确定可能会给开发分支带来什么问题(即丢失代码等等)
答案 0 :(得分:2)
使用Git,您可以使用cherry-pick
将一些提交从一个分支移动到另一个分支。
此处提到了文档: https://git-scm.com/docs/git-cherry-pick
但是cherry-pick
应该是例外而不是规则,主要是因为它可以导致解决更多问题。
理想情况下,我建议重新考虑您的分支策略。您可以使用从基线派生的要素分支。即如果在QA上发现错误,则从QA创建一个分支,修复它然后将其合并到QA然后合并到开发。以下链接可以帮助您入门:http://nvie.com/posts/a-successful-git-branching-model/
我的第一个想法是直接对QA分支进行更改以解决问题,然后将这些更改合并到Develop分支
这个想法是有效和正确的。我们已经在一个非常活跃的项目中跟踪它,没有太多问题,主要是如果您的更改是原子的,git足够智能,可以自动为您合并。如果发生冲突,大多数IDE现在都支持良好的3路合并。
答案 1 :(得分:0)
如果Develop分支中有一个提交修复了问题,您可以查看QA分支并运行
git cherry-pick <commit-id>
cherry-pick
操作采用任意提交所做的更改集,并将它们作为新提交应用于当前分支。如果您稍后将Develop合并到QA中,那么git足够聪明,可以避免双重应用这些更改。
当然,请注意,挑选提交不一定干净利落。准备好在出现冲突时手动合并冲突,并且在应用挑选出来的提交后,肯定会广泛地测试QA分支代码!
如果修复问题的提交还包含您不想应用于QA的其他更改,那么您需要在挑选之前拆分该提交。关于如何做到这一点,本网站还有其他问题。