Differences between revisions 15 and 17 (spanning 2 versions)
Revision 15 as of 2009-05-05 00:57:39
Size: 3778
Editor: peter kovac
Comment:
Revision 17 as of 2009-05-19 19:30:55
Size: 3830
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
'''Named branches''' allow assigning persistent symbolic names to [:Branch:branches] of development inside a single [:Repository:repository]. '''Named branches''' allow assigning persistent symbolic names to [[Branch|branches]] of development inside a single [[Repository|repository]].
Line 4: Line 4:
Calling {{{hg branch}}} without a name shows the current branch name of the [:WorkingDirectory:working directory]. Calling {{{hg branch}}} after a {{{hg init}}} outputs "default", the (reserved) name of the default branch: Calling {{{hg branch}}} without a name shows the current branch name of the [[WorkingDirectory|working directory]]. Calling {{{hg branch}}} after a {{{hg init}}} outputs "default", the (reserved) name of the default branch:
Line 13: Line 13:
To begin a new branch, set the branch name of the working directory and then [:Commit:commit] it: To begin a new branch, set the branch name of the working directory and then [[Commit|commit]] it:
Line 30: Line 30:
From this point on, all committed [:ChangeSet:changesets] will be associated with the supplied branch name. From this point on, all committed [[ChangeSet|changesets]] will be associated with the supplied branch name.
Line 51: Line 51:
When [:Merge:merging] with another branch, the local branch name takes precedence: When [[Merge|merging]] with another branch, the local branch name takes precedence:
Line 81: Line 81:
Branch names can be used anywhere that tag names can, including log, diff, [:Push:push], and [:Pull:pull]. When a branch has multiple [:Head:heads], the [:Tip:tipmost] revision of the branch will be found. Here are some examples: Branch names can be used anywhere that tag names can, including log, diff, [[Push|push]], and [[Pull|pull]]. When a branch has multiple [[Head|heads]], the [[Tip|tipmost]] revision of the branch will be found. Here are some examples:
Line 110: Line 110:
 * [http://hgbook.red-bean.com/hgbookch8.html Managing releases and branchy development]  * [[http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html|Managing releases and branchy development]]
Line 112: Line 112:
See also: [:MultipleHeads], [:Branch], [:Bookmarks] See also: [[MultipleHeads]], [[Branch]], [[Bookmarks]]

Named branches allow assigning persistent symbolic names to branches of development inside a single repository.

Find What Branch You're On

Calling hg branch without a name shows the current branch name of the working directory. Calling hg branch after a hg init outputs "default", the (reserved) name of the default branch:

$ hg init
$ hg branch
default

Create a Branch

To begin a new branch, set the branch name of the working directory and then commit it:

$ hg branch newfeature
marked working directory as branch newfeature
$ hg branch
newfeature
$ hg ci -m "start feature branch"
$ hg parents
changeset:   3899:c08bfc770d37
branch:      newfeature
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Tue Dec 19 14:20:11 2006 -0600
summary:     start feature branch

From this point on, all committed changesets will be associated with the supplied branch name. Unless overridden with the hg branch command, the working directory inherits the branch name associated with a changeset. This way, a sequence of changesets will typically all have the same branch name.

When Mercurial lists a changeset, it will only show the branch name associated with the changeset if the branch name differs from the reserved branch name "default".

Switch Among Branches

Switch among branches using the hg update command:

$ hg update -C main
$ hg update -C newfeature

The hg update command normally allows updating along a single branch in the history. Use the -C option to switch to another. Note: the -C option also discards local changes, so be careful before using this command.

Merge Branches

When merging with another branch, the local branch name takes precedence:

$ hg branch
newfeature
$ hg in remote
searching for changes
changeset:   3900:3be94ff00829
branch:      main
tag:         tip
parent:      3898:93e5f07baf75
user:        Matt Mackall <mpm@selenic.com>
date:        Tue Dec 19 14:26:52 2006 -0600
summary:     bug fix

$ hg pull remote
pulling from remote
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg branch
newfeature

Branch names can be used anywhere that tag names can, including log, diff, push, and pull. When a branch has multiple heads, the tipmost revision of the branch will be found. Here are some examples:

$ hg branches
main                           3900:3be94ff00829
newfeature                     3899:c08bfc770d37
$ hg log -r main
changeset:   3900:3be94ff00829
branch:      main
tag:         tip
parent:      3898:93e5f07baf75
user:        Matt Mackall <mpm@selenic.com>
date:        Tue Dec 19 14:26:52 2006 -0600
summary:     bug fix
$ hg in -r main ../bd2
searching for changes
no changes found

Delete Branches

PruningDeadBranches

Undoing a Bad Merge

Mercurial does not yet offer a foolproof way to back out an erroneous merge. The latest information I've been able to find on this matter is at http://stackoverflow.com/questions/265944/backing-out-a-backwards-merge-on-mercurial and is currently marked unresolved.

See also: MultipleHeads, Branch, Bookmarks


CategoryHowTo

NamedBranches (last edited 2013-12-26 09:53:26 by Tovim)