如何从历史记录中永久删除(删除)文件?

时间:2010-04-23 22:40:16

标签: mercurial

提交 (未推送) 本地很多文件(包括二进制文件删除和添加...),现在当我试图推动它需要花费很多时间。实际上我搞砸了我当地的回购历史。

将来我怎么能避免这个错误?我可以将一组本地修订版 1-> 2-> 3-> 4 转换为 1-> 2 ,其中2是本地修订版克隆?

编辑:因为我很匆忙,所以我从头开始使用修订版4开始新的远程仓库。将来我将使用明确的答案,因为它似乎更容易,但我会挖掘其他解决方案来查看真相。谢谢您的支持。

2 个答案:

答案 0 :(得分:2)

从您的问题中不清楚这些变化是否被推动。如果它们仍然是本地的,你可以或多或少地轻易摆脱它们。 convert 是一个选项。您还可以使用 MQ (mercurial队列)。查看EditingHistory wiki文章以获取详细说明。它建议MQ是最简单的方法。

为了防止出现这种错误,您应该添加一个钩子来拒绝“错误”提交,因为您可以以编程方式描述它们;)

答案 1 :(得分:1)

Mercurial历史是不可变的,你不能使用普通工具删除。但是,您可以创建一个没有这些文件的新仓库:

$ hg clone -r 1 repo-with-too-much new-repo

只从旧的仓库中修改零和一个,并将它们放入一个新的仓库。现在将第4版的文件复制到新的repo并提交。

这摆脱了那些插页式变更集,但是你在野外拥有的任何回购仍有它们,所以当你pull时你会得到它们。

一般情况下,一旦你推出了一个变更集,它就会出现在那里,除非你可以让每个人都用克隆来删除它并重新开始你的运气。