Size: 2559
Comment: expand and update
|
Size: 4467
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 = '''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" 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 7: | Line 14: |
$ hg init | |
Line 11: | Line 19: |
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 14: | Line 23: |
... |
|
Line 28: | Line 39: |
== 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 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. |
Line 32: | Line 51: |
$ hg branch newfeature $ hg in remote |
$ 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 [[Merge|merging]] with another branch, the local branch name takes precedence: {{{ $ hg up newfeature $ hg incoming http://example.net/repos/remote |
Line 36: | Line 76: |
changeset: 3900:3be94ff00829 | changeset: 3901:3be94ff00829 |
Line 44: | Line 84: |
$ hg pull remote pulling from remote |
$ hg pull http://example.net/repos/remote pulling from http://example.net/repos/remote |
Line 52: | Line 92: |
Line 59: | Line 100: |
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 63: | Line 104: |
main 3900:3be94ff00829 | main 3901:3be94ff00829 newbranch 3900: ... |
Line 65: | Line 107: |
Line 66: | Line 109: |
changeset: 3900:3be94ff00829 | changeset: 3901:3be94ff00829 |
Line 73: | Line 116: |
Line 78: | Line 122: |
== 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 130: |
== 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
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" bearing the name "default".
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 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
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.