我如何退出工作目录中的 Mercurial 变更集而不将其提交到回购协议?

How can I backout of a Mercurial changeset in a working directory and not commit it to the repo?

Backout works by applying a changeset that's the opposite of the changeset to be backed out. That new changeset is committed to the repository, and eventually merged.

https://www.mercurial-scm.org/wiki/Backout

如何在不提交更改的情况下退出?我只想在工作目录中恢复变更集。

尝试 hg backout --no-commit REV

这将执行回退但不提交更改。

假设您已经提交了一个新的变更集但还没有推送它;假设您的历史记录如下所示:

A--B--C--★

其中 C 是您希望删除的最近提交的变更集,但将其修改保留在工作文件夹中。 ★ 是工作目录(不是实际的变更集本身)。

有不止一种方法可以做到这一点。一种方法如下...

hg up B

这使您的历史看起来像这样:

A--B--★
    \
     C

然后做

hg revert -r C

这实际上将 C 中的任何更改复制到您的工作文件夹中。

那么你可以做(​​可选)

hg strip C

将 C 从历史中抹去:

A--B--★

这种方法的一个优点是它完全删除了 C,就像它从未存在过一样。

(我提到使用 strip 在这个意义上是可选的:如果你确实将 C 留在原地,它不会造成什么危害。如果它被标记为秘密,你永远不需要推送它。但是我个人会通过剥离来清理它。)