Size: 2559
Comment: expand and update
|
Size: 4276
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
'''Named branches''' allow assigning persistent symbolic names to branches of development inside a single ["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"]. Calling {{{hg branch}}} after a {{{hg init}}} outputs "default", the (reserved) name of the default branch: |
'''Named branches''' allow assigning persistent symbolic names to [[Branch|branches]] of development inside a single [[Repository|repository]]. <<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 7: | Line 11: |
$ hg init | |
Line 11: | Line 16: |
To begin a branch, set the branch name of the working directory and then ["Commit"] it: | == Create a Branch == To begin a new branch, set the branch name of the working directory and then commit it: |
Line 28: | Line 34: |
== Commit Changes to a Branch == From this moment on, all commited ["ChangeSet"]s will get tagged with the supplied branch name. When ["Merge"]ing with another branch, the local branch name takes precedence: |
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". === 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 -C main $ hg update -C newfeature }}} 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 [[Merge|merging]] with another branch, the local branch name takes precedence: |
Line 34: | Line 70: |
$ hg in remote | $ hg incoming http://example.net/repos/remote |
Line 44: | Line 80: |
$ hg pull remote pulling from remote |
$ hg pull http://example.net/repos/remote pulling from http://example.net/repos/remote |
Line 59: | Line 95: |
Branch names can be used anywhere that ["Tag"] names can, including log, diff, ["Push"], and ["Pull"]. When a branch has multiple ["Head"]s, the ["Tip"]most 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 78: | Line 114: |
== Switch between Branches == {{{ $ hg update -C main $ hg update -C newfeature }}} |
== 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. |
Line 85: | Line 122: |
== Links == * [http://hgbook.red-bean.com/hgbookch8.html Managing releases and branchy development] |
== See also == * [[http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html|Managing releases and branchy development]] * [[MultipleHeads]] * [[Branch]] * [[Bookmarks]] * [[MutableBranches]] ---- CategoryHowTo |
|
Named branches allow assigning persistent symbolic names to branches of development inside a single repository.
Contents
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".
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 -C main $ hg update -C newfeature
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 branch newfeature $ hg incoming http://example.net/repos/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 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 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
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.