Ce guide vous apprend à explorer l'historique de vos commits avec
git log. Vous irez bien au-delà du simple listing : filtrer par
auteur, par date, par fichier, rechercher un mot dans les modifications,
et formater la sortie pour la rendre lisible. C'est une compétence
essentielle pour comprendre l'évolution d'un projet et retrouver
l'origine d'un changement.
Prérequis : un dépôt avec quelques commits.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »git log: afficher l'historique des commits- Options de formatage :
--oneline,--graph,--pretty - Filtres : par auteur, date, fichier, nombre de commits
- Recherche : trouver un commit par son contenu ou son message
git show: inspecter le contenu détaillé d'un commit
L'historique de base
Section intitulée « L'historique de base »La commande git log affiche la liste des commits, du plus récent au
plus ancien :
git logSortie attendue :
commit 3f7a2b1c8e9d4f5a6b7c8d9e0f1a2b3c4d5e6f7a (HEAD -> main)Author: Stéphane ROBERT <stephane@example.com>Date: Fri Mar 28 14:30:00 2026 +0100
Ajout de la page de contact
commit a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0Author: Stéphane ROBERT <stephane@example.com>Date: Fri Mar 28 10:15:00 2026 +0100
Création de la structure du projet
commit 1f2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0dAuthor: Stéphane ROBERT <stephane@example.com>Date: Thu Mar 27 16:00:00 2026 +0100
Initial commitChaque commit affiche son SHA complet, l'auteur, la date et le message.
Sur un projet avec beaucoup de commits, cette sortie défile. Appuyez
sur q pour quitter le pager.
Formater la sortie
Section intitulée « Formater la sortie »Résumé compact avec --oneline
Section intitulée « Résumé compact avec --oneline »L'option la plus utilisée au quotidien. Chaque commit tient sur une ligne :
git log --onelineSortie attendue :
3f7a2b1 (HEAD -> main) Ajout de la page de contacta1b2c3d Création de la structure du projet1f2d3e4 Initial commitLe SHA est abrégé automatiquement. La longueur n'est pas fixe : Git
choisit le nombre de caractères nécessaire pour que l'identifiant reste
unique dans votre dépôt, ce que pilote le réglage core.abbrev
dont la valeur par défaut est auto. Sur un dépôt qui vient de naître,
vous verrez 7 caractères ; sur un dépôt de plusieurs milliers de
commits, Git passe à 8 ou plus de lui-même. Ne codez donc jamais « 7 »
en dur dans un script qui compare des SHA.
Graphe des branches avec --graph
Section intitulée « Graphe des branches avec --graph »Pour visualiser les branches et les merges dans le terminal :
git log --oneline --graph --all --decorateSortie attendue (projet avec des branches) :
* e5f6a7b (HEAD -> main) Merge branch 'feature/contact'|\| * d4c3b2a (feature/contact) Ajout du formulaire de contact| * c3b2a1f Styles du formulaire|/* a1b2c3d Création de la structure du projet* 1f2d3e4 Initial commitLes lignes |, \ et / dessinent les branches. L'étoile * marque
chaque commit. C'est l'équivalent d'un outil graphique, directement
dans votre terminal.
Format personnalisé avec --pretty
Section intitulée « Format personnalisé avec --pretty »Pour un contrôle total sur l'affichage :
git log --pretty=format:"%h %an %ar %s"Sortie attendue :
3f7a2b1 Stéphane ROBERT 2 hours ago Ajout de la page de contacta1b2c3d Stéphane ROBERT 6 hours ago Création de la structure du projet1f2d3e4 Stéphane ROBERT 1 day ago Initial commitLe tableau ci-dessous liste les substitutions les plus utiles. Une
distinction revient sans arrêt et vaut d'être fixée tout de suite : le
préfixe a désigne l'auteur, celui qui a écrit le changement,
tandis que le préfixe c désigne le committer, celui qui a créé
l'objet commit. Sur un historique ordinaire les deux sont identiques,
mais un rebase ou l'application d'un patch envoyé par un tiers les
sépare. Si vous cherchez « qui a fait ça », prenez %an ; si vous
cherchez « quand est-ce arrivé dans cette branche », prenez %cd.
Les principaux placeholders :
| Placeholder | Signification | Exemple |
|---|---|---|
%H | SHA complet | 3f7a2b1c8e9d... |
%h | SHA abrégé | 3f7a2b1 |
%an | Nom de l'auteur | Stéphane ROBERT |
%ae | Email de l'auteur | stephane@example.com |
%ar | Date relative | 2 hours ago |
%ai | Date ISO (avec fuseau) | 2026-03-28 14:30:00 +0100 |
%s | Message (première ligne) | Ajout de la page de contact |
%d | Noms de ref (branches, tags) | (HEAD -> main) |
Voir les fichiers modifiés avec --stat
Section intitulée « Voir les fichiers modifiés avec --stat »Entre le message de commit, souvent vague, et le diff complet, souvent
illisible, --stat occupe le juste milieu : il donne la surface de
chaque commit. C'est ce qu'on regarde pour répondre à « ce commit
a-t-il touché autre chose que ce qu'annonce son message ». Un commit
intitulé « correction de typo » qui déclare 400 lignes modifiées dans
12 fichiers mérite une inspection.
git log --stat --onelineSortie attendue :
3f7a2b1 Ajout de la page de contact contact.html | 25 +++++++++++++++++++++++++ style.css | 8 ++++++++ 2 files changed, 33 insertions(+)Le --stat affiche la liste des fichiers modifiés avec le nombre de
lignes ajoutées (+) et supprimées (-).
Voir les modifications complètes avec -p
Section intitulée « Voir les modifications complètes avec -p »Pour afficher le diff complet de chaque commit :
git log -p -1L'option -1 limite à un seul commit. Sans cette limite, git log -p
affiche le diff de chaque commit (très verbeux sur un long historique).
Filtrer l'historique
Section intitulée « Filtrer l'historique »Limiter le nombre de commits
Section intitulée « Limiter le nombre de commits »Le nombre s'écrit directement collé au tiret, sans nom d'option. Ce
filtre s'applique après tous les autres : git log --author="Alice" -5 renvoie les 5 derniers commits d'Alice, pas les commits d'Alice
parmi les 5 derniers du dépôt. La distinction change complètement le
résultat sur un dépôt à plusieurs contributeurs.
git log -5 # Les 5 derniers commitsgit log --oneline -10 # Les 10 derniers, format compactFiltrer par auteur
Section intitulée « Filtrer par auteur »git log --author="Stéphane"Git cherche le pattern dans le nom et l'email de l'auteur. Vous pouvez utiliser des expressions régulières :
git log --author="alice\|bob" # Commits d'Alice OU BobFiltrer par date
Section intitulée « Filtrer par date »Ces options acceptent aussi bien une date absolue qu'une expression en
anglais du type 2 weeks ago, yesterday ou last monday. Deux
précisions évitent des surprises. Les deux bornes sont inclusives,
un commit horodaté exactement sur la date passée en argument sort donc
bien dans les résultats. Surtout, le filtre porte sur la date du
committer, pas sur celle de l'auteur : un commit écrit en janvier
puis rejoué par un rebase en juin ressort avec --since="2026-05-01"
et reste invisible si vous cherchez dans la fenêtre de janvier.
git log --since="2026-03-01" # Depuis le 1er marsgit log --until="2026-03-15" # Jusqu'au 15 marsgit log --since="2 weeks ago" # 2 dernières semainesgit log --since="2026-03-01" --until="2026-03-15" # Période préciseFiltrer par fichier
Section intitulée « Filtrer par fichier »Pour voir uniquement les commits qui ont modifié un fichier précis :
git log -- style.cssgit log --oneline -- src/auth/Le -- sépare les options de la liste de chemins. Il est optionnel
quand il n'y a pas d'ambiguïté, mais c'est une bonne habitude de
toujours le mettre.
Filtrer par message
Section intitulée « Filtrer par message »git log --grep="contact"Cherche le motif « contact » dans les messages de commit. Le motif est
traité comme une expression régulière, pas comme un texte littéral :
un point ou une parenthèse dans votre recherche prendra donc sa valeur
de métacaractère. La recherche est sensible à la casse par défaut,
ajoutez -i pour l'ignorer. Enfin, plusieurs --grep se combinent
avec un OU logique, sauf si vous ajoutez --all-match pour exiger
que toutes les conditions soient remplies.
Filtrer par contenu modifié
Section intitulée « Filtrer par contenu modifié »Pour trouver le commit qui a ajouté ou supprimé un mot dans le code :
git log -S "function login"L'option -S, surnommée pickaxe, retrouve le moment où une
fonction, une variable ou une clé de configuration a été introduite ou
retirée. Son critère exact mérite d'être connu : Git ne cherche pas les
commits qui mentionnent la chaîne, mais ceux où le nombre
d'occurrences a changé. Un commit qui déplace une ligne sans la
modifier n'apparaît donc pas, ce qui est précisément l'intérêt de
l'option. La chaîne est traitée littéralement ; pour une expression
régulière, utilisez -G à la place.
git log -S "API_KEY" --onelineCombiner les filtres
Section intitulée « Combiner les filtres »Les filtres se combinent naturellement :
git log --author="Alice" --since="2026-03-01" --oneline -- src/Cette commande affiche les commits d'Alice depuis le 1er mars qui ont
touché des fichiers dans le dossier src/.
Inspecter un commit avec git show
Section intitulée « Inspecter un commit avec git show »Pour voir le contenu détaillé d'un commit spécifique :
git show 3f7a2b1Sortie attendue :
commit 3f7a2b1c8e9d4f5a6b7c8d9e0f1a2b3c4d5e6f7aAuthor: Stéphane ROBERT <stephane@example.com>Date: Fri Mar 28 14:30:00 2026 +0100
Ajout de la page de contact
diff --git a/contact.html b/contact.htmlnew file mode 100644index 0000000..1234567--- /dev/null+++ b/contact.html@@ -0,0 +1,25 @@+<!DOCTYPE html>+<html>+...git show affiche les métadonnées du commit et le diff complet des
modifications. Vous pouvez utiliser un SHA abrégé (7 caractères
suffisent).
Pour voir uniquement les noms de fichiers modifiés :
git show --stat 3f7a2b1Résumé des commandes
Section intitulée « Résumé des commandes »Ce tableau se lit par la colonne de gauche : partez du besoin, pas de
l'option. C'est le bon réflexe avec git log, dont les options sont
nombreuses mais se combinent librement dans une même ligne de commande.
Les cinq premières lignes concernent la mise en forme de la sortie,
les cinq suivantes la sélection des commits affichés. Un usage
courant mêle les deux familles, comme un --oneline de mise en forme
avec un --author de sélection.
| Besoin | Commande |
|---|---|
| Historique de base | git log |
| Compact (1 ligne/commit) | git log --oneline |
| Avec graphe de branches | git log --oneline --graph --all |
| Fichiers modifiés par commit | git log --stat |
| Diff complet | git log -p |
| Par auteur | git log --author="nom" |
| Par date | git log --since="date" --until="date" |
| Par fichier | git log -- chemin/fichier |
| Par message | git log --grep="mot" |
| Par contenu de code | git log -S "code" |
| Détail d'un commit | git show SHA |
Dépannage : problèmes courants
Section intitulée « Dépannage : problèmes courants »Presque tous les « git log ne trouve rien » se ramènent à trois
causes : la commande cherche là où vous ne croyez pas, le motif n'est
pas interprété comme vous le pensez, ou l'historique local n'est pas à
jour. Avant de conclure qu'un commit a disparu, relancez la même
recherche sans aucun filtre : si le commit apparaît, c'est bien un
filtre qui l'écarte, et le tableau ci-dessous vous dira lequel.
| Symptôme | Cause probable | Solution |
|---|---|---|
git log ne montre rien | Aucun commit dans le dépôt | Vérifiez avec git status puis créez un premier commit |
| La sortie défile sans fin | Pager actif (normal) | Appuyez sur q pour quitter |
git log --all ne montre pas les branches distantes | Branches pas encore récupérées | git fetch --all puis relancez |
git log -S ne trouve pas le résultat attendu | -S cherche une chaîne littérale, les métacaractères ne sont pas interprétés | Ajoutez --pickaxe-regex, ou utilisez git log -G "motif" qui prend une expression régulière |
--grep ne trouve pas un message pourtant présent | Recherche sensible à la casse | Ajoutez -i : git log --grep="contact" -i |
--author ne trouve personne | Le nom ne correspond pas exactement | Essayez avec un fragment : --author="début du nom" |
À retenir
Section intitulée « À retenir »git log --onelineest votre vue quotidienne de l'historiquegit log --graph --allvisualise les branches et les merges- Filtrez par auteur (
--author), date (--since/--until), fichier (-- chemin) ou contenu (-S "code") git show SHAinspecte le contenu détaillé d'un commit- Combinez les filtres pour des recherches précises
- Créez un alias
git lgpour le graphe quotidien