• 12 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 26/08/2019

Utilisez Git reset

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Imaginez que votre client vous demande une nouvelle fonctionnalité ; vous travaillez dessus toute la journée et le lendemain, finalement, il change d'avis. Catastrophe ! :waw: Premièrement, vous avez perdu une journée à développer une fonctionnalité pour rien, mais en plus il faut que vous trouviez le moyen de revenir en arrière ! Heureusement, notre ami Git arrive à notre rescousse avec la commande  git reset  ! 

Git reset
Git reset

Les trois types de réinitialisation de Git

La commande  git reset  est un outil complexe et polyvalent pour annuler les changements. Elle peut être appelée de trois façons différentes, qui correspondent aux arguments de ligne de commande --soft, --mixed et --hard.

3 types de réinitialisation
3 types de réinitialisation

Nous allons commencer par Reset --hard. Attention, si vous voulez exécuter cette commande, vérifiez 5 fois avant de la lancer et soyez sûr de vous à 200 % .

Pour ce faire, nous allons exécuter la commande :

git reset notreCommitCible  --hard

Cette commande va permettre de revenir à n'importe quel commit mais en oubliant absolument tout ce qu'il s'est passé après ! Quand je dis tout, c'est TOUT ! Que vous ayez fait des modifications après ou d'autres commits, tout sera effacé ! C'est pourquoi il est extrêmement important de revérifier plusieurs fois avant de la lancer, vous pourriez perdre toutes vos modifications si elle est mal faite.

Cette utilisation de  git reset  constitue une manière simple d'annuler des changements qui n'ont pas encore été partagés. Cette commande est incontournable lorsque vous commencez à travailler sur une fonctionnalité, puis que tout à coup, vous vous rendez compte que vous vous êtes trompé et que vous voulez tout recommencer. 

Le  git reset --mixed  va permettre de revenir juste après votre dernier commit ou le commit spécifié, sans supprimer vos modifications en cours. Il va par contre créer un HEAD détaché. Il permet aussi, dans le cas de fichiers indexés mais pas encore commités, de désindexer les fichiers.

git reset HEAD~

Si rien n'est spécifié après  git reset, par défaut il exécutera un   git reset --mixed HEAD~.

Nous avons enfin le  git reset --Soft. Le git reset --Soft permet juste de se placer sur un commit spécifique afin de voir le code à un instant donné ou créer une branche partant d'un ancien commit. Il ne supprime aucun fichier, aucun commit, et ne crée pas de HEAD détaché.

Le HEAD, si vous n'êtes pas sûr d'avoir bien compris , est un pointeur, une référence sur notre position actuelle dans notre répertoire de travail Git. C’est un peu comme notre ombre : elle nous suit où qu’on aille ! Par défaut, HEAD pointe sur la branche courante, master, et peut être déplacé vers une autre branche ou un autre commit.

Oups, j'ai des conflits !

Vous avez vu dans le chapitre précédent comment fusionner des branches. Nous avons utilisé un exemple assez simple où tout s'est bien passé. Mais malheureusement, il arrive parfois, même souvent, que cela ne se passe pas aussi bien et que des conflits apparaissent. o_O  Cela arrive souvent lorsque plusieurs personnes travaillent sur un même fichier et modifient les mêmes lignes.

Prenons un exemple simple. Pendant vos développements, Henry et Bob doivent travailler sur la fonction Hello World (oui, je sais, c'est très recherché). :p Henry affiche alors le message "Hello World" alors que Bob affiche le message "Hello World !". Sauf que lors du commit, Git va voir que sur la même ligne on essaie de lui commiter deux choses différentes et il ne va pas pouvoir deviner lequel prendre. Il est fort mais pas devin ! :magicien: Git va donc afficher un conflit sur le fichier HelloWorld.php. Ce conflit, vous allez donc devoir le résoudre avant de faire le commit.

Pour cela, rien de plus simple, vous allez devoir ouvrir un éditeur. Si vous utilisez VIM, vous pouvez l'ouvrir avec la ligne de commande :

vim helloworld.php

Sinon, vous ouvrez votre éditeur habituel. Vous allez devoir maintenant régler les conflits en comparant les deux fichiers HelloWorld.php et en choisissant quelles modifications vous gardez en fusionnant les fichiers.

Maintenant que vous avez résolu le conflit, il vous reste à le dire à Git !

git commit

Git va détecter que vous avez résolu les conflits et va vous proposer un message de commit. Vous pouvez bien entendu le modifier.

La machine à remonter le temps ! J’ai ajouté le mauvais fichier au commit

Ralalala ! Décidément vous en faites des bêtises ! :D  Alors comme cela, vous avez fait un commit mais un fichier s'est glissé par "erreur". Ne vous inquiétez pas, avec Git nous avons une super fonction qui va remonter le temps. Elle va réaliser une sorte de Undo, mais en faisant un deuxième commit. Elle ne va pas revenir en arrière et supprimer votre commit, mais va inverser vos actions dans le commit et réaliser un second commit. Au lieu de supprimer le commit de l'historique du projet, elle détermine comment annuler les changements introduits par le commit et ajoute un nouveau commit avec le contenu ainsi obtenu.  Vous allez donc revenir à l'état précédent mais avec un nouveau commit. Ainsi, Git ne perd pas l'historique, lequel est important pour l'intégrité de votre historique de révision et pour une collaboration fiable.

La différence entre Revert et Reset est que Reset va revenir à l'état précédent sans créer un nouveau commit, alors que Revert va créer un nouveau commit.

Revert et Reset
Revert et Reset

Essayons cette super commande en faisant un premier commit que nous allons finalement ne plus vouloir. Une fois votre commit fait, écrivez la commande suivante :

git revert HEAD

Une fois, votre commit "annulé", vous allez pouvoir enlever votre fichier, et réaliser de nouveau votre commit. :)

Voyons comment corriger un commit raté dans le prochain chapitre !

Exemple de certificat de réussite
Exemple de certificat de réussite