🔝 Retour au Sommaire
Bienvenue dans le Module 8, consacré au dépannage et à la résolution de problèmes avec Git. Si vous êtes arrivé jusqu'ici, vous avez déjà acquis une solide compréhension de Git et de ses fonctionnalités. Mais la réalité est que, tôt ou tard, tout utilisateur de Git rencontrera des situations problématiques.
Ce module est votre guide de premiers secours Git. Il vous donnera les outils et les connaissances nécessaires pour sortir des situations difficiles et récupérer votre travail, même quand tout semble perdu.
Git est un outil puissant, mais cette puissance vient avec une certaine complexité. Vous allez inévitablement :
- Faire des erreurs de manipulation
- Vous retrouver dans des états que vous ne comprenez pas
- Perdre temporairement du travail
- Rencontrer des messages d'erreur cryptiques
- Devoir nettoyer un dépôt devenu trop volumineux
La bonne nouvelle ? La plupart des problèmes Git ont une solution, et souvent plusieurs ! Git est conçu pour être très résilient : il conserve l'historique et offre de nombreux mécanismes de récupération.
Dans ce module, nous allons couvrir les situations problématiques les plus courantes :
- Résoudre le "detached HEAD" : Comprendre cet état particulier et savoir en sortir
- Annuler un merge ou un rebase : Revenir en arrière quand une fusion se passe mal
- Récupérer du travail perdu : Utiliser reflog et reset pour retrouver des commits "perdus"
- Gérer les gros fichiers : Nettoyer un dépôt et éviter les problèmes de performance
- Erreurs fréquentes et solutions : Un catalogue des erreurs courantes avec leurs solutions
Avant de plonger dans les solutions techniques, adoptons le bon état d'esprit :
Git conserve presque tout pendant au moins 30 à 90 jours. Même si vous pensez avoir tout perdu, il y a de très bonnes chances que vos données soient encore récupérables. Le système de reflog de Git est comme une machine à remonter le temps qui enregistre tous vos mouvements.
Git est généralement très explicite dans ses messages d'erreur. Prenez le temps de lire attentivement ce que Git vous dit. Souvent, le message contient directement la solution ou un indice sur ce qui ne va pas.
Exemple :
error: Your local changes to the following files would be overwritten by checkout:
fichier.txt
Please commit your changes or stash them before you switch branches.
Ce message vous dit exactement quoi faire : commiter ou utiliser stash avant de changer de branche.
La commande git status est votre boussole dans Git. Quand vous êtes perdu, commencez toujours par :
git statusCette commande vous indique :
- Sur quelle branche vous êtes
- Si vous avez des modifications non commitées
- Si vous êtes en plein milieu d'un merge ou d'un rebase
- Ce que vous devez faire ensuite
Avant d'effectuer une opération que vous ne maîtrisez pas complètement, créez une branche de sauvegarde :
# Créer une sauvegarde de votre état actuel
git branch sauvegarde-avant-manipulationSi quelque chose tourne mal, vous pourrez toujours revenir à cette branche :
git checkout sauvegarde-avant-manipulationC'est comme créer un point de sauvegarde dans un jeu vidéo !
Git est conçu pour être expérimental. N'ayez pas peur d'essayer des commandes ou de faire des erreurs. Avec les bonnes connaissances (que vous allez acquérir dans ce module), vous pourrez toujours revenir en arrière.
Règle d'or : Si vous n'avez pas encore partagé vos modifications avec d'autres (pas fait de git push), vous pouvez faire à peu près n'importe quoi sans risque. C'est seulement après avoir partagé votre travail qu'il faut être plus prudent.
Git possède plusieurs mécanismes de sécurité qui vous protègent contre la perte de données :
Le reflog est votre filet de sécurité ultime. Il enregistre tous les mouvements de HEAD dans votre dépôt :
- Chaque commit
- Chaque changement de branche
- Chaque merge, rebase, reset
- Pratiquement toute opération Git
Même si un commit semble "perdu", il est probablement encore dans le reflog et récupérable.
Git ne supprime pas immédiatement les objets "orphelins" (commits qui ne sont plus référencés par aucune branche). Il les garde pendant une période de grâce (par défaut 30 à 90 jours) avant de les nettoyer.
Cela signifie que vous avez généralement plusieurs semaines pour récupérer un travail que vous pensiez perdu.
Dans Git, créer une branche ne coûte presque rien (quelques octets). N'hésitez donc jamais à créer des branches :
- Pour tester une idée
- Avant une manipulation risquée
- Pour sauvegarder un état particulier
Avant d'aborder les solutions spécifiques, voici quelques concepts essentiels à comprendre :
HEAD est un pointeur qui indique où vous vous trouvez dans votre dépôt. En temps normal, HEAD pointe vers une branche, qui elle-même pointe vers un commit.
HEAD -> main -> commit abc123
Comprendre où est HEAD est essentiel pour diagnostiquer et résoudre les problèmes.
Rappel des trois zones importantes :
- Working Directory : Vos fichiers tels que vous les voyez
- Staging Area (Index) : Les modifications préparées pour le prochain commit
- Repository : L'historique des commits
Savoir dans quelle zone se trouvent vos modifications vous aide à choisir la bonne commande de récupération.
Il existe deux philosophies pour annuler des changements :
Récrire l'historique (avec reset, rebase, etc.) :
- ✅ Donne un historique propre
- ❌ Dangereux si déjà partagé avec d'autres
Créer de nouveaux commits (avec revert) :
- ✅ Sûr pour l'historique partagé
- ❌ Historique moins propre
Règle simple : Si vous avez déjà fait git push, préférez revert. Sinon, vous pouvez utiliser reset.
Ce module est organisé comme un guide de référence. Vous n'avez pas besoin de tout mémoriser. L'important est de :
- Connaître l'existence des solutions : Savoir que tel problème peut être résolu
- Savoir où chercher : Revenir à ce module quand vous rencontrez un problème
- Comprendre les principes : Avec les concepts de base, vous pourrez résoudre même des problèmes nouveaux
Suggestion d'utilisation :
- Lisez d'abord l'ensemble du module pour avoir une vue d'ensemble
- Gardez-le comme référence pour quand vous rencontrez un problème spécifique
- Pratiquez les commandes dans un dépôt de test pour vous familiariser
Pour vous entraîner sans risque, créez un dépôt de test :
# Créer un dossier de test
mkdir git-test-depannage
cd git-test-depannage
# Initialiser Git
git init
# Créer quelques commits de test
echo "Fichier 1" > fichier1.txt
git add fichier1.txt
git commit -m "Premier commit"
echo "Fichier 2" > fichier2.txt
git add fichier2.txt
git commit -m "Deuxième commit"
echo "Fichier 3" > fichier3.txt
git add fichier3.txt
git commit -m "Troisième commit"Dans ce dépôt, vous pouvez expérimenter librement toutes les techniques de dépannage sans risque de perdre un vrai projet.
Certaines situations nécessitent de demander de l'aide :
- Quand vous avez déjà partagé des modifications (après
git push) et devez récrire l'historique - Quand le dépôt est corrompu (
git fscksignale des erreurs) - Quand vous travaillez sur un projet d'équipe et n'êtes pas sûr de l'impact de vos actions
Ressources d'aide :
- Votre équipe ou vos collègues
- Stack Overflow avec le tag "git"
- La documentation officielle Git : https://git-scm.com/doc
- Les communautés Git sur Discord ou Reddit
N'ayez pas honte de demander de l'aide ! Même les développeurs expérimentés consultent régulièrement la documentation et posent des questions.
Avant d'aborder les solutions spécifiques, voici les commandes que vous utiliserez constamment pour diagnostiquer les problèmes :
# Voir l'état actuel (commande la plus importante !)
git status
# Voir l'historique récent
git log --oneline -10
# Voir l'historique de tous vos mouvements
git reflog
# Voir les différences non commitées
git diff
# Voir ce qui est dans le staging area
git diff --cached
# Lister toutes les branches
git branch -a
# Voir les dépôts distants
git remote -v
# Vérifier l'intégrité du dépôt
git fsckMémorisez au moins git status et git reflog : ces deux commandes vous sauveront dans la majorité des situations.
Chaque section de ce module suit la même structure :
- Description du problème : Qu'est-ce qui ne va pas ?
- Causes : Pourquoi ce problème se produit-il ?
- Symptômes : Comment reconnaître ce problème ?
- Solutions : Comment le résoudre, étape par étape
- Prévention : Comment éviter ce problème à l'avenir
Cette approche vous permet de comprendre non seulement comment résoudre un problème, mais aussi pourquoi il se produit et comment l'éviter.
Git a été conçu par Linus Torvalds pour gérer le développement du noyau Linux, un projet critique impliquant des milliers de développeurs. La robustesse et la récupérabilité étaient donc des priorités absolues.
Résultat : Git est incroyablement résilient. Il conserve presque tout, maintient plusieurs couches de sécurité, et offre de nombreux mécanismes de récupération.
Citation de Linus Torvalds :
"Les seuls vrais problèmes sont les choses que vous n'avez jamais commitées. Tout ce qui est commité peut être récupéré."
Cette philosophie devrait vous rassurer : tant que vous avez fait au moins un git add ou un git commit, vos données sont probablement récupérables.
- Git est votre ami : Il essaie de protéger vos données
- Les erreurs sont normales : Elles font partie de l'apprentissage
- Presque tout est récupérable : Grâce au reflog et au garbage collection
- Lisez les messages : Git communique clairement ce qui ne va pas
- Expérimentez : C'est la meilleure façon d'apprendre
- Créez des sauvegardes : Une branche ne coûte rien
- Ne paniquez pas : Respirez, consultez ce guide, et résolvez le problème étape par étape
Maintenant que vous avez le bon état d'esprit et comprenez les principes fondamentaux, vous êtes prêt à affronter n'importe quel problème Git !
Les sections suivantes vous guideront à travers les situations problématiques les plus courantes, avec des solutions détaillées et testées. Rappelez-vous : chaque problème que vous résolvez vous rend plus compétent et plus confiant avec Git.
Commençons par le premier problème courant : le mystérieux "detached HEAD"...