I copied a large amount of data from my labs file server to my laptop, then accidentally committed it to the Mercurial repository I'm using to back up my thesis.
Now I have 200+ MB of data I don't need taking up space on my hard disk, even after I've deleted the files. This isn't really a problem, but the bitbucket repository I sync to only gives me 1 GB of space, which I will need for my data.
Stupidly I then deleted the files and committed again, so I can't just use rollback as described in https://stackoverflow.com/a/3290523/961959 without creating a new repository and having to reset up everything with bitbucket.
Is there a way I can fix this, so I don't waste a quarter of my repository space? Can I rollback the last 2 commits I did?
In case the changes are already pushed to BitBucket, it does offer an option to strip changesets from the server. After performing the strip locally, you should access the url:
It'll offer an option to strip all changes following a specific commit.
NOTE: There used to be a link to reach that URL in the repo config menu. Now the only way to access it seems to be typing it directly.
I'm going to describe what I would do if I wanted to roll back two most recent commits.
I assume that you haven't pushed to Bitbucked yet. I also assume you have these changesets on top of your DAG:
Here,
C
should be removed altogether,B
should be edited (FILE1
andFILE2
additions should be rolled back), andA
and below should be left as they are.Caveat: this only works if
B
andC
were not pushed onto Bitbucked (or any other public repo) yet.You'll need to enable the MQ extension to do this. To do this, add these lines to the
.hg/hgrc
file in your repo:Steps
First, I strip
C
:Now,
C
is obliterated, and the parent isB
. I importB
as a Mercurial Queues patch to edit it:Now I have one patch on top our queue, which was created from
B
. I remove the big files, and refresh the patch:Now
B.patch
no longer includes the big files. However, they are still on the disk, albeit not controlled bu Mercurial. I now finish my work with MQ:Here's what I have at the moment:
You can:
hg strip
to remove the changeset where you've added the files and all of its descendants (note that this will obliterate them completely, so only do it if these files are the only thing committed during this time).hg convert
from Mercurial to Mercurial with--filemap
option.