我有这样的git时间轴:
所有这些功能都是按顺序发生的(第一个功能1。完成后,然后是功能2,依此类推)。
功能2与功能1“冲突”。冲突不是git冲突,而是特征冲突。
现在客户决定选择功能1,因此我们需要将其从死角中拉出来。
拥有一个包含功能1 +主设备中其他功能(本例中为功能3),但不包括功能2的新分支的最安全,最有效的方法是什么?
我想出的另一种选择是:
但是随后您需要知道所有分支(在这种情况下,很简单,只有功能3)。但实际上,您有很多。
已编辑:此外,它无法正常工作……因为Feature-3是基于master的,它承载了feature-2(已合并到master)中所做的所有更改。
答案 0 :(得分:0)
没有“最安全的方法”来创建新的git历史记录,而该历史记录会遗漏原始历史记录中的一项功能。
两种最可能的可能性是:
git revert <commit_id>
中创建要还原的任何提交(最好以相反的顺序)。这将尽可能地撤销过去所做的更改。相对来说比较容易,但是过去还原的提交越远,它就会变得越复杂git rebase interactive <merge1_commit>
并删除要删除的所有提交。这会重播历史记录,您可以在每次重新提交基准后运行测试,以确保每个步骤都有效。但是,这将使历史变平,您可能不得不反复修复合并提交。在git之外,您可以考虑为给定功能添加功能切换的可能性,以便所有客户都使用相同的代码库,但是对于某些客户,将通过配置禁用功能。在某些情况下,这将使2个分支的前进更加容易。