我在一个拥有大量Java代码(300k+行)的团队中工作,最近从ClearCase移植到Git作为源代码控制。我们使用Git Flow作为分支策略。我们经常遇到一些情况,一直在努力解决。
我们将所有功能合并到develop分支中,以在即将发布的版本中使用。当我们接近发布时,发现某个功能不能上线(可能是由于客户没有准备好,或者其他原因)。创建发布分支的最佳方法,但要留出特定的功能(跨越多个提交)。该功能需要可以包含在下一个未来版本中。我们之前尝试过的方法是对所有提交执行"git revert",创建发布分支,然后对恢复的提交执行"git revert"。这是一种相当痛苦的方法,特别是对于大型功能。
我们已经创建了发布分支,但在发布上线之前,确定需要删除某个功能。与第一个用例类似,该功能需要能够进入以下版本。由于这个原因,仅对提交执行"git revert"并不能完全解决问题,因为还需要在"git flow release finish"时将撤销操作合并回develop分支。
正如Git Flow模型所述,所有提交都是在功能分支上进行的,而不是直接在develop分支上进行的。当功能完成并准备好进入下一个版本时,它会被合并到develop分支中。当需要发布下一个版本时,将从develop创建发布分支。发布经过回归测试并根据需要进行修复后,将进入生产环境并合并到master分支中,在进行错误修复的情况下还要合并回develop分支,并打上版本号。以上问题出现在我们认为可以在下一个版本中使用的功能最终需要被删除时。
如何处理这些情况是最佳方法?在这两种情况下,分支已经被许多开发人员发布和拉取,因此更改历史记录可能会带来困难。我知道这些情况不是理想的,但不幸的是我们无法控制。