Squash 在合并上游分支后提交



在我的功能分支中,历史记录看起来像

从主节点分支 -> 添加提交 -> 合并主服务器上的最新提交 -> 添加更多提交

在"添加提交">

部分添加了一些大文件,然后在"添加更多提交"中删除这些文件。我想从功能分支上的第一组和第二组提交中压缩一些提交以释放此空间。不幸的是,似乎来自主人的合并将使这变得困难。

这似乎与其他类似的问题不同,因为 2 个分支仍然是独立的,但我只是合并了 master 的最新提交。功能分支仅由我使用,因此我可以重写其历史记录。

我将绘制您的场景,以便于谈论:

master
v
A--B--C
     
D--E--M--F--G
^
feature

现在,为了论证起见,让我们假设您希望将提交G(合并后发生)压缩为提交E(在合并之前发生)。

正如@iBug在评论中指出的那样,最简单的出路(因为您拥有分支)是简单地进行壁球,然后重做合并,因为默认情况下,交互式变基将删除所选范围内的任何合并提交。

但是,如果您真的想M保留在原地,您可以尝试使用--rebase-merges选项进行迭代变基:

git checkout feature
git rebase -i --rebase-merges D

从文档中:

使用--rebase-merges,变基将尝试通过重新创建合并提交来保留要重定基址的提交中的分支结构。

但是,请记住:

这些合并提交中任何已解决的合并冲突或手动修改都必须手动解决/重新应用。

因此,在这种情况下,--rebase-merges唯一能买到的是,在您压制提交后,合并提交将保留在feature分支历史记录中的相同位置。

最新更新