|
|
$ HGMERGE=true; export HGMERGE
|
|
|
|
|
|
$ hg init basic
|
|
|
$ cd basic
|
|
|
|
|
|
# should complain
|
|
|
|
|
|
$ hg backout
|
|
|
abort: please specify a revision to backout
|
|
|
$ hg backout -r 0 0
|
|
|
abort: please specify just one revision
|
|
|
|
|
|
# basic operation
|
|
|
|
|
|
$ echo a > a
|
|
|
$ hg commit -d '0 0' -A -m a
|
|
|
adding a
|
|
|
$ echo b >> a
|
|
|
$ hg commit -d '1 0' -m b
|
|
|
|
|
|
$ hg backout -d '2 0' tip
|
|
|
reverting a
|
|
|
changeset 2:2929462c3dff backs out changeset 1:a820f4f40a57
|
|
|
$ cat a
|
|
|
a
|
|
|
|
|
|
# file that was removed is recreated
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init remove
|
|
|
$ cd remove
|
|
|
|
|
|
$ echo content > a
|
|
|
$ hg commit -d '0 0' -A -m a
|
|
|
adding a
|
|
|
|
|
|
$ hg rm a
|
|
|
$ hg commit -d '1 0' -m b
|
|
|
|
|
|
$ hg backout -d '2 0' --merge tip
|
|
|
adding a
|
|
|
changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372
|
|
|
$ cat a
|
|
|
content
|
|
|
|
|
|
# backout of backout is as if nothing happened
|
|
|
|
|
|
$ hg backout -d '3 0' --merge tip
|
|
|
removing a
|
|
|
changeset 3:7f6d0f120113 backs out changeset 2:de31bdc76c0d
|
|
|
$ cat a 2>/dev/null || echo cat: a: No such file or directory
|
|
|
cat: a: No such file or directory
|
|
|
|
|
|
# across branch
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init branch
|
|
|
$ cd branch
|
|
|
$ echo a > a
|
|
|
$ hg ci -Am0
|
|
|
adding a
|
|
|
$ echo b > b
|
|
|
$ hg ci -Am1
|
|
|
adding b
|
|
|
$ hg co -C 0
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
|
|
|
should fail
|
|
|
|
|
|
$ hg backout 1
|
|
|
abort: cannot backout change on a different branch
|
|
|
$ echo c > c
|
|
|
$ hg ci -Am2
|
|
|
adding c
|
|
|
created new head
|
|
|
|
|
|
should fail
|
|
|
|
|
|
$ hg backout 1
|
|
|
abort: cannot backout change on a different branch
|
|
|
|
|
|
# backout with merge
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init merge
|
|
|
$ cd merge
|
|
|
|
|
|
$ echo line 1 > a
|
|
|
$ echo line 2 >> a
|
|
|
$ hg commit -d '0 0' -A -m a
|
|
|
adding a
|
|
|
|
|
|
remove line 1
|
|
|
|
|
|
$ echo line 2 > a
|
|
|
$ hg commit -d '1 0' -m b
|
|
|
|
|
|
$ echo line 3 >> a
|
|
|
$ hg commit -d '2 0' -m c
|
|
|
|
|
|
$ hg backout --merge -d '3 0' 1
|
|
|
reverting a
|
|
|
created new head
|
|
|
changeset 3:26b8ccb9ad91 backs out changeset 1:5a50a024c182
|
|
|
merging with changeset 3:26b8ccb9ad91
|
|
|
merging a
|
|
|
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
$ hg commit -d '4 0' -m d
|
|
|
|
|
|
check line 1 is back
|
|
|
|
|
|
$ cat a
|
|
|
line 1
|
|
|
line 2
|
|
|
line 3
|
|
|
|
|
|
# backout should not back out subsequent changesets
|
|
|
|
|
|
$ hg init onecs
|
|
|
$ cd onecs
|
|
|
$ echo 1 > a
|
|
|
$ hg commit -d '0 0' -A -m a
|
|
|
adding a
|
|
|
$ echo 2 >> a
|
|
|
$ hg commit -d '1 0' -m b
|
|
|
$ echo 1 > b
|
|
|
$ hg commit -d '2 0' -A -m c
|
|
|
adding b
|
|
|
$ hg backout -d '3 0' 1
|
|
|
reverting a
|
|
|
created new head
|
|
|
changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5
|
|
|
the backout changeset is a new head - do not forget to merge
|
|
|
(use "backout --merge" if you want to auto-merge)
|
|
|
$ hg locate b
|
|
|
b
|
|
|
$ hg update -C tip
|
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg locate b
|
|
|
|
|
|
$ cd ..
|
|
|
$ hg init m
|
|
|
$ cd m
|
|
|
$ echo a > a
|
|
|
$ hg commit -d '0 0' -A -m a
|
|
|
adding a
|
|
|
$ echo b > b
|
|
|
$ hg commit -d '1 0' -A -m b
|
|
|
adding b
|
|
|
$ echo c > c
|
|
|
$ hg commit -d '2 0' -A -m b
|
|
|
adding c
|
|
|
$ hg update 1
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ echo d > d
|
|
|
$ hg commit -d '3 0' -A -m c
|
|
|
adding d
|
|
|
created new head
|
|
|
$ hg merge 2
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
$ hg commit -d '4 0' -A -m d
|
|
|
|
|
|
# backout of merge should fail
|
|
|
|
|
|
$ hg backout 4
|
|
|
abort: cannot backout a merge changeset without --parent
|
|
|
|
|
|
# backout of merge with bad parent should fail
|
|
|
|
|
|
$ hg backout --parent 0 4
|
|
|
abort: cb9a9f314b8b is not a parent of b2f3bb92043e
|
|
|
|
|
|
# backout of non-merge with parent should fail
|
|
|
|
|
|
$ hg backout --parent 0 3
|
|
|
abort: cannot use --parent on non-merge changeset
|
|
|
|
|
|
# backout with valid parent should be ok
|
|
|
|
|
|
$ hg backout -d '5 0' --parent 2 4
|
|
|
removing d
|
|
|
changeset 5:10e5328c8435 backs out changeset 4:b2f3bb92043e
|
|
|
|
|
|
$ hg rollback
|
|
|
rolling back to revision 4 (undo commit)
|
|
|
$ hg update -C
|
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
|
|
$ hg backout -d '6 0' --parent 3 4
|
|
|
removing c
|
|
|
changeset 5:033590168430 backs out changeset 4:b2f3bb92043e
|
|
|
|
|
|
$ cd ..
|
|
|
|
|
|
# named branches
|
|
|
|
|
|
$ hg init named_branches
|
|
|
$ cd named_branches
|
|
|
|
|
|
$ echo default > default
|
|
|
$ hg ci -d '0 0' -Am default
|
|
|
adding default
|
|
|
$ hg branch branch1
|
|
|
marked working directory as branch branch1
|
|
|
$ echo branch1 > file1
|
|
|
$ hg ci -d '1 0' -Am file1
|
|
|
adding file1
|
|
|
$ hg branch branch2
|
|
|
marked working directory as branch branch2
|
|
|
$ echo branch2 > file2
|
|
|
$ hg ci -d '2 0' -Am file2
|
|
|
adding file2
|
|
|
$ hg backout -d '3 0' -r 1 -m 'backout on branch1'
|
|
|
removing file1
|
|
|
created new head
|
|
|
changeset 3:d4e8f6db59fb backs out changeset 1:bf1602f437f3
|
|
|
the backout changeset is a new head - do not forget to merge
|
|
|
(use "backout --merge" if you want to auto-merge)
|
|
|
|
|
|
XXX maybe backout shouldn't suggest a merge here as it is a different branch?
|
|
|
|
|
|
on branch2 with branch1 not merged, so file1 should still exist:
|
|
|
|
|
|
$ hg id
|
|
|
45bbcd363bf0 (branch2)
|
|
|
$ hg st -A
|
|
|
C default
|
|
|
C file1
|
|
|
C file2
|
|
|
|
|
|
on branch2 with branch1 merged, so file1 should be gone:
|
|
|
|
|
|
$ hg merge
|
|
|
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
(branch merge, don't forget to commit)
|
|
|
$ hg ci -d '4 0' -m 'merge backout of branch1'
|
|
|
$ hg id
|
|
|
22149cdde76d (branch2) tip
|
|
|
$ hg st -A
|
|
|
C default
|
|
|
C file2
|
|
|
|
|
|
on branch1, so no file1 and file2:
|
|
|
|
|
|
$ hg co -C branch1
|
|
|
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
|
|
|
$ hg id
|
|
|
bf1602f437f3 (branch1)
|
|
|
$ hg st -A
|
|
|
C default
|
|
|
C file1
|
|
|
|
|
|
$ exit 0
|
|
|
|