删除" obsolte"合并提交

时间:2014-07-30 17:47:04

标签: git version-control merge git-rebase

这可能是一个相对容易回答的问题,但我似乎无法自己提出解决方案(或在网上找到它)。所以我依靠你! :)

短:

在我历史上多次将功能分支合并到的历史记录中,我想摆脱所有这些中间合并提交。

长:

为了说明,我已经建立了一个非常简单的测试回购。它的历史看起来像这样:

A---B---D---E-------H  [master]
     \ /           /
      C-------F---G  [feature]

D和H是我将 feature 合并到 master 中的合并提交。现在我想摆脱第一次合并提交(D)以获得以下历史记录:

A---B---E-------H  [master]
     \         /
      C---F---G  [feature]

我试过的是:

  • git checkout master
  • git rebase --interactive --preserve-merges "A"
  • 删除提交" D"来自rebase list

但历史最终看起来像这样:

A---B---C---E-------H  [master]
         \         /
          ----F---G [feature]

这里的问题是C现在是 master 历史的一部分。这意味着我可以不再轻易地从的历史记录中删除功能

重点是我希望尽可能多地分开两个分支,所以如果我决定一共删除功能,我可以重置 master E并执行git branch -D feature

这可能很容易实现,但不知怎的,我只是不知道如何。

任何帮助表示赞赏! 谢谢!

1 个答案:

答案 0 :(得分:0)

您不仅需要删除提交“D”,还需要在重新定位时提交“C”(正如您使用--preserve-merges正确陈述的那样)。这样你就可以确保你的“主人”只包含“A”,“B”,“E”和“H”。您还应该在“B”(而不是“A”)上进行重新定义,以确保“C”引用与“E”在rebase之后的父级相同的提交。

当你这样做时,你可能会遇到冲突,因为“E”以前建立在现在已经消失的“D”上。您可能需要手动解决它们并使用git rebase --continue继续进行变基。