Updated "Gestion de versions locale avec git, les bases" authored by Sebastien Jean's avatar Sebastien Jean
......@@ -355,6 +355,97 @@ index 927b61b..53c5f7f 100644
__N.B.__ : On peut aussi utiliser en paramètre les _hash_ des commits (abbréviés ou non) mais il est parfois plus simple de se répérer par rapport à `HEAD` (`~1` pour le commit parent, `~2` pour le commit grand-parent, ...) ou même par rapport à `Master` (de la même manière)
### Restauration de versions
la commande `git checkout` permet de déplacer le curseur `HEAD`sur une version antérieure. Mais son utilisation pour restaurer tout ou partie de la version en question nécessite de manipuler des branches (ce n'est pas l'objet de ce guide).
Néanmoins, si on lui indique en paramètre un fichier ou un répertoire, elle remplace le fichier ou le répertoire du _working tree_ avec une version antérieure sans déplacer `HEAD`.
Par exemple, pour restaurer la première version de `unFichier.txt`, il suffit d'exécuter la commande suivante :
```
git checkout HEAD~1 unFichier.txt
Updated 1 path from 300cbfc
MacBook-Air-749:4git sebastienjean$ more unFichier.txt
Une ligne de texte
```
La commande `git status` nous indique que des modifications existent encore par rapport à `HEAD` , on décide de les valider :
```
MacBook-Air-749:4git sebastienjean$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: unFichier.txt
MacBook-Air-749:4git sebastienjean$ git commit -a -m "restauration de la permière version"
[master 16f173b] restauration de la première version
1 file changed, 1 insertion(+), 1 deletion(-)
MacBook-Air-749:4git sebastienjean$ git log --pretty="format:%h %s"
16f173b restauration de la première version
e08fe66 modification du fichier
146f51a ajout d'un fichier
```
### Inversion de modifications
La commande `git revert`permet d'annuler les modifications d'un commit antérieur (pas forcément le précédent, mais dans ce cas ce n'est possible automatiquement que si aucun des commits suivants n'est en conflit de modification avec celui-ci)
On visualise les modifications entre les 2 dernières versions :
```diff
MacBook-Air-749:4git sebastienjean$ git diff HEAD~1 HEAD unFichier.txt
diff --git a/unFichier.txt b/unFichier.txt
index ee051bd..927b61b 100644
--- a/unFichier.txt
+++ b/unFichier.txt
@@ -1 +1 @@
-Une autre ligne de texte
+Une ligne de texte
MacBook-Air-749:4git sebastienjean$
```
On décide de les défaire (l'exécution est déroutée vers un éditeur de texte pour renseigner le message de commit) :
```
MacBook-Air-749:4git sebastienjean$ git revert HEAD
[master 268a278] Revert "restauration de la première version"
1 file changed, 1 insertion(+), 1 deletion(-)
MacBook-Air-749:4git sebastienjean$
```
On observe que l'historique contient toujours toutes les versions :
```
MacBook-Air-749:4git sebastienjean$ git log --pretty="format:%h %s"
268a278 Revert "restauration de la première version"
16f173b restauration de la première version
e08fe66 modification du fichier
146f51a ajout d'un fichier
MacBook-Air-749:4git sebastienjean$
```
On visualise les modifications entre les 2 dernières versions, et on observe qu'elles sont bien l'inverse des précédentes :
```diff
MacBook-Air-749:4git sebastienjean$ git diff HEAD~1 HEAD unFichier.txt
diff --git a/unFichier.txt b/unFichier.txt
index 927b61b..ee051bd 100644
--- a/unFichier.txt
+++ b/unFichier.txt
@@ -1 +1 @@
-Une ligne de texte
+Une autre ligne de texte
MacBook-Air-749:4git sebastienjean$
```
On visualise les modifications entre la dernière version et son grand-parent, et on observe qu'elles sont bien nulles (on a rétablit le même contenu du _working tree` :
```diff
MacBook-Air-749:4git sebastienjean$ git diff HEAD~2 HEAD unFichier.txt
MacBook-Air-749:4git sebastienjean$
```
......
......