放弃所有并获得最新修订的干净副本?

我正在移动一个构建过程来使用 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

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

我想做的相当于删除回购,做一个新的克隆,并更新。但回购规模太大,速度不够快。

173079 次浏览
hg up -C

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

你也可以打开 清除扩展来删除所有没有版本控制的文件。

这些步骤可以简化为:

hg pull
hg update -r MY_BRANCH -C

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

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

hg pull
hg update -r MY_BRANCH -C
hg purge

在任何情况下,您都不能要求 Mercurial 执行一个单独的命令来完成您想要在这里完成的任何事情,除非您将进程更改为您说不能执行的“完全克隆”方法。

在 * nix 上删除未跟踪的内容,而不使用可以使用的 purge 扩展名

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

也就是说

更新-r ——转速修订

Update-C ——清除未提交的更改(没有备份)

Status-u ——未知仅显示未知(未跟踪)文件

无状态隐藏状态前缀

如果您正在寻找一个 放松方法,那么您可能需要尝试这样做。

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


1. 首先,选择“提交”

Commit

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

Show ignored files

3. 现在,选择所有这些文件,然后点击“删除未版本”。

Delete them

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

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 really clean”和“ make distclean”选项。