意外地在Mercurial中提交了大量原始数据,如何防止它超载我的bitbucket存储库?

Can*_*eek 7 mercurial bitbucket

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

现在我有200多MB的数据,即使在我删除文件后,我也不需要在硬盘上占用空间.这不是一个真正的问题,但我同步的bitbucket存储库只给我1 GB的空间,我将需要我的数据.

愚蠢然后我删除的文件,并再次承诺,所以我不能只使用回退中描述/sf/answers/230336641/而无需创建一个新的存储库,并不必重新建立与到位桶的一切.

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

Cat*_*lus 5

您可以:

  1. 使用hg strip删除,你已经添加的文件和所有后代的变更(注意,这会完全抹杀他们,所以只有这样做,如果这些文件是在此期间犯下的唯一的事情).
  2. 将这些更改集导入MQ并进行编辑.
  3. 使用hg convert从水银与含汞--filemap选项.
  4. FAQ中所述,将您的存储库克隆到错误的变更集并从此推送.


Hel*_*lgi 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
Run Code Online (Sandbox Code Playgroud)

这里,C应该完全删除,B应该进行编辑(FILE1并且FILE2添加的内容应该回滚),并且A下面应该保持原样。

警告:这仅在B尚未C推送到 Bitbucked(或任何其他公共存储库)时才有效。

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

[extensions]
mq=
Run Code Online (Sandbox Code Playgroud)

脚步

首先,我剥离C

$ hg strip C
Run Code Online (Sandbox Code Playgroud)

现在,C被删除,父级是B。我B作为 Mercurial Queues补丁导入来编辑它:

$ hg qimport -r B -n B.patch
Run Code Online (Sandbox Code Playgroud)

现在我的队列顶部有一个补丁,它是从B. 我删除大文件,然后刷新补丁:

$ hg forget FILE1 FILE2 
$ hg qrefresh
Run Code Online (Sandbox Code Playgroud)

现在B.patch不再包含大文件。然而,它们仍然在磁盘上,尽管不受 Mercurial 控制。我现在完成了 MQ 的工作:

$ hg qfinish -a
Run Code Online (Sandbox Code Playgroud)

这是我目前所拥有的:

o  B1: Some nice changes, no big files here
|
o  A: Some good changeset
Run Code Online (Sandbox Code Playgroud)