我将大量数据从实验室文件服务器复制到笔记本电脑,然后不小心将其提交到了我用来备份论文的Mercurial存储库。

现在,我有200+ MB的数据,即使删除了文件,也不需要占用硬盘空间。 这并不是真正的问题,但是我同步到的bitbucket存储库仅给我1 GB的空间,我将需要这些空间来存储我的数据。

愚蠢的然后我删除了文件并再次提交,所以我不能只使用https://stackoverflow.com/a/3290523/961959中描述的回滚,而无需创建新的存储库并必须使用bitbucket重置所有内容。

有什么办法可以解决这个问题,所以我不会浪费四分之一的存储空间? 我可以回滚我所做的最后2次提交吗?

===============>>#1 票数:5

您可以:

  1. 使用hg strip删除在其中添加了文件及其所有后代的更改集(请注意,这将完全抹去它们,因此,只有在这些文件是此期间唯一提交的文件时,才执行此操作)。
  2. 将那些变更集导入到MQ并进行编辑。
  3. 通过--filemap选项hg convert从Mercurial hg convert为Mercurial。
  4. 常见问题所述,将您的存储库克隆到错误的变更集,然后从该变更集推送。

===============>>#2 票数: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应该被编辑( FILE1FILE2加法应该回滚)和A和下面应保留原样。

警告 :仅当BC尚未推送到Bitbucked(或任何其他公共仓库)时,此方法才有效。

您需要启用MQ扩展才能执行此操作。 为此,请将这些行添加到您的.hg/hgrc.hg/hgrc文件中:

[extensions]
mq=

脚步

首先,我剥离C

$ hg strip C

现在, C被废除,父代为B 我将B作为Mercurial Queue 补丁导入以对其进行编辑:

$ hg qimport -r B -n B.patch

现在,我的队列上有一个补丁,它是从B创建的。 我删除了大文件,并刷新了补丁:

$ hg forget FILE1 FILE2 
$ hg qrefresh

现在, B.patch不再包含大文件。 但是,它们仍在磁盘上,即使不控制bu Mercurial。 现在,我完成了MQ的工作:

$ hg qfinish -a

这是我目前所拥有的:

o  B1: Some nice changes, no big files here
|
o  A: Some good changeset

===============>>#3 票数:0

如果更改已被推送到BitBucket,它确实提供了从服务器剥离更改集的选项。 在本地执行剥离后,您应该访问url:

https://bitbucket.org/<user>/<repo>/admin/strip

在特定的提交之后,它将提供一个剥离所有更改的选项。

注意:以前在repo config菜单中有一个链接可以访问该URL。 现在访问它的唯一方法似乎是直接键入它。

  ask by Canageek translate from so

未解决问题?本站智能推荐: