Aller au contenu
Développement medium

Consulter l'historique Git avec git log

14 min de lecture

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.

  • 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

La commande git log affiche la liste des commits, du plus récent au plus ancien :

Fenêtre de terminal
git log

Sortie 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 a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
Author: Stéphane ROBERT <stephane@example.com>
Date: Fri Mar 28 10:15:00 2026 +0100
Création de la structure du projet
commit 1f2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d
Author: Stéphane ROBERT <stephane@example.com>
Date: Thu Mar 27 16:00:00 2026 +0100
Initial commit

Chaque 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.

L'option la plus utilisée au quotidien. Chaque commit tient sur une ligne :

Fenêtre de terminal
git log --oneline

Sortie attendue :

3f7a2b1 (HEAD -> main) Ajout de la page de contact
a1b2c3d Création de la structure du projet
1f2d3e4 Initial commit

Le 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.

Pour visualiser les branches et les merges dans le terminal :

Fenêtre de terminal
git log --oneline --graph --all --decorate

Sortie 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 commit

Les lignes |, \ et / dessinent les branches. L'étoile * marque chaque commit. C'est l'équivalent d'un outil graphique, directement dans votre terminal.

Pour un contrôle total sur l'affichage :

Fenêtre de terminal
git log --pretty=format:"%h %an %ar %s"

Sortie attendue :

3f7a2b1 Stéphane ROBERT 2 hours ago Ajout de la page de contact
a1b2c3d Stéphane ROBERT 6 hours ago Création de la structure du projet
1f2d3e4 Stéphane ROBERT 1 day ago Initial commit

Le 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 :

PlaceholderSignificationExemple
%HSHA complet3f7a2b1c8e9d...
%hSHA abrégé3f7a2b1
%anNom de l'auteurStéphane ROBERT
%aeEmail de l'auteurstephane@example.com
%arDate relative2 hours ago
%aiDate ISO (avec fuseau)2026-03-28 14:30:00 +0100
%sMessage (première ligne)Ajout de la page de contact
%dNoms de ref (branches, tags)(HEAD -> main)

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.

Fenêtre de terminal
git log --stat --oneline

Sortie 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 (-).

Pour afficher le diff complet de chaque commit :

Fenêtre de terminal
git log -p -1

L'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).

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.

Fenêtre de terminal
git log -5 # Les 5 derniers commits
git log --oneline -10 # Les 10 derniers, format compact
Fenêtre de terminal
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 :

Fenêtre de terminal
git log --author="alice\|bob" # Commits d'Alice OU Bob

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.

Fenêtre de terminal
git log --since="2026-03-01" # Depuis le 1er mars
git log --until="2026-03-15" # Jusqu'au 15 mars
git log --since="2 weeks ago" # 2 dernières semaines
git log --since="2026-03-01" --until="2026-03-15" # Période précise

Pour voir uniquement les commits qui ont modifié un fichier précis :

Fenêtre de terminal
git log -- style.css
git 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.

Fenêtre de terminal
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.

Pour trouver le commit qui a ajouté ou supprimé un mot dans le code :

Fenêtre de terminal
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.

Fenêtre de terminal
git log -S "API_KEY" --oneline

Les filtres se combinent naturellement :

Fenêtre de terminal
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/.

Pour voir le contenu détaillé d'un commit spécifique :

Fenêtre de terminal
git show 3f7a2b1

Sortie attendue :

commit 3f7a2b1c8e9d4f5a6b7c8d9e0f1a2b3c4d5e6f7a
Author: 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.html
new file mode 100644
index 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 :

Fenêtre de terminal
git show --stat 3f7a2b1

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.

BesoinCommande
Historique de basegit log
Compact (1 ligne/commit)git log --oneline
Avec graphe de branchesgit log --oneline --graph --all
Fichiers modifiés par commitgit log --stat
Diff completgit log -p
Par auteurgit log --author="nom"
Par dategit log --since="date" --until="date"
Par fichiergit log -- chemin/fichier
Par messagegit log --grep="mot"
Par contenu de codegit log -S "code"
Détail d'un commitgit show SHA

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ômeCause probableSolution
git log ne montre rienAucun commit dans le dépôtVérifiez avec git status puis créez un premier commit
La sortie défile sans finPager actif (normal)Appuyez sur q pour quitter
git log --all ne montre pas les branches distantesBranches pas encore récupéréesgit 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ésAjoutez --pickaxe-regex, ou utilisez git log -G "motif" qui prend une expression régulière
--grep ne trouve pas un message pourtant présentRecherche sensible à la casseAjoutez -i : git log --grep="contact" -i
--author ne trouve personneLe nom ne correspond pas exactementEssayez avec un fragment : --author="début du nom"
  • git log --oneline est votre vue quotidienne de l'historique
  • git log --graph --all visualise les branches et les merges
  • Filtrez par auteur (--author), date (--since/--until), fichier (-- chemin) ou contenu (-S "code")
  • git show SHA inspecte le contenu détaillé d'un commit
  • Combinez les filtres pour des recherches précises
  • Créez un alias git lg pour le graphe quotidien

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn