Mercurial > hg
comparison tests/test-backout.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 | b63f6422d2a7 |
children | a68ccfd9c7be |
comparison
equal
deleted
inserted
replaced
12726:61c0df2b089a | 12727:52971985be14 |
---|---|
37 adding a | 37 adding a |
38 | 38 |
39 $ hg rm a | 39 $ hg rm a |
40 $ hg commit -d '1 0' -m b | 40 $ hg commit -d '1 0' -m b |
41 | 41 |
42 $ hg backout -d '2 0' --merge tip | 42 $ hg backout -d '2 0' tip |
43 adding a | 43 adding a |
44 changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372 | 44 changeset 2:de31bdc76c0d backs out changeset 1:76862dcce372 |
45 $ cat a | 45 $ cat a |
46 content | 46 content |
47 | 47 |
129 $ echo 2 >> a | 129 $ echo 2 >> a |
130 $ hg commit -d '1 0' -m b | 130 $ hg commit -d '1 0' -m b |
131 $ echo 1 > b | 131 $ echo 1 > b |
132 $ hg commit -d '2 0' -A -m c | 132 $ hg commit -d '2 0' -A -m c |
133 adding b | 133 adding b |
134 | |
135 without --merge | |
134 $ hg backout -d '3 0' 1 | 136 $ hg backout -d '3 0' 1 |
135 reverting a | 137 reverting a |
138 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
139 $ hg locate b | |
140 b | |
141 $ hg update -C tip | |
142 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
143 $ hg locate b | |
144 b | |
145 | |
146 with --merge | |
147 $ hg backout --merge -d '3 0' 1 | |
148 reverting a | |
136 created new head | 149 created new head |
137 changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5 | 150 changeset 3:3202beb76721 backs out changeset 1:22bca4c721e5 |
138 the backout changeset is a new head - do not forget to merge | 151 merging with changeset 3:3202beb76721 |
139 (use "backout --merge" if you want to auto-merge) | 152 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
153 (branch merge, don't forget to commit) | |
140 $ hg locate b | 154 $ hg locate b |
141 b | 155 b |
142 $ hg update -C tip | 156 $ hg update -C tip |
143 1 files updated, 0 files merged, 1 files removed, 0 files unresolved | 157 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
144 $ hg locate b | 158 $ hg locate b |
218 $ hg branch branch2 | 232 $ hg branch branch2 |
219 marked working directory as branch branch2 | 233 marked working directory as branch branch2 |
220 $ echo branch2 > file2 | 234 $ echo branch2 > file2 |
221 $ hg ci -d '2 0' -Am file2 | 235 $ hg ci -d '2 0' -Am file2 |
222 adding file2 | 236 adding file2 |
223 $ hg backout -d '3 0' -r 1 -m 'backout on branch1' | 237 |
238 without --merge | |
239 $ hg backout -r 1 | |
224 removing file1 | 240 removing file1 |
241 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
242 $ hg branch | |
243 branch2 | |
244 $ hg status -A | |
245 R file1 | |
246 C default | |
247 C file2 | |
248 | |
249 with --merge | |
250 $ hg update -qC | |
251 $ hg backout --merge -d '3 0' -r 1 -m 'backout on branch1' | |
252 removing file1 | |
225 created new head | 253 created new head |
226 changeset 3:d4e8f6db59fb backs out changeset 1:bf1602f437f3 | 254 changeset 3:d4e8f6db59fb backs out changeset 1:bf1602f437f3 |
227 the backout changeset is a new head - do not forget to merge | 255 merging with changeset 3:d4e8f6db59fb |
228 (use "backout --merge" if you want to auto-merge) | 256 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
229 | 257 (branch merge, don't forget to commit) |
230 XXX maybe backout shouldn't suggest a merge here as it is a different branch? | 258 $ hg update -q -C 2 |
231 | 259 |
232 on branch2 with branch1 not merged, so file1 should still exist: | 260 on branch2 with branch1 not merged, so file1 should still exist: |
233 | 261 |
234 $ hg id | 262 $ hg id |
235 45bbcd363bf0 (branch2) | 263 45bbcd363bf0 (branch2) |