Git撤回了旧的功能分支,包括所有其他功能分支,但介于两者之间的一个

时间:2018-10-25 16:54:05

标签: git

我有这样的git时间轴:

  1. 主人
  2. 功能1->合并(掌握)
  3. 功能2->合并(掌握)
  4. 功能3->合并(掌握)

所有这些功能都是按顺序发生的(第一个功能1。完成后,然后是功能2,依此类推)。

功能2与功能1“冲突”。冲突不是git冲突,而是特征冲突。

enter image description here

现在客户决定选择功能1,因此我们需要将其从死角中拉出来。

拥有一个包含功能1 +主设备中其他功能(本例中为功能3),但不包括功能2的新分支的最安全,最有效的方法是什么?

我想出的另一种选择是:

  1. git checkout功能-1
  2. git checkout -b yeahbaby
  3. git merge feature-3

但是随后您需要知道所有分支(在这种情况下,很简单,只有功能3)。但实际上,您有很多。

已编辑:此外,它无法正常工作……因为Feature-3是基于master的,它承载了feature-2(已合并到master)中所做的所有更改。

1 个答案:

答案 0 :(得分:0)

没有“最安全的方法”来创建新的git历史记录,而该历史记录会遗漏原始历史记录中的一项功能。

两种最可能的可能性是:

  • 在master上创建一个分支,并在git revert <commit_id>中创建要还原的任何提交(最好以相反的顺序)。这将尽可能地撤销过去所做的更改。相对来说比较容易,但是过去还原的提交越远,它就会变得越复杂
  • 在master上创建一个分支,执行git rebase interactive <merge1_commit>并删除要删除的所有提交。这会重播历史记录,您可以在每次重新提交基准后运行测试,以确保每个步骤都有效。但是,这将使历史变平,您可能不得不反复修复合并提交。

在git之外,您可以考虑为给定功能添加功能切换的可能性,以便所有客户都使用相同的代码库,但是对于某些客户,将通过配置禁用功能。在某些情况下,这将使2个分支的前进更加容易。

相关问题