Differences between revisions 10 and 66 (spanning 56 versions)
Revision 10 as of 2008-02-14 06:56:16
Size: 3356
Editor: StuartMarks
Comment:
Revision 66 as of 2013-12-26 09:53:26
Size: 4472
Editor: Tovim
Comment: improved wording of the first sentence
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]. <<Include(A:style)>>
Line 3: Line 3:
== Create a 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:
= Named branches =

'''Named branches''' allow assigning persistent symbolic names to [[Branch|branches]] of development inside a single [[Repository|repository]].
It is neccessary to add, that all branches are actually named, the "unnamed" ones bearing the name "default".

<<TableOfContents>>

== Find What Branch You're On ==
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 12: Line 19:
To begin a branch, set the branch name of the working directory and then [:Commit:commit] it: == Create a Branch ==
To begin a new branch, set the branch name of the working directory and then commit it:
Line 15: Line 23:
...
Line 29: Line 39:
From this point on, all committed [:ChangeSet:changesets] will be associated with the supplied branch name.
Unless overridden with the {{{hg branch}}} command, the working directory inherits the branch name associated
From this point on, all committed [[ChangeSet|changesets]] will be associated with the supplied branch name.
Unless overridden with the {{{hg branch other_name}}} command, the working directory inherits the branch name associated
Line 35: Line 45:

=== Create a Branch From an Older Revision ===

This can be done by updating your working copy to the revision in question and then creating the new branch.

{{{
$ hg update -r 500
hg 613 files updated, 0 files merged, 16 files removed, 0 files unresolved
$ hg branch newbranch
$ hg commit -m 'made a new branch from revision 500'
}}}
Line 41: Line 62:
$ hg update -C main
$ hg update -C newfeature
$ hg update newfeature
$ hg update -C newbranch
Line 45: Line 66:
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.
By providing a branch name, {{{hg update}}} will update your working copy to the tip on this branch.
'''Note:''' the {{{-C}}} option discards local changes, so be careful before using this option.
Line 50: Line 70:
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 53: Line 73:
$ hg branch
newfeature
$ hg in remote
$ hg up newfeature
$ hg incoming http://example.net/repos/remote
Line 57: Line 76:
changeset: 3900:3be94ff00829 changeset: 3901:3be94ff00829
Line 65: Line 84:
$ hg pull remote
pulling from remote
$ hg pull http://example.net/repos/remote
pulling from http://example.net/repos/remote
Line 73: Line 92:
Line 80: Line 100:
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 84: Line 104:
main 3900:3be94ff00829 main 3901:3be94ff00829
newbranch 3900: ...
Line 86: Line 107:
Line 87: Line 109:
changeset: 3900:3be94ff00829 changeset: 3901:3be94ff00829
Line 94: Line 116:
Line 99: Line 122:
== Delete Branches ==
PruningDeadBranches
Line 100: Line 125:
== Links ==
 * [http://hgbook.red-bean.com/hgbookch8.html Managing releases and branchy development]
== Undoing a Bad Merge ==
Line 103: Line 127:
See also: [:MultipleHeads] [:Branch] 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 ==
 * [[http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html|Managing releases and branchy development]]
 * [[MultipleHeads]]
 * [[Branch]]
 * [[Bookmarks]]
 * [[MutableBranches]]

----
CategoryHowTo

{i} This page does not meet our wiki style guidelines. Please help improve this page by cleaning up its formatting.

Named branches

Named branches allow assigning persistent symbolic names to branches of development inside a single repository. It is neccessary to add, that all branches are actually named, the "unnamed" ones bearing the name "default".

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 other_name 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".

Create a Branch From an Older Revision

This can be done by updating your working copy to the revision in question and then creating the new branch.

$ hg update -r 500
hg 613 files updated, 0 files merged, 16 files removed, 0 files unresolved
$ hg branch newbranch
$ hg commit -m 'made a new branch from revision 500'

Switch Among Branches

Switch among branches using the hg update command:

$ hg update newfeature
$ hg update -C newbranch

By providing a branch name, hg update will update your working copy to the tip on this branch. Note: the -C option discards local changes, so be careful before using this option.

Merge Branches

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

$ hg up newfeature
$ hg incoming http://example.net/repos/remote
searching for changes
changeset:   3901: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 http://example.net/repos/remote
pulling from http://example.net/repos/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                           3901:3be94ff00829
newbranch                      3900: ...
newfeature                     3899:c08bfc770d37

$ hg log -r main
changeset:   3901: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


CategoryHowTo

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