在章鱼的最终合并之前清理普通提交



我正在帮助将一个长期运行的项目集成到主线。想要返回的特征分支之一本身就是章鱼合并(不是单个章鱼合并,而是随着时间的流逝而合并)。

这些迷你特征分支中的每个分支都散布在其独特的内容之间,这是一组通用的提交,它们被樱桃挑选到每个各自的迷你特征分支中。我想在合并回主线之前清理所有这些普通的提交。

可能相关的是功能分支的当前状态是"正确"的,即代码外观是应该的样子。

我尝试过的选项:

  1. 直截了当的rebase -i:导致了很多冲突,可能是由于将樱桃挑剔应用于多个迷你特征分支并被解决的问题
  2. rebase -i -p:这会导致与公共提交重复的完全相同的分支结构

在正常情况下,我只需挥舞投降的白旗并做南瓜。但是,我需要做的是用新的和改进的公共提交组替换这些共同的提交 - 这表明一个重生是进行的最合适的方法。

理想的是将rebase -i与冲突解决策略一起使用,该策略试图通过选择使结果看起来最终目标的冲突选择来解决冲突(当前的章鱼功能分支)。但是我不知道该如何告诉git做到这一点。

我的问题:

  1. 有什么方法可以告诉Git以上述方式解决冲突?
  2. 是否有更好,更干净的方法来实现我的目标?
  3. 我辞去了使用rebase手动重建这些微型功能的分支吗?

我将假设您对合并有很多了解(关于查找或在某些情况下,创建 - 一种共同的合并基础,扩散了终点与合并基础,并将差异组合在一起)并直接跳入以下答案:

  1. 否。在某些情况下,是一个简单的答案:只需使用最终版本即可。但这仅在最终版本是正确的版本时起作用。您给出的一些模糊的文本描述向我提出了您想要的,您想要选择一个中间结果,将来将与将来的合并基础和分支机构合并,目前最少的数量冲突。

    这是(显然)一个困难的问题,甚至可能是NP-HARD或NP完整的问题(通过剧烈的手挥手来证明:-))。内部节点中有太多自由度。

  2. 也许。要找出答案,请绘制您现在拥有的图形,以及最终想要的图形。(也就是说,绘制提交结构,其分支和合并,以及与每个将要在的提交集合的近似值。)标记提交的内容近似内容,并使用它来设想合并步骤。根据您要保留的内容和愿意丢弃的内容,重新排列中间结构,以获取您的价值。

  3. 而不是rebase(复制提交,然后移动分支标签),请考虑使用git cherry-pick(复制提交 - 没有分支标签运动,除了当前分支,都没有分支标签以通常的方式提出来)。这样,您只会添加结构的现有结构。您可以构建它们直到完成为止(随时使用git merge添加合并),然后在所有内容完成时, then ,您就会声明您的"旗帜日"。并使每个人都从旧提交(以现有分支名称命名)转换为新提交(每个拥有旧提交的人都必须获得新提交,然后移动其分支机构的名称,以指向新的。)。

最新更新