我将大量数据从我的实验室文件服务器复制到我的笔记本电脑,然后意外地将其提交到我用来备份我的论文的Mercurial存储库。
现在我有200多MB的数据,即使在我删除文件后,我也不需要在硬盘上占用空间。这不是一个真正的问题,但我同步的bitbucket存储库只给我1 GB的空间,我将需要我的数据。
然后我愚蠢地删除了文件并再次提交,因此我不能像https://stackoverflow.com/a/3290523/961959中所述那样使用回滚而不创建新的存储库并且不得不使用bitbucket重置所有内容。
有没有办法解决这个问题,所以我不会浪费四分之一的存储库空间?我可以回滚我做的最后两次提交吗?
答案 0 :(得分:5)
你可以:
答案 1 :(得分:4)
如果我想回滚两个最近的提交,我将描述我会做什么。
我认为你还没有推到Bitbucked。我还假设您在DAG之上有这些变更集:
o C: Deleted files FILE1 and FILE2
|
o B: Some nice changes; also added large files FILE1 and FILE2
|
o A: Some good changeset
此处,C
应该完全删除,B
应该被修改(FILE1
和FILE2
添加应该回滚),A
及以下应保持原样。
警告:仅当B
和C
未被推送到Bitbucked(或任何其他公共回购)时才有效。
您需要启用MQ扩展来执行此操作。为此,请将这些行添加到您的仓库中的.hg/hgrc
文件中:
[extensions]
mq=
首先,我剥离C
:
$ hg strip C
现在,C
已被删除,父级为B
。我导入B
作为Mercurial Queues 补丁进行编辑:
$ hg qimport -r B -n B.patch
现在我的队列顶部有一个补丁,它是从B
创建的。我删除了大文件,然后刷新补丁:
$ hg forget FILE1 FILE2
$ hg qrefresh
现在B.patch
不再包含大文件。然而,它们仍然在磁盘上,尽管不受Mercurial控制。我现在用MQ完成我的工作:
$ hg qfinish -a
这就是我现在所拥有的:
o B1: Some nice changes, no big files here
|
o A: Some good changeset
答案 2 :(得分:0)
如果更改已经推送到BitBucket,它确实提供了从服务器中删除更改集的选项。在本地执行 strip 后,您应该访问url:
https://bitbucket.org/<user>/<repo>/admin/strip
它将提供在特定提交后删除所有更改的选项。
注意:曾经有一个链接可以在repo配置菜单中访问该URL。现在访问它的唯一方法似乎是直接输入它。