如何将文件还原到Mercurial中的早期版本?

时间:2014-08-06 15:06:40

标签: mercurial

我对文件进行了一些更改并提交了它。 (实际上有几个提交)。

然后我想恢复到早期版本并丢失所有这些更改。

我做了类似的事情:

hg update -r nnn其中nnn是我想要回到的变更集的返回编号。

那很有用。我很高兴。

然后,我不得不将我的本地存储库推送到远程。但是当我按下hg时,我收到一条消息,说这个分支上有两个脑袋,其中一个不知道远程资源库。它建议我在推送前合并。 (我想)。

我用Google搜索了一下,发现了一个建议我这样做的页面" hg merge"。我做到了现在生成的文件又回到了我开始的位置。即它包含了我想扔掉的所有变化。

我哪里出错?

编辑:

我找到了这篇文章Mercurial — revert back to old version and continue from there

它说:

  

如果稍后提交,您将有效地创建一个新分支。然后   你可以继续只在这个分支上工作或最终合并   现有的一个。

听起来像我的情况。似乎在合并阶段出了点问题。当我做错时,我是否在错误的分支上" hg merge"?

2 个答案:

答案 0 :(得分:1)

不,合并阶段没有任何问题--Mercurial完全按照你的要求行事......

merge的含义是您对当前分支进行更改,并对“其他”分支进行更改,然后合并它们。由于您的原始更改位于“其他”分支中,因此Mercurial会将它们小心地合并到您当前的分支中。

您需要做的是放弃“其他”分支。有各种方法可以做到这一点。 Mercurial help pages讨论各种技巧,但其他SO问题也有提示:例如Discard a local branch in Mercurial before it is pushedRemove experimental branch

编辑事后补充:你得到关于分支上有两个头的警告的原因是因为有两个头经常临时情况,因此将它们推送到远程存储库是您不想意外做的事情。决议是(i)你的意思是推动它们,所以使用--force在远程存储库中创建两个头; (ii)ooops !,你打算在推之前合并它们,所以这样做;或者(iii)ooops !,你放弃了“另一个”,所以摆脱它。你的案子是(iii)。

答案 1 :(得分:1)

您现在已经超过了这一点,但如果它再次发生,并且它只是您希望还原的单个文件,请考虑:

hg revert --rev REVISION_YOU_LIKED path/to/just/one/file.txt

这并不是将整个存储库更新为其他版本,也不会创建任何提交。它只需要在您的工作目录中使用一个文件,并使其看起来像以前一样。完成后,您可以提交,然后进行设置。

如果您要撤消对所有文件所做的所有更改,那么这不是要走的路,但要恢复单个文件,请使用revert并避免多个头并完全合并