Git 的 squash 合并的 Mercurial 等价物

Mercurial equivalent for Git's squash merge

我为一个小功能创建了一个命名分支,现在我想将它合并到默认分支但不推送功能分支。

在git,我可以做到git merge --squash my-feature。 Mercurial 中的等价物是什么,或者有替代品吗?

A Git "squash merge" 根本不是合并。它使用 merge machinery 来复制一堆其他提交的效果,并使用 merge-base-finding 机制来确定要应用哪个差异,但是它只是直接应用这些更改作为一个新的独立提交:

...--o--B--o--@    <-- you-are-here
         \
          Q--R--S   <-- stuff-you-want-to-squash

Git 现在有效 git diff B S | git apply -3.

Mercurial 没有那么多,但由于此 复制 提交 Q-R-S 的效果,并将它们作为新提交添加到 @ 之后,你可以使用 hg rebase。如果你想保留原始的 Q-R-S(或者有很多提交),请参阅 --keep 选项,以及获得压缩效果的 --collapse 选项。