Let's say I have a local and a remote Mercurial repository. Now, I start working on a feature. I work on it, and when I think it's done, I commit the changeset. Testing it a bit more, I find that I could further improve this feature by tweaking something in the code. I make the change and commit. 20 minutes later, I find there's a bug in this new feature, so I fix it and commit that too.
I now have 3 changesets that I would really like to push to the remote repository as one changeset with message "Implementing feature X", for instance.
How can I do this without much hassle? I believe I could do it with patches, but it seems like a lot of work.
Yes,
strip --keep
works for Author's question. But it was slightly different from others, for example, if you have version from 1 to 30 but only want to collapse version 12-15. Other solutions work but notstrip --keep
.My preferred method of using mq for this folding is using TortoiseHg as described here. However, it can easily be done from the command line like so:
(There may be a better way to do the qfold step, but I'm not aware of it, as I usually use TortoiseHg for that operation.)
It seems a little complicated at first, but once you've started using mq, it's pretty straightforward and natural -- plus you can do all kinds of other things with mq that can be pretty handy!
hg collapse
andhg histedit
are the best ways. Or, rather, would be the best ways, if they worked reliably... I gothistedit
to crash with a stack dump within three minutes.Collapse
is not that much better.Thought I might share two other BKMs:
hg rebase --collapse
This extension is distributed with Mercurial. I haven't had problems with it yet. You may have to play some games to work around
hg rebase
limitations -- basically, it doesn't like rebasing to an ancestor on the same branch, named or default, although it does allow it if rebasing between (named) branches.Move the repository (
foo/.hg
) to the working directory (bar
) and its files. Not the other way around.Some people have talked about creating two clone trees, and copying files between them. Or patching between them. Instead, its easier to move the
.hg
directories.This works as long as the true repositories, the
.hg
trees, are independent of the working directory and its files.If they are not independent...
I've never used Mercurial, but this sounds a lot like what Martin Fowler was talking about on his blog not too long ago:
http://martinfowler.com/bliki/MercurialSquashCommit.html
How about the Collapse Extension?
HistEdit will do what you want, but it's probably overkill. If the only thing you need is to fold some changesets together the Collapse Extension will do the job.