我是Mercurial的新手。只是找不到合适的命令。尝试更新/结账,没有运气。我正在使用本地存储库。感谢
答案 0 :(得分:145)
我认为您需要hg revert -r<rev> <file>
(这会将该文件更改为与给定版本相同)。
答案 1 :(得分:80)
正如djc所说,revert
改变了一个文件,以匹配先前的修订版。如果你不希望它没有到位,你可以使用hg cat -r revisionid filename
(当然代替revisionid和filename)将文件输出到stdout,适合重定向你想要的任何地方。
答案 2 :(得分:23)
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,而非严格的线性进展。
答案 3 :(得分:11)
要提取特定文件的特定版本,您可以在Windows上执行此操作:
hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"
这里,9是修订号。
甚至更好:
hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
答案 4 :(得分:0)
在这里尝试获取以前的版本,所以这里是确切的命令:
hg revert -r .~1 <file>