views:

37

answers:

2

Hi, I'm trying to move changes from a couple of changesets into one changeset on the other branch. There are other changes in between that I want to skip, so I don't want to simply merge everything.

hg transplant moves the changes correctly, but now I'd like to flatten them into a single commit. How can I do that?

A: 

You can fold them by

  1. Backup the repository, a failure during the process can destroy data
  2. transplant the desired changes to the target branch
  3. transform them there into a mercurial queue (hg qimport -r first-to-fold-rev:)
  4. fold them into one patch (hg qpop until the first patch is applied, then hg qfold <<patch name>> the following patches into this one)
  5. Edit the commit message (When there are NO OUTSTANDING CHANGES hg qrefresh -e)
  6. apply the single patch to your repository (hg qfinish -a).
  7. When there are further unfolded patches:
    1. hg qpush until the head patch
    2. hg qfinish -a
    3. Review the new repo state (hg glog/hg incoming)
Rudi
A: 

hg rebase has an '--collapse` option. I think this is what you are looking for.

Michal Sznajder