Mercurial pour nous les nuls, leçon 10 : revert, rollback

L’index des leçons :

  1. Leçon 1 : la gestion de version
  2. Leçon 2 : qu’est-ce qu’un dépôt ?
  3. Leçon 3 : les logiciels ”clients”
  4. Leçon 4 : création d’un dépôt
  5. Leçon 5 : enregistrement de révision
  6. Leçon 6 : synchronisation de dépôts, mise à jour du répertoire de travail
  7. Leçon 7 : identifier les différences
  8. Leçon 8 : la gestion des branches
  9. Leçon 9 : la fusion de branche
  10. Leçon 10 : retour vers le passé
  11. Leçon 11 : patch et collaboration indirecte

Il peut arriver qu’un clic malencontreux, qu’une lecture en diagonale, qu’un appui sur la touche entrée… survienne sans qu’on y fasse trop attention et soudain c’est la catastrophe ! Voyons comment, avec Mercurial et les outils disponibles, nous pouvons remédier à cela.

Pour l’instant voyons le premier pas, lorsque les modifications non désirées (peu importe la raison) n’ont pas encore été commitées.

Annuler une ou plusieurs modifications apportées à des fichiers : Revert

Lors de la dernière leçon, j’avais laissé mon dépôt et mon répertoire de travail dans cet état :

Contenu actuel du dépôt

Puis je commence à modifier un fichier, _public.php, et je crée un nouveau fichier _prepend.php que j’ajoute au passage avec la commande AddRemove Selected Files de MacHg. Voilà maintenant l’état de mon répertoire de travail :

Modifications apportées sur deux fichiers

Imaginons maintenant que je me sois trompé et qu’il me fallait modifier le fichier _config.php et que le fichier _prepend.php ne soit pas utile. Plutôt que d’annuler les modifications avec un éditeur de texte dans le premier fichier — ce qui peut être une source d’erreur —, je vais plutôt demander à MacHg de me le restaurer dans l’état dans lequel il était lors du dernier commit.

Pour cela je vais le sélectionner et utiliser la commande Revert Selected Files de MacHg. Je confirme l’action en cliquant sur le bouton Revert :

Fenêtre de confirmation du revert

Voilà maintenant l’état de mon répertoire de travail :

État du répertoire après le revert

La commande terminal correspondante est la suivante :

hg revert _public.php

Je fais de même avec le fichier _prepend.php. Sélection, utilisation de la commande de menu Revert Selected Files et confirmation.

La commande terminal correspondante est la suivante :

hg revert _prepend.php

Voilà maintenant l’état de mon répertoire :

État du répertoire après le 2e revert

Vous observerez que le fichier _prepend.php n’est plus suivi par MacHg (voyez le symbole qui précède le fichier dans la copie d’écran précédente) et je peux donc le supprimer directement dans le dossier correspondant. Me voilà donc de nouveau dans le même état qu’au début de la leçon.

Notez que jusqu’ici je n’ai pas fait un seul commit. Voyons maintenant comment faire pour annuler ces mêmes modifications alors qu’elles ont été enregistrées dans une nouvelle révision du dépôt.

Annuler le dernier commit : Rollback

Imaginons cette fois que je sois allé une étape plus loin et que j’ai fait un commit avec les deux modifications décrites plus haut. Comment faire pour revenir en arrière et annuler cette opération ?

Pour cela il suffit de faire un rollback (littéralement un retour en arrière).

Voilà dans quel état se trouve mon dépôt après le dernier commit (révision 11) :

État des révisions après le commit

Vous voyez les deux fichiers, _public.php modifié et _prepend.php ajouté. Je vais alors utiliser la commande Rollback Last Commit de MacHg. Je confirme l’action sur la fenêtre de confirmation en cliquant sur le bouton Roll Back :

Fenêtre de confirmation du rollback

Une fois l’opération effectuée je peux vérifier l’état de mon dépôt :

État des révisions après le rollback

La révision 11 a disparu et les fichiers sont de nouveaux dans l’état précédent le dernier commit :

État du répertoire après le rollback

La commande terminal équivalente est la suivante :

hg rollback

Vous voyez qu’on peut se sortir d’un mauvais pas assez facilement avec les outils intégrés à Mercurial. Ces solutions ont cependant des limites. Un rollback ne peut se faire qu’une fois (sur le dernier commit seulement), et n’est pas annulable. Dans le cas où toute une série de révisions serait à supprimer il faudrait alors utiliser la commande strip qui le permet mais nous sortons ici du cadre de nos leçons.

Notez aussi que vous avez toujours la possibilité de revenir à la révision antérieure en utilisant la commande update et en indiquant que vous souhaitez que MacHg fasse le ménage au passage, c’est à dire qu’il ne conserve pas les modifications que vous n’avez pas encore commitées. Il suffit pour cela de cocher l’option Clean (delete modified files) de la fenêtre de sélection de la révision à restaurer. Voyez cela comme une sorte de revert de masse.

Conclusion

Vous en savez maintenant assez pour annuler un mauvais pas et cette leçon termine cette série consacrée à l’usage courant de Mercurial. Nous allons maintenant nous intéresser un peu à la collaboration indirecte en étudiant la façon de produire et d’utiliser des patches — utile pour fournir à un dépôt sur lequel vous n’avez de droit de soumission une ou plusieurs modifications, mais pas seulement — et de signaler au(x) responsable(s) d’un dépôt Bitbucket que vous avez une contribution à leur soumettre.

Glossaire

revert : remet un fichier dans l’état où il se trouvait au moment d’un commit.

rollback : suppression du dernier commit enregistré dans un dépôt.


Leçon suivante

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/7134

Haut de page