Size: 3356
Comment:
|
Size: 3377
Comment: +cat
|
Deletions are marked like this. | Additions are marked like this. |
Line 104: | Line 104: |
---- CategoryHowTo |
Named branches allow assigning persistent symbolic names to [:Branch:branches] of development inside a single [:Repository:repository].
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:
$ hg init $ hg branch default
To begin a branch, set the branch name of the working directory and then [:Commit: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 [: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 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 [:Merge: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: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:
$ 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
Links
[http://hgbook.red-bean.com/hgbookch8.html Managing releases and branchy development]
See also: [:MultipleHeads] [:Branch]