Skip to content
Commencer

Secourir son code et réparer ses erreurs

Dans le cycle de développement Git, les erreurs peuvent survenir à différentes étapes. Selon la zone dans laquelle se trouve votre code modifié ou erroné, la stratégie d’annulation change.

Zone de travailÉtat du fichierCommande d’annulationImpact
Working DirectoryModifié, non indexégit restore <file>Écrase les modifications locales non sauvegardées.
Staging AreaIndexé, prêt à être validégit restore --staged <file>Retire le fichier de l’index mais conserve les modifications.
Local RepositoryCommité dans l’historiquegit reset (soft / mixed / hard)Recule le pointeur de branche (HEAD).

1. Annuler en local (Working Directory & Staging Area)

Section titled “1. Annuler en local (Working Directory & Staging Area)”

Abandonner des modifications locales (Working Directory)

Section titled “Abandonner des modifications locales (Working Directory)”

Si vous avez modifié un fichier (par exemple index.html) et que vos modifications ne conviennent pas, vous pouvez restaurer le fichier dans l’état exact du dernier commit :

Terminal window
git restore index.html

Attention

Cette commande est destructrice. Toutes les modifications locales non commités dans ce fichier seront définitivement perdues.

Si vous avez ajouté un fichier à l’index avec git add index.html par erreur, vous pouvez le retirer de la Staging Area sans perdre vos modifications :

Terminal window
git restore --staged index.html

Le fichier retournera à l’état “Modifié mais non indexé”.


Exercice Pratique : Restaurer et désindexer

Section titled “Exercice Pratique : Restaurer et désindexer”

Suivez les instructions du simulateur pour vous exercer à manipuler la Staging Area et le Working Directory :

Commandes à exécuter

bash
# Cliquez sur les commandes à gauche pour les exécuter dans le simulateur
hashcode-academy:~$ _

Lorsque le commit est créé localement, git reset permet de revenir en arrière dans le temps. Il existe trois modes de reset principaux.

graph TD
    A[Dernier Commit] -->|git reset| B{Choix du mode}
    B -->|--soft| C[Conserve dans la Staging Area]
    B -->|--mixed| D[Conserve dans le Working Directory]
    B -->|--hard| E[Détruit toutes les modifications]

Permet d’annuler le dernier commit tout en conservant vos modifications dans la Staging Area (indexées et prêtes à être à nouveau commitées). Très utile pour reformuler un message de commit ou regrouper des modifications.

Terminal window
git reset --soft HEAD~1

Annule le dernier commit et retire les fichiers de la Staging Area, mais conserve les modifications dans votre Working Directory (fichiers modifiés mais non indexés).

Terminal window
git reset --mixed HEAD~1

Annule le dernier commit, vide la Staging Area et supprime définitivement toutes les modifications de votre Working Directory. Le projet revient à l’état strict du commit ciblé.

Terminal window
git reset --hard HEAD~1

3. Mettre de côté temporairement (git stash)

Section titled “3. Mettre de côté temporairement (git stash)”

Vous travaillez sur une nouvelle fonctionnalité dans la branche feature-login, mais un bug critique survient sur main. Vous devez changer de branche en urgence, mais vos modifications actuelles ne sont pas assez stables pour faire l’objet d’un commit.

git stash vous permet de mettre vos modifications de côté dans une pile temporaire, nettoyant ainsi votre espace de travail.

Terminal window
git stash

(Vous pouvez maintenant changer de branche avec git switch main en toute sécurité)

Terminal window
git stash list

Restaurer les modifications et vider la pile

Section titled “Restaurer les modifications et vider la pile”

Une fois le bug corrigé, revenez sur votre branche de travail et récupérez vos modifications :

Terminal window
git stash pop

(Restaure le dernier élément de la pile de stash et le supprime de la liste)


4. La bouée de sauvetage ultime : git reflog

Section titled “4. La bouée de sauvetage ultime : git reflog”

Avez-vous fait un git reset --hard par erreur ? Supprimé une branche contenant des commits précieux ?

Pas de panique ! Git n’efface jamais immédiatement les commits orphelins. Ils restent stockés dans la base de données locale pendant environ 30 jours avant d’être nettoyés. La commande git reflog enregistre tous les mouvements de la tête d’écriture (HEAD), y compris les resets et les switchs de branches.

Étape 1 : Consulter le journal d’activité de HEAD

Section titled “Étape 1 : Consulter le journal d’activité de HEAD”
Terminal window
git reflog

Vous obtiendrez un historique semblable à celui-ci :

a1b2c3d HEAD@{0}: reset: moving to HEAD~1
e4f5g6h HEAD@{1}: commit: feat: add notifications support
j7k8l9m HEAD@{2}: commit: fix: resolve oauth login loop

Pour récupérer le commit de notifications annulé par le reset, utilisez l’index du reflog associé :

Terminal window
git reset --hard HEAD@{1}

Et voilà ! Votre commit est restauré comme par magie.


Question

Quelle commande annule les modifications locales d'un fichier non indexé ?

Cliquer pour révéler la réponse
Réponse

git restore <fichier>

Cliquer pour voir la question
Question

Quelle est la différence entre git reset --soft et --hard ?

Cliquer pour révéler la réponse
Réponse

--soft annule le commit mais garde les fichiers modifiés et indexés. --hard annule le commit et détruit définitivement toutes les modifications.

Cliquer pour voir la question
Question

À quoi sert git stash ?

Cliquer pour révéler la réponse
Réponse

À mettre temporairement de côté les modifications en cours pour retrouver un répertoire de travail propre sans créer de commit.

Cliquer pour voir la question
Question

Comment récupérer un commit supprimé par erreur avec git reset --hard ?

Cliquer pour révéler la réponse
Réponse

Lancer git reflog pour repérer l'identifiant du commit, puis exécuter git reset --hard HEAD@{index}.

Cliquer pour voir la question

1. Quelle commande permet de désindexer un fichier 'main.js' sans perdre ses modifications ?

2. Quel type de reset détruit définitivement les modifications du Working Directory ?

3. Quelle commande restaure les modifications stasheades et les retire de la pile ?


Vous savez maintenant faire face aux erreurs locales et restaurer votre historique. Découvrons à présent comment collaborer sur des projets open source de grande envergure avec le workflow de Fork.

Et maintenant ?

HashCode Workshops
Part of the JoinHashCode ecosystem

Ctrl + K Rechercher dans les workshops