Explorer l'historique avec git log
Module 01 45 min
Objectifs de la section
- Parcourir l'historique des commits avec différents formats
- Filtrer l'historique par auteur, date, fichier ou message
- Visualiser les branches graphiquement
- Rechercher des changements spécifiques dans l'historique
git log de base
git log
Sortie :
commit d5a1b4c2e3f4a5b6c7d8e9f0a1b2c3 (HEAD -> main)
Author: Alice Dupont <alice@exemple.com>
Date: Wed Mar 18 14:30:00 2026 +0000
feat(auth): ajouter l'endpoint de connexion utilisateur
commit c2e8f3a1b2c3d4e5f6a7b8c9d0e1f2 (origin/main)
Author: Alice Dupont <alice@exemple.com>
Date: Tue Mar 17 10:15:00 2026 +0000
fix(utils): corriger la normalisation d'email
Formats essentiels de git log
# Compact : une ligne par commit
git log --oneline
# Avec le graphe des branches/tags
git log --oneline --graph
# Graphe complet avec toutes les branches
git log --oneline --graph --decorate --all
# Détaillé : statistiques (fichiers modifiés, insertions, suppressions)
git log --stat
# Détaillé : diff complet de chaque commit
git log -p # ou --patch
# Afficher uniquement les N derniers commits
git log -5
git log -10 --oneline
Exemple de sortie de --oneline --graph --all
* d5a1b4c (HEAD -> main) feat: ajout tableau de bord
* c2e8f3a fix: corriger la validation d'email
|| * b7c9d1e (feature/login) feat: UI du formulaire de connexion
|| * a3f4b2c feat: démarrer la fonctionnalité de connexion
||/
* e1f2a3b Commit initial
Filtrer l'historique
Par auteur
git log --author="Alice"
git log --author="alice@exemple.com"
Par date
# Depuis une date spécifique
git log --since="2026-01-01"
git log --after="2 weeks ago"
git log --after="yesterday"
# Avant une date spécifique
git log --until="2026-03-01"
git log --before="1 month ago"
# Entre deux dates
git log --after="2026-01-01" --before="2026-03-01"
Par message de commit
# Rechercher un mot-clé dans les messages
git log --grep="fix"
git log --grep="feat(auth)"
# Recherche insensible à la casse
git log --grep="login" -i
Par fichier
# Seulement les commits qui ont touché un fichier spécifique
git log -- README.md
git log -- src/auth/login.py
# Seulement les commits qui ont touché un dossier
git log -- src/
# Commits qui ont touché un fichier, même après renommage
git log --follow -- src/auth/login.py
Par contenu (Pickaxe)
# Commits qui ont AJOUTÉ ou SUPPRIMÉ une chaîne spécifique
git log -S "password" # Ajout/suppression du mot "password"
git log -S "def login" # Ajout/suppression de la fonction login
# Commits où le contenu a CHANGÉ (regex)
git log -G "password.*hash"
Formatage de la sortie
Format personnalisé
git log --format="%h %an %ar %s"
# %h = hash court
# %H = hash complet
# %an = nom de l'auteur
# %ae = email de l'auteur
# %ar = date relative ("il y a 3 jours")
# %ad = date absolue
# %s = sujet du commit (première ligne)
# %b = corps
# %d = refs (branches, tags)
# Exemple de sortie :
# d5a1b4c Alice Dupont il y a 2 jours feat: ajout tableau de bord
Formats utiles
# Compact avec date relative
git log --format="%C(yellow)%h%C(reset) %C(blue)%ar%C(reset) %s %C(green)(%an)%C(reset)"
# Exporter vers un fichier pour documentation
git log --format="%h|%an|%ar|%s" > historique-commits.csv
Naviguer dans l'historique
git show — Détails d'un commit
# Afficher les détails du dernier commit
git show
# Afficher un commit spécifique
git show d5a1b4c
git show HEAD # Dernier commit
git show HEAD~1 # Avant-dernier commit
git show HEAD~3 # 4ème commit avant HEAD
# Afficher un fichier spécifique dans un commit
git show d5a1b4c:src/main.py
# Afficher seulement les fichiers modifiés (sans diff)
git show --stat d5a1b4c
git show --name-only d5a1b4c
Références relatives
| Référence | Signification |
|---|---|
HEAD | Commit actuel (dernier sur la branche actuelle) |
HEAD~1 ou HEAD~ | Commit parent (1 avant HEAD) |
HEAD~3 | 3 commits avant HEAD |
HEAD^ | Premier parent de HEAD (identique à HEAD~1) |
HEAD^2 | Deuxième parent de HEAD (pour les merges) |
main~5 | 5 commits avant la pointe de main |
abc1234 | Un commit spécifique par son hash |
v1.0 | Un tag |
git blame — Qui a changé quoi ?
# Afficher qui a modifié chaque ligne d'un fichier en dernier
git blame README.md
# Ignorer les changements d'espaces
git blame -w README.md
# Afficher seulement des lignes spécifiques
git blame -L 10,20 src/main.py
# Afficher à un commit spécifique
git blame d5a1b4c -- src/main.py
Sortie :
d5a1b4c (Alice 2026-03-18 14:30 +0000 1) # Mon Projet
c2e8f3a (Bob 2026-03-10 09:15 +0000 2)
c2e8f3a (Bob 2026-03-10 09:15 +0000 3) ## Installation
a3f4b2c (Alice 2026-03-01 08:00 +0000 4)
git blame ne sert pas à blâmer !
Malgré son nom, git blame est un outil de collaboration, pas pour accuser les collègues. Utilisez-le pour comprendre pourquoi du code a été écrit d'une certaine façon, qui interroger pour du contexte, et localiser le commit qui a introduit un changement.
Recherche dans l'historique
# Quand une fonction a-t-elle été ajoutée ?
git log -S "def authentifier" --oneline
# Quand une variable a-t-elle été renommée ?
git log -S "user_id" --oneline -- src/
# Voir le changement exact
git log -p -S "def authentifier" --oneline
Alias pratiques pour le log
Ajoutez-les à votre ~/.gitconfig :
git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.ll "log --oneline -15"
git config --global alias.lp "log -p -1"
git config --global alias.ls "log --stat -5"
git config --global alias.lf "log --format='%C(yellow)%h%C(reset) %C(blue)%ar%C(reset) %s %C(green)(%an)%C(reset)'"
Tableau récapitulatif
| Commande | Description |
|---|---|
git log | Historique complet |
git log --oneline | Historique compact |
git log --graph --all | Graphe visuel de toutes les branches |
git log --stat | Historique avec statistiques |
git log -p | Historique avec diffs |
git log --author="X" | Filtrer par auteur |
git log --since="date" | Filtrer par date |
git log --grep="texte" | Filtrer par message |
git log -S "code" | Rechercher par contenu |
git log -- fichier | Commits affectant un fichier |
git show <commit> | Détails d'un commit |
git blame <fichier> | Qui a modifié chaque ligne |