撤消Mercurial推送

时间:2011-02-03 13:01:51

标签: mercurial tortoisehg

我正在使用TortoiseHg进行版本控制。我在提交到本地后推送到远程存储库。如何撤消到特定的提交点?

有三次不同的推动,我想恢复到第一次推动。我读到了 hg rollback hg undo 命令,但我不知道如何使用它们来完成此任务。

3 个答案:

答案 0 :(得分:14)

由于您已推送到另一个存储库,因此您无法知道更改传播到的位置。如果你没有推动,你可以撤消,但撤消只会做最后一笔交易。

真正修改历史记录的另一个选项是strip命令,但同样,因为你已推送,这不是一个选项。如果您剥离了本地,那么下次拉动时您仍然可以获得更改集。

如果您可以访问中心,则可以将其删除,但如果其他人已经撤消了更改,那么下次推送时它们会再次出现在中央。

此时唯一安全的选项是退出命令。这基本上会在提示处创建一个新的变更集,以反转您意外添加的变更集。

答案 1 :(得分:14)

从“纯粹的”Mercurial的角度来看,迈克是正确的 - 推动的变更集是你无法控制的。 ,在实践中,这往往是一个过于严格的观点。

与迈克所说的相反,剥离已经推动变革集可能成为一种选择。这取决于您是否可以控制中央存储库(也可以在那里进行剥离)以及您的团队/社区的规模以及它的组织方式。

如果您确定没有人撤消您的不良变更集,只需剥离您的本地和中央回购 - 已完成,历史记录已删除。

如果有人可能已经删除了您的不良变更集,那么您已经剥离了本地和中央仓库以及您必须通知所有推动团队成员剥离不良变更集在他们当地的回购中(或从被剥离的中央回购中重新开始)。如果你很幸运,每个人都按照你说的去做。否则,变更集迟早会再次出现在中央仓库中。

最重要的是剥离可能是像你这样的案件的解决方案 - 你必须平衡成本(让你的团队负担额外的工作)和利益(干净的历史)。


如果您不小心添加了大型二进制文件,那么收益将超过成本的实际示例。在这种情况下,可能每个团队成员都喜欢同步剥离而不是使用破碎的存储库。


更新:您可以使用服务器端挂钩来防止已剥离的变更集重新进入中央存储库 - read more here

答案 2 :(得分:2)

您可能需要阅读hginit.com's 'fixing goofs' page。你想“退出”,合并和推动。实际上这是创建一个新的提交,它执行更改的反转并应用它。