这可能是一个相对容易回答的问题,但我似乎无法自己提出解决方案(或在网上找到它)。所以我依靠你! :)
短:
在我历史上多次将功能分支合并到主的历史记录中,我想摆脱所有这些中间合并提交。
长:
为了说明,我已经建立了一个非常简单的测试回购。它的历史看起来像这样:
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"
但历史最终看起来像这样:
A---B---C---E-------H [master]
\ /
----F---G [feature]
这里的问题是C现在是 master 历史的一部分。这意味着我可以不再轻易地从主的历史记录中删除功能。
重点是我希望尽可能多地分开两个分支,所以如果我决定一共删除功能,我可以重置 master E并执行git branch -D feature
。
这可能很容易实现,但不知怎的,我只是不知道如何。
任何帮助表示赞赏! 谢谢!
答案 0 :(得分:0)
您不仅需要删除提交“D”,还需要在重新定位时提交“C”(正如您使用--preserve-merges
正确陈述的那样)。这样你就可以确保你的“主人”只包含“A”,“B”,“E”和“H”。您还应该在“B”(而不是“A”)上进行重新定义,以确保“C”引用与“E”在rebase之后的父级相同的提交。
当你这样做时,你可能会遇到冲突,因为“E”以前建立在现在已经消失的“D”上。您可能需要手动解决它们并使用git rebase --continue
继续进行变基。