It seems naming a previously unnamed branch doesn’t really work out. It creates a nasty multiple heads problem that I can’t find a solution for.
Here is the workflow…
UserA starts working on feature that they expect to be small, so they just start working(off the default branch). The change turns out to be a large project and will need multiple contributors. So UserA issues… hg branch "Feature1" and continues working, committing locally s needed.
UserA then pulls down the changes from the central repo so he can push.
At this point, why does hg heads return 3 heads? It shows 2 for default and 1 for Feature1. The first head for default is the latest change by another user on the branch(irrelevant). The second default head is the commit prior to the hg branch "Feature1" commit.
The central repository has rules enforced so that only 1 head per branch is allowed, so forcing a push isn’t an option. The repo doesn’t want multiple heads on the default branch.
UserA should be able to push these changes so that other users can see the Feature1 branch and help out. I can’t seem to find a way to “correct” this. I don’t think I can re-write the branch of the initial commits for the feature, before it was a named branch.
I know the initial changes before the named branch are technically on the default branch, but does that mean they will be heads until that Feature1 branch is merged?
I have found a solution without have to re-clone and merge changes in. I prefer this method mainly for historical purposes as I think it’s valuable information on what happened with the feature (aka it started small and then was re-thought to be larger etc..)
In my example, UserA should update to the unwanted head on
defaultand close that branch of default, as it is unwanted. This will leave 2 heads one fordefaultand one forFeature1as expected.Then update to the
Feature1branch, push and continue working.Another workflow is almost the same except the UserA decided to push
Feature1for others to help anddefaulthas not been moved forward by anyone else. The local repo only has 2 heads and the user could push, but UserA does NOT want to just push as the tip ofdefaultwould now be the changeset that really “belongs” toFeature1.UserA should update to the latest, unwanted changeset of
default. Then revert thedefaultback to the revision before UserA starting working.Then update to the
Feature1branch, push and continue working.