2011-01-24 80 views
13

如果你做了hg pull然后hg update(或hg merge),有没有办法退出?也就是说:将您的存储库恢复到执行hg pull之前的状态?如何还原Mercurial hg pull?

我相信你可以做hg update -r n你可以在拉动前指定变更集为n。虽然我猜测这仍然会将变更集保留在您的存储库中,但这不是我们想要的。 ??

回答

2

hg --rollback可用于撤消上一个事务,只要您的hg pull仍然是最近的事务,那么您可以使用它。这个命令应该小心使用。有关更多详情,请参阅here

+0

在我的情况下,我做了拉,合并,然后提交(合并)。然后我意识到我想把所有这一切都退回来。 `hg rollback`让我退出提交,但我看不到如何退出拉.. – 2011-01-24 16:27:28

+1

有一个级别的回滚历史,所以我们将不得不看看是否有其他人发布不同的建议 – mikej 2011-01-24 16:34:26

0

,您可以:

hg update -C <version> 

看到善变FAQ

+1

似乎将我的工作文件更新到拉和合并之前的状态。但是`hg out`仍然显示我拉下来的变更集,而`hg push`会将这些变更集推送到我不想做的中央资源库中。 – 2011-01-24 16:51:04

0

如果你想删除的所有痕迹的形成拉你的历史,那么你需要为伯特˚F建议(在善变的理念是永远不会改变的历史)

如果使用扩展你不要介意包含你的错误的历史,你有两个稍微不同的选项hg update -C -r它将在您指定的版本创建一个新的分支或hg revert -r它将停留在同一分支上,但创建一个新的无限制的更改撤消一切。

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删除当前补丁。


编辑:显然,你需要使MQ扩展这两种,除非你使用2.8或更高版本。在这种情况下,钢带位于钢带延伸段,而mq位于mq延伸段。两者都随标准安装一起发货。