Mercurial – 如何丢弃所有本地更改,包括未版本控制的文件?

我正在移动一个构build过程来使用mercurial,并希望将工作目录恢复到最新版本的状态。 构build过程的早期运行将会修改一些文件,并添加一些我不想提交的文件,所以我有本地更改和未添加到存储库的文件。

什么是最简单的方法来放弃所有这些,并得到一个干净的工作目录,有最新的修订?

目前我正在这样做:

hg revert --all <build command here to delete the contents of the working directory, except the .hg folder.> hg pull hg update -r MY_BRANCH 

但似乎应该有一个更简单的方法。

我想做相当于删除回购,做一个新的克隆和更新。 但回购太大了,不够快。

这些步骤应该能够缩短到:

 hg pull hg update -r MY_BRANCH -C 

-C标志告诉update命令在更新之前放弃所有的本地修改。

但是,这可能仍然会在您的存储库中留下未跟踪的文件。 这听起来像你想摆脱这些,所以我会使用purge扩展:

 hg pull hg update -r MY_BRANCH -C hg purge 

无论如何,没有任何一个命令可以让Mercurial去执行,除非您将stream程更改为您所说的“完全克隆”方法,否则您将在此执行所有的操作。

 hg up -C 

这将删除所有的变化,并更新到当前分支的最新头。

你可以打开清除扩展 ,以便能够删除所有未版本控制的文件。

要删除没有清除扩展名的* nix未跟踪,您可以使用

 hg pull hg update -r MY_BRANCH -C hg status -un|xargs rm 

正在使用哪个

更新-r –rev修订版本

更新-C – 清除丢弃未提交的更改(无备份)

状态-u – 未知仅显示未知(未跟踪)的文件

状态-n – 无状态隐藏状态前缀

如果你正在寻找一个简单的方法,那么你可能想尝试一下。

我自己几乎不能记住所有工具的命令行,所以我倾向于使用UI:


1.首先select“提交”

承诺

2.然后,显示忽略的文件。 如果您有未提交的更改,请将其隐藏。

显示忽略的文件

3.现在,select全部,然后点击“删除未版本”。

删除它们

完成。 这是一个比命令行更容易记住的过程。

hg状态会显示你所有的新文件,然后你可以打他们。

通常我想摆脱忽略和未版本化的文件,所以:

 hg status -iu # to show hg status -iun0 | xargs -r0 rm # to destroy 

然后按照以下步骤进行:

 hg update -C -r xxxxx 

它将所有版本化的文件置于修订版xxxx的正确状态


要遵循堆栈溢出的传统,告诉你不想这样做,我经常发现这个“核选项”已经销毁了我所关心的东西。

要做到这一点的正确方法是在构build过程中有一个“干净”的选项,也许“做得很干净”,“做得干干净净”。