Differences between revisions 1 and 17 (spanning 16 versions)
Revision 1 as of 2010-06-28 21:01:39
Size: 1043
Editor: JohanSamyn
Comment:
Revision 17 as of 2011-02-25 10:40:26
Size: 4236
Comment: added french translation link
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
Revert the effect of an earlier [[ChangeSet|changeset]]. Revert/undo the effect of an earlier [[ChangeSet|changeset]].
Line 12: Line 12:
==== Here's some more detail from Matt about the inner workings (see ). ==== ==== Here's some more detail from Matt about the inner workings (and slightly adapted by experience) ====
(see also [[http://mercurial.markmail.org/thread/r5u476t2gnkfl3kk|this email thread]])
Line 14: Line 15:
Backout is basically three steps rolled into one:
 * update -C <rev>
 * revert -r <parent of rev>
 * commit
There's a fourth step that's done automatically if you specify --merge:
 * merge with changeset we were at when we started to backout
And there's a fifth, manual step:
 * commit the result of merging
When step 3 (commit) aborts, you're left with the first two steps completed and you can either `commit` yourself or `update -C` to abandon the process.
Let <startrev> be the revision we're at when we start the backout.<<BR>>
Backout is basically four steps rolled into one:
 1. `hg update -C -r <rev-to-backout>`
 * `hg revert --all -r <parent of rev-to-backout>`
 * `hg commit`
 * `hg update -C -r <startrev>`
There's a fifth step that is done automatically if you specify `--merge` :
 5.#5 `hg merge ` (merges <startrev> with the newly committed rev from 3.)
And there's a sixth, manual step:
 6.#6 `hg commit ` (the result of merging)
When step 3 (commit) aborts, you're left with the first two steps completed and you can either:
 * `hg commit ` yourself to complete it, and/or
 * `hg update -C ` to abandon the process
Step 4 assures the parents of the committed merge changeset are in the right order. That is : parent1 = <startrev>, and parent2 = <the new backout rev>.
Line 26: Line 32:
TODO
Line 28: Line 33:
$ hg init borepo
$ cd borepo
$ echo line1 > file.txt
$ echi line2 >> file.txt
$ hg ci -Am "add file"
}}}
Edit file.txt, so it contains:
{{{
line1
line1a
line2
}}}
Commit and add a few more changesets:
{{{
$ hg ci -m "add line1a"
$ echo line3 >> file.txt
$ hg ci -m "add line3"
$ echo line4 >> file.txt
$ hg ci -m "add line4"
}}}
Which produces the following (somewhat shortened) graph:
{{{
@ changeset: 3:36b1c0649d3e
| tag: tip
| summary: add line4
|
o changeset: 2:2612107e45fe
| summary: add line3
|
o changeset: 1:1f33c361852e
| summary: add line1a
|
o changeset: 0:e3e45b087239
   summary: add file
}}}
Now we backout changeset 1:1f33c361852e.
{{{
$ hg backout -r 1
}}}
The graph is now:
{{{
o changeset: 4:c3daad6d657d
| tag: tip
| parent: 1:1f33c361852e
| summary: Backed out changeset 1f33c361852e
|
| @ changeset: 3:36b1c0649d3e
| | summary: add line4
| |
| o changeset: 2:2612107e45fe
|/ summary: add line3
|
o changeset: 1:1f33c361852e
| summary: add line1a
|
o changeset: 0:e3e45b087239
   summary: add file
}}}
We merge and commit, yielding the final graph:
{{{
@ changeset: 5:236d8d74edf8
|\ tag: tip
| | parent: 3:36b1c0649d3e
| | parent: 4:c3daad6d657d
| | summary: merge backout
| |
| o changeset: 4:c3daad6d657d
| | parent: 1:1f33c361852e
| | summary: Backed out changeset 1f33c361852e
| |
o | changeset: 3:36b1c0649d3e
| | summary: add line4
| |
o | changeset: 2:2612107e45fe
|/ summary: add line3
|
o changeset: 1:1f33c361852e
| summary: add line1a
|
o changeset: 0:e3e45b087239
   summary: add file
}}}
And file.txt looks like this, nicely eliminating the 'line1a' from rev 1.
{{{
line1
line2
line3
line4
Line 30: Line 123:
See also: [[Revert]] When we try this using the separate steps, and we omit step 4, we get a slightly different graph. Note the reversed order of the parents in changeset 5:0eeac5ff9c76.
{{{
@ changeset: 5:0eeac5ff9c76
|\ tag: tip
| | parent: 4:cbca219e80e1 | <---
| | parent: 3:f82e9468d652 |
| | summary: merge backout
| |
| o changeset: 4:cbca219e80e1
| | parent: 1:0cf85b44002c
| | summary: Backed out changeset 0cf85b44002c
| |
o | changeset: 3:f82e9468d652
| | summary: add line4
| |
o | changeset: 2:24ceac6b9018
|/ summary: add line3
|
o changeset: 1:0cf85b44002c
| summary: add line1a
|
o changeset: 0:73af1be51d81
   summary: add file
}}}
<<BR>><<BR>>
See also: [[Update]], [[Revert]], [[Commit]], [[Merge]]
Line 34: Line 152:

[[FrenchBackout|Français]]

Backout

hg backout [OPTION]... [-r] REV

Revert/undo the effect of an earlier changeset.

Backout works by applying a changeset that's the opposite of the changeset to be backed out. That new changeset is committed to the repository, and eventually merged.

Help text: http://www.selenic.com/mercurial/hg.1.html#backout

0.1. Here's some more detail from Matt about the inner workings (and slightly adapted by experience)

(see also this email thread)

Let <startrev> be the revision we're at when we start the backout.
Backout is basically four steps rolled into one:

  1. hg update -C -r <rev-to-backout>

  2. hg revert --all -r <parent of rev-to-backout>

  3. hg commit

  4. hg update -C -r <startrev>

There's a fifth step that is done automatically if you specify --merge :

  1. hg merge  (merges <startrev> with the newly committed rev from 3.)

And there's a sixth, manual step:

  1. hg commit  (the result of merging)

When step 3 (commit) aborts, you're left with the first two steps completed and you can either:

  • hg commit  yourself to complete it, and/or

  • hg update -C  to abandon the process

Step 4 assures the parents of the committed merge changeset are in the right order. That is : parent1 = <startrev>, and parent2 = <the new backout rev>.

0.2. An example:

$ hg init borepo
$ cd borepo
$ echo line1 > file.txt
$ echi line2 >> file.txt
$ hg ci -Am "add file"

Edit file.txt, so it contains:

line1
line1a
line2

Commit and add a few more changesets:

$ hg ci -m "add line1a"
$ echo line3 >> file.txt
$ hg ci -m "add line3"
$ echo line4 >> file.txt
$ hg ci -m "add line4"

Which produces the following (somewhat shortened) graph:

@  changeset:   3:36b1c0649d3e
|  tag:         tip
|  summary:     add line4
|
o  changeset:   2:2612107e45fe
|  summary:     add line3
|
o  changeset:   1:1f33c361852e
|  summary:     add line1a
|
o  changeset:   0:e3e45b087239
   summary:     add file

Now we backout changeset 1:1f33c361852e.

$ hg backout -r 1

The graph is now:

o  changeset:   4:c3daad6d657d
|  tag:         tip
|  parent:      1:1f33c361852e
|  summary:     Backed out changeset 1f33c361852e
|
| @  changeset:   3:36b1c0649d3e
| |  summary:     add line4
| |
| o  changeset:   2:2612107e45fe
|/   summary:     add line3
|
o  changeset:   1:1f33c361852e
|  summary:     add line1a
|
o  changeset:   0:e3e45b087239
   summary:     add file

We merge and commit, yielding the final graph:

@    changeset:   5:236d8d74edf8
|\   tag:         tip
| |  parent:      3:36b1c0649d3e
| |  parent:      4:c3daad6d657d
| |  summary:     merge backout
| |
| o  changeset:   4:c3daad6d657d
| |  parent:      1:1f33c361852e
| |  summary:     Backed out changeset 1f33c361852e
| |
o |  changeset:   3:36b1c0649d3e
| |  summary:     add line4
| |
o |  changeset:   2:2612107e45fe
|/   summary:     add line3
|
o  changeset:   1:1f33c361852e
|  summary:     add line1a
|
o  changeset:   0:e3e45b087239
   summary:     add file

And file.txt looks like this, nicely eliminating the 'line1a' from rev 1.

line1
line2
line3
line4



When we try this using the separate steps, and we omit step 4, we get a slightly different graph. Note the reversed order of the parents in changeset 5:0eeac5ff9c76.

@    changeset:   5:0eeac5ff9c76
|\   tag:         tip
| |  parent:      4:cbca219e80e1      | <---
| |  parent:      3:f82e9468d652      |
| |  summary:     merge backout
| |
| o  changeset:   4:cbca219e80e1
| |  parent:      1:0cf85b44002c
| |  summary:     Backed out changeset 0cf85b44002c
| |
o |  changeset:   3:f82e9468d652
| |  summary:     add line4
| |
o |  changeset:   2:24ceac6b9018
|/   summary:     add line3
|
o  changeset:   1:0cf85b44002c
|  summary:     add line1a
|
o  changeset:   0:73af1be51d81
   summary:     add file



See also: Update, Revert, Commit, Merge


CategoryCommand

Français

Backout (last edited 2019-11-01 00:19:51 by IanMoody)