Mercurial > hg
view tests/test-merge-closedheads.t @ 12727:52971985be14
backout: provide linear backout as a default (without --merge option)
This changes backouts changeset to retain linear history, .e. it is committed
as a child of the working directory parent, not the reverted changeset
parent.
The default behavior was previously to just commit a reverted change as a
child of the backed out changeset - thus creating a new head. Most of
the time, you would use the --merge option, as it does not make sense to
keep this dangling head as is.
The previous behavior could be obtained by using 'hg update --clean .' after a
'hg backout --merge'.
The --merge option itself is not affected by this change. There is also
still an autocommit of the backout if a merge is not needed, i.e. in case
the backout is the parent of the working directory.
Previously we had (pwd = parent of the working directory):
pwd older
backout auto merge
backout --merge auto commit
With the new linear approach:
pwd older
backout auto commit
backout --merge auto commit
auto: commit done by the backout command
merge: backout also already committed but explicit merge and commit needed
commit: user need to commit the update/merge
author | Gilles Moris <gilles.moris@free.fr> |
---|---|
date | Fri, 10 Sep 2010 10:28:18 +0200 |
parents | 4134686b83e1 |
children | 41885892796e |
line wrap: on
line source
$ hgcommit() { > hg commit -u user "$@" > } $ hg init clhead $ cd clhead $ touch foo && hg add && hgcommit -m 'foo' adding foo $ touch bar && hg add && hgcommit -m 'bar' adding bar $ touch baz && hg add && hgcommit -m 'baz' adding baz $ echo "flub" > foo $ hgcommit -m "flub" $ echo "nub" > foo $ hgcommit -m "nub" $ hg up -C 2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "c1" > c1 $ hg add c1 $ hgcommit -m "c1" created new head $ echo "c2" > c1 $ hgcommit -m "c2" $ hg up -C 2 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "d1" > d1 $ hg add d1 $ hgcommit -m "d1" created new head $ echo "d2" > d1 $ hgcommit -m "d2" $ hg tag -l good fail with three heads $ hg up -C good 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge abort: branch 'default' has 3 heads - please merge with an explicit rev (run 'hg heads .' to see heads) [255] close one of the heads $ hg up -C 6 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hgcommit -m 'close this head' --close-branch succeed with two open heads $ hg up -C good 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg up -C good 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg merge 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hgcommit -m 'merged heads' hg update -C 8 $ hg update -C 8 1 files updated, 0 files merged, 0 files removed, 0 files unresolved hg branch some-branch $ hg branch some-branch marked working directory as branch some-branch hg commit $ hgcommit -m 'started some-branch' hg commit --close-branch $ hgcommit --close-branch -m 'closed some-branch' hg update default $ hg update default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved hg merge some-branch $ hg merge some-branch 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) hg commit (no reopening of some-branch) $ hgcommit -m 'merge with closed branch'