Version control 在Mercurial中撤消错误的编辑

Version control 在Mercurial中撤消错误的编辑,version-control,mercurial,Version Control,Mercurial,假设我运行hghistedit,进行一些更改,然后提交。然后我意识到我犯了一个错误。如何放弃新版本并将存储库恢复到histedit之前的状态 也就是说,Mercurial是否有类似于git reset--hard$BRANCH@{1}的安全网 (我也在使用Evolve扩展) 在Mercurial中有点棘手,因为剥离的变更集以另一种格式(作为捆绑包)存储,但Mercurial通常会保存任何剥离的变更集。当您编辑历史记录时,Mercurial告诉您它保存它们的位置。按照@torek所说的,另一个问题

假设我运行
hghistedit
,进行一些更改,然后提交。然后我意识到我犯了一个错误。如何放弃新版本并将存储库恢复到histedit之前的状态

也就是说,Mercurial是否有类似于git reset--hard$BRANCH@{1}的安全网


(我也在使用Evolve扩展)

在Mercurial中有点棘手,因为剥离的变更集以另一种格式(作为捆绑包)存储,但Mercurial通常会保存任何剥离的变更集。当您编辑历史记录时,Mercurial告诉您它保存它们的位置。按照@torek所说的,另一个问题的解决方案应该非常类似:如果您不确定它是哪个捆绑包,您可以先查看捆绑包内部,我想可以使用捆绑包文件中的
hg incoming
。您还可以按时间戳对它们进行排序。Evolution背后的理论是,Mercurial不需要删除旧的提交,而只需存储新旧历史记录,旧的历史记录标记为“过时”,新的历史记录标记为“改用它”。我不知道什么命令会恢复,但理论是显而易见的:您只需使用与原始提交匹配的更新提交将替换提交标记为过时。您应该能够在“hg log--hidden”中看到旧的重写提交。然后,您可以使用“hg touch”使其恢复活力。在恢复希望恢复的旧更改后,您可能还需要删除不正确的重写更改。启用evolve后,原始更改将被标记为过时,并被“hg log”等操作跳过为隐藏。正如@ngoldbaum所说,“hg log--hidden”将向他们展示。另一个选项是“过时”。这将分析过时标记,并向您显示哪些更改,例如,已被改写为哪些较新的更改。然后,您可以使用普通工具通过添加“-hidden”来发现细节。在Mercurial中,这有点棘手,因为剥离的变更集以另一种格式(作为捆绑包)存储,但Mercurial通常会保存任何剥离的变更集。当您编辑历史记录时,Mercurial告诉您它保存它们的位置。按照@torek所说的,另一个问题的解决方案应该非常类似:如果您不确定它是哪个捆绑包,您可以先查看捆绑包内部,我想可以使用捆绑包文件中的
hg incoming
。您还可以按时间戳对它们进行排序。Evolution背后的理论是,Mercurial不需要删除旧的提交,而只需存储新旧历史记录,旧的历史记录标记为“过时”,新的历史记录标记为“改用它”。我不知道什么命令会恢复,但理论是显而易见的:您只需使用与原始提交匹配的更新提交将替换提交标记为过时。您应该能够在“hg log--hidden”中看到旧的重写提交。然后,您可以使用“hg touch”使其恢复活力。在恢复希望恢复的旧更改后,您可能还需要删除不正确的重写更改。启用evolve后,原始更改将被标记为过时,并被“hg log”等操作跳过为隐藏。正如@ngoldbaum所说,“hg log--hidden”将向他们展示。另一个选项是“过时”。这将分析过时标记,并向您显示哪些更改,例如,已被改写为哪些较新的更改。然后,您可以使用普通工具通过添加“-hidden”来发现详细信息。