4

我有“测试”分支,其中有 15 次不正确的提交(它们是此分支中的最后一次提交)。我不需要这些提交,我想撤回它们。但我还需要有“测试”分支,我不能直接关闭它。

  • 如何撤销许多提交?使用 mercurial 标准回退太难了,会有太多的提交和合并。有没有办法将所有回退提交合并到一个大提交中?

  • 有没有办法重命名分支并关闭它?

所有更改都存在于远程服务器上。这些更改不是整个 repo 中的最后一个,它们是仅在 test-branch 中的最后一个更改集。

4

2 回答 2

3

如果您需要将变更集保留在历史记录中(特别是因为您无法确定它们可以strip从每个 repo 中被 -ed),您有几个选择:

1)只需将--close-branch您的测试分支的尖端提交到该分支update上良好的最后一个修订版,然后重新打开您的测试分支并从那里提交新的提交。这是有效的,因为一个命名的分支可以有多个头。

2)使用hg revert -r <last good rev>和提交。这应该使工作目录完全一样<last good rev>,然后您可以提交变更集,该变更集有效地撤消了您要删除的 15 个更改中发生的事情。我会用hg diff -r <last good rev>它来确保它完全正确,因为您可能需要修复已添加或删除的文件。

如果您能够strip从服务器进行更改(如@Dalija 的回答中所述),但希望在本地保留一个版本以备将来使用,请检查以在从其他任何地方执行它们之后hg phase强制阶段secret本地化。strip这样你仍然可以拥有它们,但默认情况下它们不会被推送。

于 2014-12-22T16:12:51.617 回答
1

您可以hg strip用于从存储库中删除变更集及其后代。但是您必须在要修剪test分支的所有存储库中执行此操作,否则它们会在您pull.

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

于 2014-12-22T15:41:10.657 回答