Navigate back to the homepage

Remonter dans le temps avec Git

Morgan Ridel
August 9th, 2017 · 2 min read

Cet article fait partie d’une série d’article sur Git pour les débutant comprenant un article sur les bases du développement avec Git et GitHub et un autre sur les branches.

Un des avantages principaux de Git, c’est le stockage des différents commits depuis le début du suivi du projet. J’ai donc déjà évoqué le fait qu’on puisse retourner dans un état passé comme un “point de sauvegarde”. On peut aussi annuler des actions réalisées par certains commits.

Mais comment faire concrètement ?

C’est ce que nous allons voir ici !

Voyager dans le passé

Git permet très simplement d’observer l’état d’un projet tel qu’il était au moment de n’importe quel commit. Il vous suffit de connaître l’id du commit. Si vous ne le saviez pas encore, vous pouvez consulter l’historique des commits sur la branche actuelle avec la commande suivante:

1git log

Vous obtiendrez alors quelque chose de cette envergure:

1commit 46e0b340e82a0d7924bdd81a43cafca4b52b66c5
2Author: Jean <jean@jadoregit.com>
3Date: Tue Jul 25 15:56:08 2017 +0200
4
5Added style.css !
6
7commit 52e3b1347e637fda7691433d311270a187ec0ab6
8Author: Jean <jean@jadoregit.com>
9Date: Tue Jul 25 14:25:50 2017 +0200
10
11Initial commit

La longue chaine de caractère du type 52e3b1347e637fda7691433d311270a187ec0ab6 c’est l’id du commit. À partir de cet id vous pouvez retourner à l’état du projet juste après que ce commit ait été fait.

Il faut pour cela utiliser une commande que vous avez déjà vue dans l’article sur les branches : git checkout !

1git checkout 52e3b1347e637fda7691433d311270a187ec0ab6

Vous pouvez à tout moment retourner au dernier commit si vous le souhaitez:

1git checkout master

Mais je sens que vous n’êtes pas très heureux à l’idée de devoir recopier à chaque fois un id aussi long… Heureusement Git a pensé à vous, et si vous écrivez assez de caractères pour différencier ce commit des autres la commande marchera tout de même:

1git checkout 52e3

Ici les 4 premiers caractères suffisent.

Votre répertoire est maintenant identique à celui du passé, vous avez voyagé dans le temps ! Malheureusement, vous ne pouvez pas changer l’histoire et tous les commits que vous faites à partir de maintenant n’affecteront pas le futur.

En revanche vous pouvez à tout moment créer une branche à partir du commit passé:

1git checkout -b ma-branche-dans-le-passe

Vous pouvez alors travailler sur des modifications à partir d’une ancienne version, et la fusionner plus tard sur le présent !

Annuler d’anciennes actions

Parfois, vous pouvez vouloir annuler totalement les modifications apportées par un commit. Git est capable d’identifier les ajouts et suppressions de ligne qui font la différence entre deux commits.

Ainsi il est possible de créer un nouveau commit qui effectue exactement l’inverse de ce qu’à effectué un ancien commit ! c’est la commande git revert.

1git revert 24sa5

Il est possible que vous ayez à faire à des conflits si vous voulez annuler un commit dont les lignes qu’ils concernent ont été à nouveau modifiées par la suite.

Détruire l’histoire et remonter dans le temps.

Dans certains cas, tout va mal et vous voulez retourner précisément à un point dans le passé et y rester.

Pour cela vous pouvez utiliser la commande suivante pour retourner au commit souhaité (ici 24sa5):

1git reset --hard 24sa5

Le paramètre —hard va remettre les fichiers à l’état du commit indiqué. Si vous l’omettez, les commits suivants celui du retour seront supprimés mais les fichiers ne changeront pas d’état.

ATTENTION !!: Cette méthode est vivement déconseillée si vous travaillez sur un dépôt distant sur GitHub. En effet, vous détruisez des commits ce qui est très handicapant si d’autres personnes travaille sur votre projet. L’idéal serait que toute modification soit réalisée par un nouveau commit. Voici une méthode permettant cela.

Si vous voulez retourner à un état passé et le garder sans supprimer les commits précédents, vous pouvez utiliser la méthode suivante pour créer un nouveau commit où les fichiers seront exactement dans le même état que le commit passé souhaité.

Placez vous à la racine du repertoire suivi par Git puis :

1git checkout 24sa5 .
2git commit -m "Rollback to 24sa5"

(Le point est nécessaire)

Il est à noter que les fichiers ajoutés depuis le commit en question ne seront pas supprimés du projet. Seules les modifications sur les fichiers seront annulées.

More articles from Morgan Ridel

Les bases des branches avec Git

Cet article fait suite à mon autre article sur les bases de Git et GitHub , je vous invite fortement à le lire si vous débutez totalement…

August 3rd, 2017 · 3 min read

Comment utiliser Git en 10 minutes

Git est un outil formidable. Besoin de récupérer une ancienne version de votre code ? Ou de pouvoir expérimenter dessus sans prendre le…

July 27th, 2017 · 6 min read
© 2017–2022 Morgan Ridel
Link to $https://twitter.com/morganridelLink to $https://github.com/morganridelLink to $https://www.linkedin.com/in/morgan-ridel-017a9ab6/