|
|
$ branchcache=.hg/branchheads.cache
|
|
|
|
|
|
$ hg init t
|
|
|
$ cd t
|
|
|
|
|
|
$ hg branches
|
|
|
$ echo foo > a
|
|
|
$ hg add a
|
|
|
$ hg ci -m "initial"
|
|
|
$ hg branch foo
|
|
|
marked working directory as branch foo
|
|
|
$ hg branch
|
|
|
foo
|
|
|
$ hg ci -m "add branch name"
|
|
|
$ hg branch bar
|
|
|
marked working directory as branch bar
|
|
|
$ hg ci -m "change branch name"
|
|
|
|
|
|
Branch shadowing:
|
|
|
|
|
|
$ hg branch default
|
|
|
abort: a branch of the same name already exists (use 'hg update' to switch to it)
|
|
|
|
|
|
$ hg branch -f default
|
|
|
marked working directory as branch default
|
|
|
|
|
|
$ hg ci -m "clear branch name"
|
|
|
created new head
|
|
|
|
|
|
There should be only one default branch head
|
|
|
|
|
|
$ hg heads .
|
|
|
changeset: 3:9d567d0b51f9
|
|
|
tag: tip
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: clear branch name
|
|
|
|
|
|
|
|
|
$ hg co foo
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
$ hg branch
|
|
|
foo
|
|
|
$ echo bleah > a
|
|
|
$ hg ci -m "modify a branch"
|
|
|
|
|
|
$ hg merge default
|
|
|
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
|
|
|
$ hg branch
|
|
|
foo
|
|
|
$ hg ci -m "merge"
|
|
|
|
|
|
$ hg log
|
|
|
changeset: 5:dc140083783b
|
|
|
branch: foo
|
|
|
tag: tip
|
|
|
parent: 4:98d14f698afe
|
|
|
parent: 3:9d567d0b51f9
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: merge
|
|
|
|
|
|
changeset: 4:98d14f698afe
|
|
|
branch: foo
|
|
|
parent: 1:0079f24813e2
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: modify a branch
|
|
|
|
|
|
changeset: 3:9d567d0b51f9
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: clear branch name
|
|
|
|
|
|
changeset: 2:ed2bbf4e0102
|
|
|
branch: bar
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: change branch name
|
|
|
|
|
|
changeset: 1:0079f24813e2
|
|
|
branch: foo
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: add branch name
|
|
|
|
|
|
changeset: 0:db01e8ea3388
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: initial
|
|
|
|
|
|
$ hg branches
|
|
|
foo 5:dc140083783b
|
|
|
default 3:9d567d0b51f9 (inactive)
|
|
|
bar 2:ed2bbf4e0102 (inactive)
|
|
|
|
|
|
$ hg branches -q
|
|
|
foo
|
|
|
default
|
|
|
bar
|
|
|
|
|
|
Test for invalid branch cache:
|
|
|
|
|
|
$ hg rollback
|
|
|
rolling back to revision 4 (undo commit)
|
|
|
|
|
|
$ cp $branchcache .hg/bc-invalid
|
|
|
|
|
|
$ hg log -r foo
|
|
|
changeset: 4:98d14f698afe
|
|
|
branch: foo
|
|
|
tag: tip
|
|
|
parent: 1:0079f24813e2
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: modify a branch
|
|
|
|
|
|
$ cp .hg/bc-invalid $branchcache
|
|
|
|
|
|
$ hg --debug log -r foo
|
|
|
invalidating branch cache (tip differs)
|
|
|
changeset: 4:98d14f698afeaff8cb612dcf215ce95e639effc3
|
|
|
branch: foo
|
|
|
tag: tip
|
|
|
parent: 1:0079f24813e2b73a891577c243684c5066347bc8
|
|
|
parent: -1:0000000000000000000000000000000000000000
|
|
|
manifest: 4:d01b250baaa05909152f7ae07d7a649deea0df9a
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
files: a
|
|
|
extra: branch=foo
|
|
|
description:
|
|
|
modify a branch
|
|
|
|
|
|
|
|
|
$ rm $branchcache
|
|
|
$ echo corrupted > $branchcache
|
|
|
|
|
|
$ hg log -qr foo
|
|
|
4:98d14f698afe
|
|
|
|
|
|
$ cat $branchcache
|
|
|
98d14f698afeaff8cb612dcf215ce95e639effc3 4
|
|
|
9d567d0b51f9e2068b054e1948e1a927f99b5874 default
|
|
|
98d14f698afeaff8cb612dcf215ce95e639effc3 foo
|
|
|
ed2bbf4e01029020711be82ca905283e883f0e11 bar
|
|
|
|
|
|
Push should update the branch cache:
|
|
|
|
|
|
$ hg init ../target
|
|
|
|
|
|
Pushing just rev 0:
|
|
|
|
|
|
$ hg push -qr 0 ../target
|
|
|
|
|
|
$ cat ../target/$branchcache
|
|
|
db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 0
|
|
|
db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 default
|
|
|
|
|
|
Pushing everything:
|
|
|
|
|
|
$ hg push -qf ../target
|
|
|
|
|
|
$ cat ../target/$branchcache
|
|
|
98d14f698afeaff8cb612dcf215ce95e639effc3 4
|
|
|
9d567d0b51f9e2068b054e1948e1a927f99b5874 default
|
|
|
98d14f698afeaff8cb612dcf215ce95e639effc3 foo
|
|
|
ed2bbf4e01029020711be82ca905283e883f0e11 bar
|
|
|
|
|
|
Update with no arguments: tipmost revision of the current branch:
|
|
|
|
|
|
$ hg up -q -C 0
|
|
|
$ hg up -q
|
|
|
$ hg id
|
|
|
9d567d0b51f9
|
|
|
|
|
|
$ hg up -q 1
|
|
|
$ hg up -q
|
|
|
$ hg id
|
|
|
98d14f698afe (foo) tip
|
|
|
|
|
|
$ hg branch foobar
|
|
|
marked working directory as branch foobar
|
|
|
|
|
|
$ hg up
|
|
|
abort: branch foobar not found
|
|
|
|
|
|
Fastforward merge:
|
|
|
|
|
|
$ hg branch ff
|
|
|
marked working directory as branch ff
|
|
|
|
|
|
$ echo ff > ff
|
|
|
$ hg ci -Am'fast forward'
|
|
|
adding ff
|
|
|
|
|
|
$ hg up foo
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
|
|
$ hg merge ff
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
|
|
|
$ hg branch
|
|
|
foo
|
|
|
$ hg commit -m'Merge ff into foo'
|
|
|
$ hg parents
|
|
|
changeset: 6:917eb54e1b4b
|
|
|
branch: foo
|
|
|
tag: tip
|
|
|
parent: 4:98d14f698afe
|
|
|
parent: 5:6683a60370cb
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: Merge ff into foo
|
|
|
|
|
|
$ hg manifest
|
|
|
a
|
|
|
ff
|
|
|
|
|
|
|
|
|
Test merging, add 3 default heads and one test head:
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init merges
|
|
|
$ cd merges
|
|
|
$ echo a > a
|
|
|
$ hg ci -Ama
|
|
|
adding a
|
|
|
|
|
|
$ echo b > b
|
|
|
$ hg ci -Amb
|
|
|
adding b
|
|
|
|
|
|
$ hg up 0
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ echo c > c
|
|
|
$ hg ci -Amc
|
|
|
adding c
|
|
|
created new head
|
|
|
|
|
|
$ hg up 0
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ echo d > d
|
|
|
$ hg ci -Amd
|
|
|
adding d
|
|
|
created new head
|
|
|
|
|
|
$ hg up 0
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg branch test
|
|
|
marked working directory as branch test
|
|
|
$ echo e >> e
|
|
|
$ hg ci -Ame
|
|
|
adding e
|
|
|
|
|
|
$ hg log
|
|
|
changeset: 4:3a1e01ed1df4
|
|
|
branch: test
|
|
|
tag: tip
|
|
|
parent: 0:cb9a9f314b8b
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: e
|
|
|
|
|
|
changeset: 3:980f7dc84c29
|
|
|
parent: 0:cb9a9f314b8b
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: d
|
|
|
|
|
|
changeset: 2:d36c0562f908
|
|
|
parent: 0:cb9a9f314b8b
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: c
|
|
|
|
|
|
changeset: 1:d2ae7f538514
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: b
|
|
|
|
|
|
changeset: 0:cb9a9f314b8b
|
|
|
user: test
|
|
|
date: Thu Jan 01 00:00:00 1970 +0000
|
|
|
summary: a
|
|
|
|
|
|
Implicit merge with test branch as parent:
|
|
|
|
|
|
$ hg merge
|
|
|
abort: branch 'test' has one head - please merge with an explicit rev
|
|
|
(run 'hg heads' to see all heads)
|
|
|
$ hg up -C default
|
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
|
|
Implicit merge with default branch as parent:
|
|
|
|
|
|
$ hg merge
|
|
|
abort: branch 'default' has 3 heads - please merge with an explicit rev
|
|
|
(run 'hg heads .' to see heads)
|
|
|
|
|
|
3 branch heads, explicit merge required:
|
|
|
|
|
|
$ hg merge 2
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
$ hg ci -m merge
|
|
|
|
|
|
2 branch heads, implicit merge works:
|
|
|
|
|
|
$ hg merge
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
|
|
|
|