我的团队已经开始在git下工作,其工作流程接近GitFlow。 我们有几个限制因素:
当某个功能准备好进行测试时,我们会将其合并到集成中,让用户对其进行测试,如果有效,请将功能合并为 dev 。
这意味着许多合并到集成,从许多不同版本的 dev 的功能分支,所以我们有这种树(左边是当前的集成分支)
团队规模为5个开发者。我们通常同时存在许多功能分支,每个分支都需要很长时间才能完成和验证。
由于Visual Studio Team Services(Visual Studio Online)处理拉取请求的方式(显示来自源分支的任何差异,因为它偏离目标,而不是模拟合并真实结果)我们希望减少从 dev 获得最新技术进步的功能分支引起的差异。
我想要走的路是rebase
将它们放到 dev 而不是将dev合并到它们中,但是当涉及到集成的合并时,这显示出一个问题:合并保持不变指向旧提交而不是rebase的新提交。
我得到了git rebase -p --onto new old
每次合并时想要的结果,但这看起来有点不对,特别是当从功能到集成有多个合并时。
我做了:
git rebase -p --onto <new B> <old B>
git rebase -p --onto <new B2> <old B2>
我甚至逃脱了更好看的树,因为git删除了B之后的第一次合并。
有没有办法:
答案 0 :(得分:0)
看来我们可以使用Use Gradle Wrapper
在集成上创建一个提交,它承载来自源分支的差异,但没有指向该分支的父指针。这将允许我们轻松地在开发HEAD上重新绑定 evol 分支,而不会在集成合并中指向旧提交的冲突指针。
我将与我的团队讨论这个问题,并在更新此答案之前进行几天试用。
我在执行git merge --squash
之后将 evol-B 重命名为 evol-B-rebased 以保持此视图并仍然能够创建拉取请求在github上。
集成上的提交是使用git rebase dev
这似乎比我们原来的树看起来好多了。我们应该确保只允许压缩合并集成,并且每个人都将源分支的名称放在该壁球的提交消息中。
唯一不完美的是,pull请求仍会显示所有功能的提交,而不仅仅是那些尚未压缩集成的提交,但是那个&#39; sa我想是必要的邪恶。
以下是将 evol-B-rebased 合并回 dev 并清理旧的 evol-B 后的情况:<登记/>
分支机构甚至独自落入自己的泳道,这很不错!
对于长期功能分支,在合并到集成时会产生巨大的拉取请求,我们只需为该功能的每个部分创建一个子分支并拉动请那些回到功能的主分支中(就像sprint分支/ sprint集成分支一样)