如果您执行hg pull
,然后执行hg update
(或hg merge
),有没有办法支持这个?即:将您的存储库恢复到执行hg pull
之前的状态?
我相信您可以执行hg update -r n
,您可以在拉取n
之前指定变更集。虽然我猜这仍然会将更改集留在您的存储库中,但这并不是我们想要的。 ??
答案 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
创建一个新的分支,它将保留在同一分支但创建一个新的无意义的改变撤消一切。