Answers:
我认为您想要hg revert -r<rev> <file>
(这会将文件更改为给定版本的文件)。
正如djc所说,revert
更改文件的位置以匹配先前的版本。如果您不希望将其放置在适当的位置,则可以使用hg cat -r revisionid filename
(当然,用revificationid和filename代替),它将文件输出到stdout,适用于重定向您想要的任何位置。
hg revert
确实解决了这个问题。但是我认为您对更广泛的事情感到困惑,而不仅仅是对问题的答案,并且想尝试更全面地回答。
hg update
是整个存储库命令,不适用于单个文件。它不同于svn update
以这种方式进行颠覆。如果执行hg --help update
此操作,则可以看到是这种情况,因为该命令不使用文件参数。它可用于将整个存储库移至特定快照,但不能仅将其移至一个文件。
如果键入,hg --help
则会看到命令列表。这是一个相当大且有些令人生畏的列表,但是如果您仔细阅读它,将会发现以下行:
revert restore individual files or directories to an earlier state
现在,如果您只是想将最后一个状态用于比较目的,那么您可能会对另外一个命令感兴趣,那就是hg cat
。这样您就可以打印出任何特定版本的文件内容。然后,您可以将其输出重定向到其他文件。然后,您可以将文件的先前已知的正确版本与旧版本进行并行比较。
Mercurial具有单独的update
命令的原因是,可以在Mercurial中做某些在Subversion中不可能完成的事情。您可以update
对早期版本进行更改,然后提交。这将创建一个分支。该update
命令的作用还在于更改当前工作目录的父修订版,以及将该目录中所有文件的内容更改为该父修订版的版本。
这意味着revert
更改文件的内容(如果给命令指定正确的参数,甚至更改整个存储库的内容),但使当前工作副本的父修订版保持不变。
您可以使用以下hg parents
命令找出当前工作副本的父修订版(或合并时的修订版)。
在Subversion中,修订是严格线性的。Mercurial只需轻按一下即可创建分支,并且它们几乎一样容易合并。修订版形成DAG,而不是严格的线性级数。