如何恢复Mercurial hg拉?

时间:2011-01-24 16:17:15

标签: mercurial

如果您执行hg pull,然后执行hg update(或hg merge),有没有办法支持这个?即:将您的存储库恢复到执行hg pull之前的状态?

我相信您可以执行hg update -r n,您可以在拉取n之前指定变更集。虽然我猜这仍然会将更改集留在您的存储库中,但这并不是我们想要的。 ??

5 个答案:

答案 0 :(得分:11)

hg strip将从存储库中删除修订。像所有强大的命令一样,它很危险,所以要小心。

https://www.mercurial-scm.org/wiki/StripExtension

另见:

https://www.mercurial-scm.org/wiki/EditingHistory

  

如果您立即(或很快)抓住了您的错误,您可以使用 hg strip REV 来回滚最新(一个或多个)更改。 ...

答案 1 :(得分:6)

好的,你无法回滚,因为你已经完成了提交。您可以做的是使用'hg strip',它是mq的一部分(在2.8 strip之后是它自己的扩展名),或使用mq删除更改。无论哪种方式,我建议你在另一个克隆上做一切,以防万一。

要执行剥离,请更新到要保留的修订,然后

hg strip <REV>

其中<REV>是您要删除的第一个修订版。它将删除该一个和所有后代(包括您的合并提交)。

或者你可以

hg qnew (if you don't already have a patch queue)
hg qimport <REV>

将单个修订导入修补程序队列。然后,您可以添加更多,然后使用mq命令编辑,重新排列,删除或您想要对这些修订执行的任何操作。 qdel删除当前的补丁。


编辑:显然,除非您使用2.8或更高版本,否则您需要为这两者启用MQ扩展。在这种情况下,条带在条带扩展中,mq在mq扩展中。两者都附带标准安装。

答案 2 :(得分:3)

hg --rollback可用于撤销上一笔交易,因此只要您的hg pull仍然是最近的交易,您就可以使用它。但是应该谨慎使用此命令。有关更多详细信息,请参阅here

答案 3 :(得分:0)

你可以:

hg update -C <version>

请参阅mercurial FAQ

答案 4 :(得分:0)

如果你想从你的历史中删除拉动的所有痕迹,那么你需要使用Bert F建议的扩展(mercurial中的哲学永远不会改变历史)

如果您不介意包含您的错误的历史记录,您有两个略有不同的选项hg update -C -r,这将在您指定的版本或hg revert -r创建一个新的分支,它将保留在同一分支但创建一个新的无意义的改变撤消一切。