Erreurs courantes Git et comment les corriger
Découvrez comment résoudre les erreurs Git les plus courantes : conflicts de merge, resets ratés, problèmes de branches. Guide avec exemples concrets et solutions étape par étape.
Sommaire
- Introduction
- Les erreurs de merge et de conflit
- Les erreurs de reset et revert
- Les problèmes de branches
- Les erreurs de configuration
- Outils et bonnes pratiques pour éviter les erreurs
- FAQ
Introduction
Git est un outil puissant mais parfois déroutant. Méme les développeurs expérimentés se retrouvent parfois bloqués par des erreurs qui semblent insurmontables. La bonne nouvelle ? La plupart de ces erreurs ont des solutions connues et reproductibles.
Dans cet article, nous allons passer en revue les erreurs Git les plus fréquentes et voir ensemble comment les résoudre pas à pas. Chaque situation sera accompagnée d’exemples concrets et de commandes à exécuter.
Les erreurs de merge et de conflit
Conflit de merge classique
Le problème : Vous tentez de merger une branche et Git vous affiche :
CONFLICT (content): Merge conflict in fichier.js
Automatic merge failed; fix conflicts and then commit the result.
La solution :
- Identifiez les fichiers en conflit :
git status
- Ouvrez le fichier et cherchez les marqueurs de conflit :
<<<<<<< HEAD
// Votre version
function calculer() {
return a + b;
}
=======
// Version de la branche à merger
function calculer() {
return a * b;
}
>>>>>>> feature-branch
- Résolvez le conflit en gardant le bon code :
function calculer() {
return a + b; // Ou la logique que vous voulez garder
}
- Ajoutez le fichier résolu et terminez le merge :
git add fichier.js
git commit -m "Résolution du conflit de merge"
Merge accidentel
Le problème : Vous avez mergé la mauvaise branche ou au mauvais moment.
La solution :
# Annuler le dernier merge (si pas encore pushé)
git reset --hard HEAD~1
# Ou utiliser reflog pour trouver l'état d'avant le merge
git reflog
git reset --hard HEAD@{2} # Remplacez {2} par l'index correct
Les erreurs de reset et revert
Reset trop agressif
Le problème : Vous avez fait un git reset --hard et perdu des modifications importantes.
La solution :
- Utilisez reflog pour retrouver vos commits :
git reflog
- Récupérez le commit perdu :
git reset --hard commit_hash # Hash trouvé dans reflog
- Pour les fichiers non commitités, vérifiez les stash :
git stash list
git stash apply stash@{0} # Si vous aviez stashé
Commit perdu aprés un reset
Le problème : Vous ne retrouvez plus un commit aprés avoir fait des manipulations.
La solution :
# Voir l'historique complet des actions
git reflog --all
# Récupérer un commit spécifique
git cherry-pick commit_hash
# Ou créer une nouvelle branche à partir de ce commit
git checkout -b recovery-branch commit_hash
Les problèmes de branches
Branche supprimée par erreur
Le problème : Vous avez supprimé une branche locale ou remote par erreur.
La solution pour une branche locale :
# Trouver le dernier commit de la branche
git reflog | grep "checkout:"
# Recréer la branche
git checkout -b ma-branche-recuperee commit_hash
La solution pour une branche remote :
# Si la branche existe encore localement
git push origin ma-branche
# Sinon, récupérez-la depuis un autre développeur ou backup
git fetch origin
git checkout -b ma-branche origin/ma-branche
Push refusé par le remote
Le problème :
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'origin'
La solution :
# Récupérer les derniéres modifications
git fetch origin
# Faire un rebase ou un merge
git rebase origin/master # Recommandé pour un historique propre
# ou
git merge origin/master # Plus simple mais crée un commit de merge
# Puis pusher
git push origin master
Les erreurs de configuration
Mauvaise configuration d’utilisateur
Le problème : Vos commits apparaissent avec le mauvais nom ou email.
La solution :
# Vérifier la configuration actuelle
git config --list
# Corriger globalement
git config --global user.name "Votre Nom"
git config --global user.email "[email protected]"
# Ou pour un projet specifique (sans --global)
git config user.name "Nom pour ce projet"
git config user.email "[email protected]"
# Modifier l'auteur du dernier commit
git commit --amend --author="Nouveau Nom <[email protected]>"
Problèmes de remote
Le problème : Le remote pointe vers une mauvaise URL ou n’existe plus.
La solution :
# Vérifier les remotes actuels
git remote -v
# Changer l'URL d'un remote
git remote set-url origin https://nouvelle-url.git
# Ajouter un nouveau remote
git remote add upstream https://url-du-fork-original.git
# Supprimer un remote
git remote remove ancien-nom
Outils et bonnes pratiques pour éviter les erreurs
Outils recommandés
- Interface graphique : GitKraken, Sourcetree, ou VS Code avec GitLens
- Alias Git utiles :
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
Bonnes pratiques
- Commitez souvent : De petits commits sont plus faciles à gérer
- Utilisez des messages descriptifs :
feat: add user authenticationplutét quefix - Testez avant de pusher :
git statusetgit log --onelinesont vos amis - Travaillez sur des branches : Ne travaillez jamais directement sur
main/master - Backupez réguliérement : Pushez vos branches méme en cours de développement
FAQ
Comment annuler le dernier commit sans perdre les modifications ?
git reset --soft HEAD~1
Vos modifications restent dans l’index (staged).
J’ai committé sur la mauvaise branche, comment faire ?
# Sauvegarder le commit
git log --oneline # Noter le hash du commit
# Revenir au commit précédent
git reset --hard HEAD~1
# Aller sur la bonne branche
git checkout bonne-branche
# Récupérer le commit
git cherry-pick hash_du_commit
Comment voir ce qui va être mergé avant de le faire ?
git diff master..feature-branch
# ou
git log master..feature-branch --oneline
Git me demande toujours mes identifiants, pourquoi ?
Configurez l’authentification :
# Avec SSH (recommandé)
git remote set-url origin [email protected]:user/repo.git
# Ou avec credential helper
git config --global credential.helper store
Comment récupérer un fichier d’une version précédente ?
# Récupérer un fichier du dernier commit
git checkout HEAD -- nom-du-fichier
# Récupérer d'un commit spécifique
git checkout commit_hash -- nom-du-fichier
Git peut sembler intimidant au début, mais avec ces solutions en poche, vous devriez pouvoir résoudre la plupart des situations délicates. N’hésitez pas à expérimenter dans un dépét test pour vous familiariser avec ces commandes !