Mercurial:更新到修订版,但不修改本地文件

时间:2010-12-14 05:45:11

标签: mercurial tortoisehg

假设存储库有20个修订版。记录中的当前版本是修订版 10 ,而实际的本地文件基于最新版本 20 。我不想从修订版 10 分支。我想继续修改 20

目前我正在做的是将所有文件复制到修订目录之外,运行hg update -C(更新修订版号),删除存储库目录中的所有文件,将所有文件复制回来,然后承诺。你可以说这很烦人,浪费时间。有没有办法只更新修订号,但不能修改任何本地文件?

提前致谢。

编辑:有很多用例(我主要使用TortoiseHg)。

1)在提交期间提示从存储库中删除文件时,我错误地选择“否”。我可以使用mq中的strip删除修订版本,但这将恢复所有提交的文件。相反,我想“重新父”到先前的修订版,再次提交,然后删除不需要的修订版。这可能随时发生在任何人身上,不仅仅是我,而不仅仅是一次。

2)我有一台开发机器A.我启动了项目,几个月后切换到机器B. A上的代码变旧,B上的代码未更改。如果我想在A上继续开发,我需要通过Flash或网络等将代码复制到A.现在我想在没有分支的情况下提交A(因为A上的代码实际上是基于当前的提示)。这可能不那么频繁,但仍然不是“一次”问题,更可能是在涉及大项目时。

3)存储库有2个分支C和D.大约有2000个文件。当前提示是在C中。我想用C中的相同命名文件覆盖D中的一些文件(因为C更多实现),同时保留其他文件不变,然后在D中创建新提示。我有几个选项。我可以更新到D,将D的最新版本与当前提示进行比较,进行更改和提交。更新需要一些时间,比较的难度很大程度上依赖于比较工具。我还可以先比较,进行更改,备份整个目录,更新到D,然后恢复整个目录。这更加麻烦。但如果我可以“重新父母”到D,我只需要做出改变并提交。这不依赖于比较工具,因为TortoiseHg中的提交窗口有差异列表。

如果您想要思考,可能会有更多用例。我希望Mercurial提供这样的“重新父母”功能(据称是hg更新的新选项),或者至少是方便的选择。

3 个答案:

答案 0 :(得分:16)

您可能会觉得这很有用:http://hgtip.com/tips/advanced/2010-04-23-debug-command-tricks/

特别要“重新显示”当前的工作目录,请发出:

hg debugsetparent 20
hg debugrebuildstate

答案 1 :(得分:5)

您可以使用hg debugsetparents设置工作副本的父版本。

答案 2 :(得分:2)

默认情况下,hg update已经保留了您未提交的更改。因此,在hg update之后,您仍会在hg statushg diff中看到未经提交的更改。无需从工作副本中复制文件并重新登录。

但是,将更改作为修订版10的分支提交可能更安全。这样可以安全地记录您的更改。然后,您可以在单独的提交中执行带有修订版20的mergerebase,而不必担心在解决冲突期间您会丢失某些内容。

仅供参考,有些选项会修改hg update documentation中所述的默认hg update行为。如果您有未提交的更改,--check-c将拒绝更新。 --clean-C(您目前使用的内容)会丢弃任何未提交的更改