Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get a bugfix from default to a feature branch in Mercurial

How do I get a bugfix I made on the default branch into a named branch in mercurial? I recently started work on a new feature so thought I'd do this work in a branch (which I've not really done before) so I could keep the changes out of the main default branch until I've finished working on them and the feature is ready to deploy. The idea being that I could update to the default branch and apply any bugfixes as needed.

TortoiseHg Branching

Now I want to get the bugfix into my named branch. The tip (rev 739) has the change I want to incorporate into the BoardSummary branch. I know I could merge but I don't want to bring my BoardSummary changes into the default branch.

I looked at the mercurial: apply a bugfix change from stable named branch to dev branch answer but it didn't make sense to me.

Edit: I'm with it up to "Then you discover that changeset 2 introduced a bug", in my case I went back to 732 fixed the bug and committed (onto the default). The idea being that the fix is in place before I branched. But now how do I get that fix into 738 without merging the 2 branches together? It looks like the bug is actually fixed in 739 - so isn't in the BoardSummary branch yet. This seems to be what the 2nd tree shows in the answer but the 3rd diagram is explained with "you would instead do this" - I don't understand that bit

like image 471
Simon Martin Avatar asked Jun 15 '12 09:06

Simon Martin


1 Answers

Evidently, your default branch contains only one changeset not present in the BoardSummary branch. You should merge default into BoardSummary, and not the other way round. This way, BoardSummary will have the fix, and none of the BoardSummary will be in default.

To summarize:

$ hg up BoardSummary
$ hg merge default
$ hg commit -m "Merge the fix for #247"

An explanation

There are a number of kinds of branches which can be employed. The most common are:

  • stable (production) branches for maintaining the released versions,
  • default (master, trunk) branch, which contains more or less stable development activity,
  • feature branches, which are not mature enough to be merged into trunk.

The main idea here is that it is always safe to merge from stable to default, and from default to feature. This means that in terms of changesets, any stable branch is a subset of default, and default is a subset of feature branches.

For instance, you're reworking your data access level in a feature branch new-dal (major feature). At the same time, you've added a couple of new reports in default (minor features), and found and fixed a bug in a 1.0-stable. Well, just merge the branches going from the oldest to the newest (1.0-stable -> default -> new-dal), and that's all.

This is explained very well on the Mercurial wiki: Standard Branching: Release branches.

Your case

In your case, BoardSummary is clearly a feature branch, so you can merge default into it without any hesitation. The opposite should only be done if you're ready to integrate the new feature into default.

like image 163
Helgi Avatar answered Oct 26 '22 23:10

Helgi