166

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

放弃所有这些并获得具有最新版本的干净工作目录的最简单方法是什么?

目前我正在这样做:

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

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

我想做相当于删除 repo、重新克隆和更新的操作。但是回购太大了,速度不够快。

4

5 回答 5

220

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

hg pull
hg update -r MY_BRANCH -C

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

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

hg pull
hg update -r MY_BRANCH -C
hg purge

在任何情况下,没有一个命令可以让 Mercurial 执行来执行您想要的所有操作,除非您将流程更改为您说无法执行的“完全克隆”方法。

于 2011-02-10T13:42:00.970 回答
119
hg up -C

这将删除所有更改并更新到当前分支中的最新头。

并且您可以打开清除扩展以删除所有未版本控制的文件。

于 2011-02-10T13:39:07.617 回答
11

要在没有清除扩展的情况下删除 *nix 上的未跟踪内容,您可以使用

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

哪个正在使用

更新 -r --rev REV 修订

update -C --clean 丢弃未提交的更改(无备份)

status -u --unknown 仅显示未知(未跟踪)文件

status -n --no-status 隐藏状态前缀

于 2014-09-17T03:02:24.340 回答
3

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

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


1.首先选择“提交”

犯罪

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

显示忽略的文件

3. 现在,选择所有这些并单击“删除未版本化”。

删除它们

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

于 2015-09-12T01:32:22.303 回答
3

hg status将向您显示所有新文件,然后您可以rm他们。

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

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

然后遵循:

hg update -C -r xxxxx

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


为了遵循 Stack Overflow 告诉你你不想这样做的传统,我经常发现这个“核选项”已经破坏了我关心的东西。

正确的做法是在你的构建过程中有一个“make clean”选项,也许还有一个“make realclean”和“make distclean”。

于 2017-02-27T16:53:53.170 回答