Cet article vous apprend à utiliser les logs Git pour identifier et corriger les erreurs courantes sur GitHub. Nous aborderons les commandes essentielles, les scénarios typiques et des techniques avancées d'analyse.
Commandes de base pour consulter les logs
| Commande | Description | Cas d'usage |
|---|---|---|
git log --oneline |
Affiche un historique compact des commits | Parcourir rapidement l'historique |
git log -p -n 3 |
Montre le détail des 3 derniers commits | Identifier un commit problématique |
git status -sb |
État succinct du répertoire de travail | Vérifier avant un commit ou après une erreur |
git reflog show |
Journal des références locales | Récupérer un commit ou une branche supprimée |
git log --graph --decorate |
Visualisation grapihque des branches | Analyser les problèmes de fusion |
Scénarios d'erreurs fréquentes et solutions
1. Conflit de fusion (Merge Conflict)
Problème : Impossible de fusionner une branche, message "Conflict" dans GitHub ou lors d'un git merge.
Analyse : Le fichier en conflit contient des marqueurs :
<<<<<<< HEAD
Code de la branche courante
=======
Code de la branche à fusionner
>>>>>>> feature/nouvelle-fonction
Solution :
# Voir les fichiers en conflit
git status
# Après avoir modifié le fichier pour résoudre le conflit, marquer comme résolu
git add fichier-en-conflit.txt
# Finaliser la fusion
git commit -m "Correction du conflit : fusion des deux implémentations"
2. Échec de commit
Problème : Après git commit, rien ne se passe ou message "nothing to commit".
Analyse : Utilisez git status pour vérifier l'état de la zone de staging.
Solution :
# Ajouter un fichier modifié à la zone de staging
git add README.md
# Effectuer le commit
git commit -m "Mise à jour du fichier README"
# Vérifier le dernier commit
git log --oneline -n 1
Astuce : Habituez-vous à exécuter git status avant chaque commit. Vous pouvez aussi utiliser git commit -a pour staging automatique des fichiers déjà suivis.
3. Problème de synchronisation de branche
Problème : Le push échoue avec "rejected" car la branche locale est en retard.
Analyse et solusion :
# Récupérer l'état distant
git fetch origin
# Voir les commits locaux manquants
git log --oneline origin/main..main
# Se synchroniser (recommandé pour éviter le force push)
git pull --rebase origin main
# Résoudre les éventuels conflits, puis pousser
git push origin main
Comparaison visuelle : Utilisez git log --left-right --graph origin/main...main pour voir les différences entre les branches.
Techniques avancées d'analyse de logs
Formatage personnalisé des logs
# Afficher le hash, l'auteur, la date et le message
git log --pretty=format:"%h %an %ad %s" --date=short
# Exemple de sortie :
# a7f3bc2 Jean Dupont 2024-05-20 Correction bug connexion
# 2d9e41c Marie Martin 2024-05-19 Ajout page profil
Codes utiles : %h (hash court), %an (auteur), %ad (date), %s (message).
Extension VS Code : GitLens
Bien que cet article ne fournisse pas de liens, nous recommandons GitLens (disponible dans le marketplace VS Code). Ses fonctionnalités incluent :
- Affichage en ligne du dernier commit modifiant chaque ligne de code (blame).
- Visualisation chronologique de l'historique des commits.
- Comparaison graphique des branches et de l'historique des fusions.
Étude de cas : Retrouver un commit introduisant un bug
Supposons que la fonction de connexion ne fonctionne plus. Analysons les logs :
# 1. Rechercher des commits liés
git log --grep="connexion" --oneline
# Sortie :
# a7f3bc2 Correction bug connexion
# 5e6d2c1 Refactorisation du flux d'authentification
# 3b8a1e0 Implémentation de la page de connexion
# 2. Comparer le code avant et après un commit suspect
git diff 5e6d2c1^..5e6d2c1
# 3. Annuler les modifications du commit problématique
git revert 5e6d2c1
# Ceci crée un nouveau commit qui annule les changements de 5e6d2c1
Astuce : La commande git diff hash^..hash affiche les modifications exactes d'un commit (où ^ représente son parent).
Bonnes pratiques et checklist pour les logs
- Avant un commit :
git statuspour vérifier le contenu de l'index,git diff --stagedpour examiner les modifications. - Après un commit :
git log -n 1pour confirmer le message et l'auteur. - Avant un push :
git pull --rebasepour intégrer les derniers changements distants. - Avant une fusion :
git log branche-source --not branche-ciblepour voir les commits à fusionner.
Créez un fichier troubleshooting.md dans votre projet pour documenter les erreurs rencontrées :
## Base de cas d'erreurs
### Type : Conflit de fusion
- **Signe** : Présence de `<<<<<<< HEAD` dans les fichiers
- **Emplacement** : Dans les fichiers du répertoire de travail
- **Solution** : Éditer, marquer avec `git add`, puis commit
### Type : Permission refusée
- **Signe** : Message "permission denied" lors du push
- **Emplacement** : Sortie de la console
- **Solution** : Vérifier l'URL distante avec `git remote -v` et la configuration SSH avec `cat ~/.ssh/id_rsa.pub`
Prochainse étapes
Les techniques présentées couvrent la majorité des problèmes courants. Pour aller plus loin :
- Filtrage avancé :
git log --since="2 weeks ago" --author="Jean"pour des recherches ciblées. - Rebase interactif :
git rebase -i HEAD~5pour modifier l'historique des commits. - Bisect :
git bisectpour localiser précisément un commit responsable d'un bug.