Differences between revisions 2 and 3
Revision 2 as of 2010-11-20 21:07:13
Size: 4684
Comment:
Revision 3 as of 2011-02-09 17:14:22
Size: 4751
Comment: changing some links for pointing on translated pages + some improvements
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
Annule les effets du précédent [[ChangeSet|changeset]]. Annule les effets du précédent [[FrenchChangeSet|changeset]].
Line 9: Line 9:
Backout fonctionne en appliquant les modifications inverses à celles du dernier changeset. Ce nouveau changeset est envoyé (commit) au [[Repository|dépôt]] et éventuellement fusionné (merge). Backout fonctionne en appliquant les modifications inverses à celles du dernier changeset. Ce nouveau changeset est validé (commit) au [[FrenchRepository|dépôt]] et éventuellement fusionné (merge).
Line 14: Line 14:
==== Voici quelques tails supplémentaires de Matt sur le fonctionnement interne (légèrement adapté, par expérience) ==== ==== Voici quelques explications complémentaires de Matt sur le fonctionnement interne (légèrement adapté, par expérience) ====
Line 24: Line 24:
 5.#5 `hg merge ` (fusionne <rev de départ> avec la révision nouvellement envoyée à l'étape 3.)  5.#5 `hg merge ` (fusionne <rev de départ> avec la révision nouvellement validée à l'étape 3.)
Line 150: Line 150:
Voir aussi : [[Update]], [[Revert]], [[Commit]], [[Merge]] Voir aussi : [[FrenchUpdate|Update]], [[FrenchRevert|Revert]], [[FrenchCommit|Commit]], [[FrenchMerge|Merge]]

(Traduction du texte original en anglais : Backout)

Backout

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

Annule les effets du précédent changeset.

Backout fonctionne en appliquant les modifications inverses à celles du dernier changeset. Ce nouveau changeset est validé (commit) au dépôt et éventuellement fusionné (merge).

Référence manuel : http://www.selenic.com/mercurial/hg.1.html#backout

0.1. Voici quelques explications complémentaires de Matt sur le fonctionnement interne (légèrement adapté, par expérience)

(voir aussi ce fil de discussion e-mail)

Soit <rev de départ> la révision à laquelle nous allons faire un backout.
Backout est en fait la compilation de quatre étapes en une :

  1. hg update -C -r <rev-pour-le-backout>

  2. hg revert --all -r <parent de rev-pour-le-backout>

  3. hg commit

  4. hg update -C -r <rev de départ>

Il y a une cinquième étape qui se fait automatiquement si vous utilisez l'option --merge :

  1. hg merge  (fusionne <rev de départ> avec la révision nouvellement validée à l'étape 3.)

Ainsi qu'une sixième étape, manuelle celle-là :

  1. hg commit  (le resultat de la fusion)

Lorsque l'étape 3 (commit) avorte, vous vous retrouvez avec les deux premières étapes terminées et vous pouvez faire :

  • hg commit  et résoudre par vous même les problème, et / ou

  • hg update -C  pour abandonner le processus

L'étape 4 permet de s'assurer que les changesets parents sont fusionnés dans le bon ordre. C'est à dire : parent1 = <rev de départ>, et parent2 = <la nouvelle rev backout>.

0.2. Un exemple:

$ hg init depot
$ cd depot
$ echo ligne1 > fichier.txt
$ echo ligne2 >> fichier.txt
$ hg ci -Am "ajout de fichier"

Editons file.txt, pour obtenir :

ligne1
ligne1a
ligne2

On commit et on fait quelques modifications :

$ hg ci -m "ajout ligne1a"
$ echo ligne3 >> fichier.txt
$ hg ci -m "ajout ligne3"
$ echo ligne4 >> fichier.txt
$ hg ci -m "ajout ligne4"

Ce qui produit l'arbre suivant (un brin raccourci) :

@  changeset:   3:36b1c0649d3e
|  tag:         tip
|  summary:     ajout ligne4
|
o  changeset:   2:2612107e45fe
|  summary:     ajout ligne3
|
o  changeset:   1:1f33c361852e
|  summary:     ajout ligne1a
|
o  changeset:   0:e3e45b087239
   summary:     ajout de fichier

Maintenant on fait un backout sur le changeset 1:1f33c361852e.

$ hg backout -r 1

L'arbre est désormais :

o  changeset:   4:c3daad6d657d
|  tag:         tip
|  parent:      1:1f33c361852e
|  summary:     Backed out changeset 1f33c361852e
|
| @  changeset:   3:36b1c0649d3e
| |  summary:     ajout ligne4
| |
| o  changeset:   2:2612107e45fe
|/   summary:     ajout ligne3
|
o  changeset:   1:1f33c361852e
|  summary:     ajout ligne1a
|
o  changeset:   0:e3e45b087239
   summary:     ajout de fichier

On fusionne et commit, ce qui donne l'arbre final :

@    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:     ajout ligne4
| |
o |  changeset:   2:2612107e45fe
|/   summary:     ajout ligne3
|
o  changeset:   1:1f33c361852e
|  summary:     ajout ligne1a
|
o  changeset:   0:e3e45b087239
   summary:     ajout de fichier

Et fichier.txt est comme suit, s'étant vu joliment éliminé la 'ligne1a' de la rev 1.

ligne1
ligne2
ligne3
ligne4



Quand on essaie cela en séparant les étapes, et qu'on oublie l'étape 4, on obtient un arbre légèrement différent. Notez l'ordre inversé des parents dans le 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:     ajout ligne4
| |
o |  changeset:   2:24ceac6b9018
|/   summary:     ajout ligne3
|
o  changeset:   1:0cf85b44002c
|  summary:     ajout ligne1a
|
o  changeset:   0:73af1be51d81
   summary:     ajout de fichier



Voir aussi : Update, Revert, Commit, Merge


FrenchCommand

FrenchBackout (last edited 2012-02-22 06:53:22 by Jérôme Melis)