L’index des leçons :
- Leçon 1 : la gestion de version
- Leçon 2 : qu’est-ce qu’un dépôt ?
- Leçon 3 : les logiciels ”clients”
- Leçon 4 : création d’un dépôt
- Leçon 5 : enregistrement de révision
- Leçon 6 : synchronisation de dépôts, mise à jour du répertoire de travail
- Leçon 7 : identifier les différences
- Leçon 8 : la gestion des branches
- Leçon 9 : la fusion de branche
- Leçon 10 : retour vers le passé
- 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 :
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 :
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
:
Voilà maintenant l’état de mon répertoire de travail :
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 :
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) :
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
:
Une fois l’opération effectuée je peux vérifier l’état de mon dépôt :
La révision 11 a disparu et les fichiers sont de nouveaux dans l’état précédent le dernier commit :
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.