GitVoici le quatorzième volet de la formation Git. Dans mon précédent article sur le sujet, nous avons vu en détail l’affichage des modifications entre les commits successifs grâce à la commande git diff. Lorsqu’on travaille sur du code source, des scripts ou de la documentation, on fait forcément des erreurs. Le moment est venu de nous intéresser à la manière dont nous pouvons sainement gérer ces erreurs avec Git, ce qui fera d’ailleurs l’objet de plusieurs articles. Après tout, l’erreur est humaine, et il y a beaucoup de choses à dire sur le sujet.

Enclencher la marche arrière

Nous allons nous servir des fichiers de l’atelier pratique formation-git/atelier-18 pour une démonstration pratique. Effectuez une copie de ce dépôt Git pour travailler dessus :

$ cd ~/formation-git/
$ cp -R atelier-18/ atelier-20
$ cd atelier-20/

Inspectons sommairement le contenu et l’état du dépôt :

$ ls
Cartes.md  Entretien.md  Roadtrip.md
$ git status
On branch master
nothing to commit, working tree clean
$ git log --oneline --graph --all
* cbeca14 (HEAD -> master) Ajout du fichier Cartes.
* 7def037 Ajout d'une destination.
* 9159976 Ajout du fichier Entretien.
* 4220c4c Ajout du fichier Roadtrip.

J’édite mon fichier Roadtrip.md et je me dis que tant qu’à faire, je pourrais bien prolonger mon voyage et ajouter Budapest à ma liste de villes à visiter :

$ git diff
diff --git a/Roadtrip.md b/Roadtrip.md
index d72992d..239e609 100644
--- a/Roadtrip.md
+++ b/Roadtrip.md
@@ -9,3 +9,5 @@
 - Innsbruck
 
 - Vienne
+
+- Budapest

Et là je me rends compte que mon passeport n’est plus valide. Certes, je peux toujours voyager en Italie, en Suisse et en Autriche, où les douaniers sont plus accommodants. Mais la Hongrie n’accepte que les passeports en cours de validité. Je dois donc supprimer cette destination de ma liste.

Bien évidemment, rien ne m’empêche de rouvrir mon fichier avec mon éditeur de texte pour rectifier le tir. Au lieu de faire cela, je vais voir si Git n’a pas mieux à proposer :

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   Roadtrip.md

Je vais prendre cette suggestion au pied de la lettre et utiliser la commande git restore pour ignorer les modifications effectuées dans le répertoire de travail :

$ git restore Roadtrip.md

J’affiche l’état de mon dépôt :

$ git status
On branch master
nothing to commit, working tree clean

Je jette un œil dans mon fichier Roadtrip.md, et je constate que la capitale de la Hongrie a bel et bien disparu de la liste des destinations.

Pour trouver une alternative, j’étudie la carte de l’Europe, et après cinq secondes de mûre réflexion, je me dis que la ville de Prague ferait une belle étape pour mon voyage. Je l’ajoute donc à ma liste de destinations aussi bien qu’à l’index de Git :

$ git diff --staged
diff --git a/Roadtrip.md b/Roadtrip.md
index d72992d..ad89c05 100644
--- a/Roadtrip.md
+++ b/Roadtrip.md
@@ -9,3 +9,5 @@
 - Innsbruck
 
 - Vienne
+
+- Prague

Et là je me rends compte que je me suis emballé trop vite. Comme tous les anciens pays du Pacte de Varsovie, la République Tchèque est tout aussi rigoriste avec les passeports que la Hongrie. Je vais donc devoir la supprimer de ma liste. Comment faire, puisque j’ai déjà ajouté mes modifications à la zone d’indexation ? Là aussi, il suffit de lire ce que Git nous affiche en le prenant au pied de la lettre :

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   Roadtrip.md

Dans un premier temps, je vais annuler les modifications dans la zone d’indexation :

$ git restore --staged Roadtrip.md

Et maintenant ? Je vérifie mon fichier Roadtrip.md, et la ville de Prague y figure toujours. Mais je suis revenu à l’état avant que je n’ajoute mes modifications à l’index :

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>k;..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   Roadtrip.md

Partant de là, il suffit que je continue à suivre les indications de Git, et le tour est joué :

$ git restore Roadtrip.md
$ git status
On branch master
nothing to commit, working tree clean

Exercice 1

Pas la peine d’effectuer une copie de travail pour ce petit atelier pratique. Vous pouvez sereinement continuer à utiliser les fichiers du dépôt formation-git/atelier-20 :

  • Éditez le fichier Cartes.md et ajoutez la Hongrie à la liste.
  • Affichez les modifications entre l’index et le répertoire de travail.
  • Annulez ces modifications.
  • Ajoutez la République Tchèque à liste des pays dans Cartes.md.
  • Ajoutez les modifications à l’index.
  • Affichez les modifications entre l’index et la base de données d’objets.
  • Annulez ces modifications jusqu’à ce que le répertoire de travail soit propre.

Exercice 2

Cette fois-ci vous allez vous entraîner à annuler les modifications dans plusieurs fichiers :

  • Vous allez travailler sur les fichiers Roadtrip.md et Cartes.md.
  • Ajoutez Budapest (Hongrie) à ces deux fichiers.
  • Affichez les modifications entre l’index et le répertoire de travail.
  • Annulez ces modifications.
  • Ajoutez Prague (République Tchèque) aux deux fichiers.
  • Ajoutez les modifications à l’index.
  • Affichez les modifications entre l’index et la base de données d’objets.
  • Annulez ces modifications jusqu’à ce que le répertoire de travail soit propre.

Lire la suite : Supprimer des fichiers


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *