Aller au contenu

Introduction

undoing changes

Description

Contrairement aux systèmes de « défaire » traditionnels, Git dispose de son propre système avec une terminologie complètement différente, incluant des commandes telles que git clean, git rm, git reset et ainsi de suite. Chaque commande a des fonctions spécifiques et est utilisée pour annuler des modifications dans les dépôts locaux et publics.

Examiner les anciens commits

Après avoir créé l'historique d'un projet, il est possible d'examiner tous les commits de cet historique. Le meilleur outil pour examiner les anciens commits est considéré comme étant git log. Chaque commit possède un hash d'identification, utilisé pour revenir sur des commits spécifiques.

Introduction

bash
git log --oneline
a3b2a21ad Crossword solver with Vue.js
c54ce0237 New logic for crossword game
3acb8d0de Some changes in crossword logic
de32112e3 Styling crossword table area

Par défaut, git log affiche uniquement les commits de la branche sélectionnée. Pour afficher tous les commits de toutes les branches, exécutez la commande git log --all. Utilisez git checkout ou git switch pour accéder à d'autres branches.

Consulter les anciennes révisions

Si vous souhaitez consulter l'état du projet avant de lancer une nouvelle expérience, vous devez d'abord trouver le hash d'identification de la révision que vous voulez voir. Vous pouvez le faire à l'aide de la commande git log :

git log --oneline

bash
git log --oneline

Si vous exécutez la commande ci-dessus, vous obtiendrez l'historique du projet, qui ressemblera à quelque chose comme ceci :

Résultat de git log

bash
b7119f2 Changes in Scrabble Solver
234be24 Fixing search input bug 
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

Utilisez la commande git checkout pour consulter le commit qui vous intéresse.

git checkout commit

bash
git checkout b235bf4

Après cela, vous pourrez consulter les fichiers, exécuter des tests, etc. Même si vous modifiez des fichiers, vous pouvez être certain que l'état actuel de votre projet ne sera pas perdu, car tout ce que vous faites ici ne sera pas sauvegardé dans le dépôt. Exécutez la commande git checkout master pour revenir à l'état actuel de votre projet et continuer le développement.

git checkout branch

bash
git checkout master

Une fois de retour sur la branche master, vous pouvez utiliser git revert ou git reset pour annuler n'importe quelle modification.

Annuler un commit validé

Il existe différentes façons d'annuler un commit. Imaginons que notre historique de commits ressemble à ce qui suit :

Annulation d'un commit validé

bash
git log --oneline
863fa8e Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

Nous utiliserons ci-dessous différentes méthodes pour annuler le commit 863fa8e Making some improvements.

Annuler des commits avec git checkout

La commande git checkout permet de revenir au commit précédent, b235bf4, plaçant ainsi le dépôt dans un état antérieur au commit d'amélioration. Par conséquent, l'état du dépôt sera « detached HEAD » (tête détachée). Être dans cet état signifie que chaque nouveau commit créé sera orphelin lors du retour vers une branche établie. Les commits orphelins peuvent éventuellement être supprimés par le garbage collector de Git. Pour éviter de perdre du travail, créez une branche à partir de cet état. Depuis l'état detached HEAD du dépôt, vous pouvez exécuter git checkout -b new_branch_without_improvement_commit. Vous disposerez ainsi d'une nouvelle branche nommée new_branch_without_improvement_commit et basculerez vers cet état. Nous avons maintenant une nouvelle chronologie d'historique sans le commit 863fa8e. À ce stade, lorsque le commit 863fa8e n'existe plus, nous pouvons examiner certaines stratégies d'annulation.

Annuler un commit public avec git revert

La commande git revert HEAD crée un nouveau commit contenant l'inverse du dernier commit, et ce nouveau commit est ajouté à la branche actuelle :

Annulation d'un commit public avec git revert

bash
git log --oneline
23a4b42 Revert "Making some improvements"
234be24 Making some improvements
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

Le commit 234be24 est à nouveau annulé. Bien qu'il soit toujours présent dans l'historique, le nouveau commit 23a4b42 est l'inverse des modifications apportées dans 234be24. Contrairement à la méthode checkout précédente, vous pouvez continuer à utiliser la même branche. Il s'agit de la méthode d'annulation idéale pour travailler avec des dépôts partagés publiquement.

Annuler un commit avec git reset

La commande git reset est une commande polyvalente qui possède de nombreuses utilisations et fonctions. En exécutant git reset --hard b235bf4, l'historique des commits sera réinitialisé à ce commit spécifique. À ce stade, l'exécution de git log affichera un historique ressemblant à ceci :

Annulation d'un commit avec git reset

bash
git log --oneline
b235bf4 Make some changes to solver.php
256a81c Create solver.php
3243e12 Initial changes

Annuler le dernier commit

Les stratégies d'annulation décrites ci-dessus fonctionnent également sur le dernier commit. Cependant, dans certains cas, vous n'aurez pas besoin de supprimer ou de réinitialiser le commit le plus récent. Il a peut-être simplement été créé trop tôt. Dans ce cas, vous pouvez modifier ce commit récent en exécutant git commit --amend, une fois que de nouvelles modifications ont été apportées dans le répertoire de travail et préparées pour le commit avec git add. À ce stade, Git ouvrira l'éditeur de texte système configuré pour vous permettre de modifier le message du dernier commit. Ces nouvelles modifications seront ajoutées au commit modifié.

Annuler des modifications non validées

Les modifications se trouvent dans l'index de mise en attente et dans le répertoire de travail avant d'être validées dans l'historique du dépôt. Vous souhaiterez donc peut-être les annuler dans ces deux zones. Si vous souhaitez plus d'informations sur ces deux zones, consultez la commande git reset.

bash
# Unstage a file
git reset HEAD <file>
# Discard changes in the working directory
git checkout -- <file>

Le répertoire de travail

Le répertoire de travail représente les fichiers sur le système de fichiers de votre ordinateur, qui sont accessibles à l'éditeur de code pour appliquer des modifications. Git dispose de certains outils pour gérer le répertoire de travail, notamment les commandes git clean et git reset.

L'index de mise en attente

L'index de mise en attente est l'un des arbres de Git. Il suit les modifications apportées dans le répertoire de travail. La commande qui ajoute des modifications à la zone de mise en attente est git add. Ici, nous pouvons utiliser la commande git reset pour annuler des modifications. Un reset --mixed renvoie les modifications de l'index de mise en attente vers le répertoire de travail.

Annuler des modifications publiques

La meilleure façon d'annuler des modifications publiques est d'utiliser la commande git revert. N'utilisez jamais git reset à cette fin, car cela supprimerait les commits de l'historique partagé. Elle est conçue pour annuler les modifications locales du répertoire de travail et de l'index de mise en attente. git revert conservera les commits que vous souhaitez annuler et créera un nouveau commit à la place de celui que vous ne souhaitez plus.

Pratique

What are the functions of different Git commands used for undoing changes and commits?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.