Choisir un commit par son identifiant
git show affiche un commit : son message, son auteur, sa date et les changements qu’il apporte. La documentation de git show précise que, pour un commit, il montre le message de log et le diff textuel, et que l’objet vaut HEAD par défaut. Un simple git show relit donc votre dernier commit.
Pour essayer chaque cas, créez un dépôt jetable. C’est celui du guide git log –graph, et git log --oneline --graph --decorate --all en liste les identifiants. Les dates sont fixées, donc ces commandes redonnent les identifiants ci-dessous ; si vous changez quoi que ce soit, les vôtres seront différents. Les sorties viennent de Git 2.23, en anglais, et sont identiques avec Git 2.30 et 2.54.
mkdir demo-log && cd demo-log
git init
git config user.name "Example Dev"
git config user.email [email protected]
commit_at() { git add . && GIT_AUTHOR_DATE="$1" GIT_COMMITTER_DATE="$1" git commit -q -m "$2"; }
echo "# Demo" > README.md && commit_at 2026-09-01T10:00:00+0000 "Add README"
git branch -M main
echo "start" > app.txt && commit_at 2026-09-02T10:00:00+0000 "Add app skeleton"
echo "port=8080" > config.txt && commit_at 2026-09-03T10:00:00+0000 "Add default config"
git checkout -b feature
echo "search" >> app.txt && commit_at 2026-09-05T10:00:00+0000 "Add search option"
echo "search ok" > tests.txt && commit_at 2026-09-09T10:00:00+0000 "Add search tests"
git checkout main
git checkout -b docs
echo "# Demo guide" > README.md && echo "TODO" > guide.txt && commit_at 2026-09-06T10:00:00+0000 "Draft user guide"
git checkout main
echo "# Demo app" > README.md && commit_at 2026-09-08T10:00:00+0000 "Rename project title"
echo "port=9000" > config.txt && commit_at 2026-09-10T10:00:00+0000 "Change default port"
GIT_AUTHOR_DATE=2026-09-12T10:00:00+0000 GIT_COMMITTER_DATE=2026-09-12T10:00:00+0000 git merge feature --no-edit -m "Merge branch 'feature'"
Un commit se désigne par un identifiant abrégé, un nom de branche ou une position relative. Comme l’explique gitrevisions, ~ remonte au premier parent et ^2 désigne le second parent d’un merge. Ici, -s masque le diff pour tenir sur trois lignes :
git show -s --oneline docs HEAD~1 HEAD^2
f8fe6dd Draft user guide
d242263 Change default port
c7bfac7 Add search tests
docs est le sommet de cette branche, HEAD~1 le commit qui précède HEAD, et HEAD^2 le second parent du merge situé en HEAD, c’est-à-dire le sommet de feature.
Lire message, auteur et diff
Ouvrez par son identifiant le commit de docs :
git show f8fe6dd
commit f8fe6ddd48803a18e92e75b5084b77b78ef061c1
Author: Example Dev <[email protected]>
Date: Sun Sep 6 10:00:00 2026 +0000
Draft user guide
diff --git a/README.md b/README.md
index 0805455..711fd5a 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# Demo
+# Demo guide
diff --git a/guide.txt b/guide.txt
new file mode 100644
index 0000000..1333ed7
--- /dev/null
+++ b/guide.txt
@@ -0,0 +1 @@
+TODO
L’en-tête donne l’identifiant complet, l’auteur et la date. Le message suit, indenté. Vient ensuite un bloc par fichier : diff --git le nomme, new file mode signale un fichier ajouté, et chaque ligne @@ situe les lignes modifiées. Une ligne - a été supprimée, une ligne + a été ajoutée. Ici, le titre de README.md a changé et guide.txt a été créé.
Pour un résumé, ajoutez --stat :
git show --stat --oneline f8fe6dd
f8fe6dd Draft user guide
README.md | 2 +-
guide.txt | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
git show lit un commit existant. Pour relire le contenu de votre prochain commit, utilisez git diff --staged, comme dans le guide pour vérifier les modifications indexées.
Limiter l’affichage à un fichier
La page de git show ne documente pas de forme avec chemin, mais la commande accepte la même limitation par chemin que git log, dont la syntaxe se termine par [[--] <path>...]. Tout ce qui suit -- est un chemin, et seuls les diffs correspondants restent :
git show f8fe6dd -- guide.txt
commit f8fe6ddd48803a18e92e75b5084b77b78ef061c1
Author: Example Dev <[email protected]>
Date: Sun Sep 6 10:00:00 2026 +0000
Draft user guide
diff --git a/guide.txt b/guide.txt
new file mode 100644
index 0000000..1333ed7
--- /dev/null
+++ b/guide.txt
@@ -0,0 +1 @@
+TODO
L’en-tête et le message restent, README.md a disparu du diff. Le filtre fonctionne aussi avec --stat.
Comprendre le cas d’un commit de merge
Affichez maintenant le merge en HEAD :
git show HEAD
commit e6d515ee0fe2be9bcedf2c17df09d1f89e06c799
Merge: d242263 c7bfac7
Author: Example Dev <[email protected]>
Date: Sat Sep 12 10:00:00 2026 +0000
Merge branch 'feature'
La ligne Merge: liste les deux parents : l’ancien sommet de main, puis le sommet de feature. Il n’y a aucun diff. D’après la documentation, git show présente un merge dans le format produit par git diff-tree --cc. Dans ce format, -c ne liste que les fichiers modifiés par rapport à tous les parents, et --cc omet en plus les blocs où le résultat reprend sans changement la version d’un seul parent. Sans conflit, ce merge n’apporte rien de propre.
Pour voir l’apport du merge, comparez-le à un seul parent. --first-parent calcule le diff par rapport au premier :
git show --first-parent --stat --oneline HEAD
e6d515e Merge branch 'feature'
app.txt | 1 +
tests.txt | 1 +
2 files changed, 2 insertions(+)
-m affiche un diff par parent, chacun étiqueté par from :
git show -m --stat --oneline HEAD
e6d515e (from d242263) Merge branch 'feature'
app.txt | 1 +
tests.txt | 1 +
2 files changed, 2 insertions(+)
e6d515e (from c7bfac7) Merge branch 'feature'
README.md | 2 +-
config.txt | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
Le premier bloc est ce que feature a ajouté à main. Le second est ce que main avait en plus de feature. La documentation actuelle liste aussi --diff-merges=<format>. Git 2.23 la rejette et Git 2.30 n’accepte que off, alors que Git 2.54 accepte tous les formats listés ; ce guide s’en tient donc à --first-parent et -m, qui donnent la même sortie avec les trois versions.
Un diff combiné n’a de contenu que si le merge modifie lui-même quelque chose. Fusionnez docs dans main, dans le même shell pour que commit_at reste défini. Les deux branches ont changé la première ligne de README.md, Git s’arrête sur un conflit et vous écrivez la résolution :
git merge docs
echo "# Demo app guide" > README.md
commit_at 2026-09-14T10:00:00+0000 "Merge branch 'docs'"
git show
commit 642fd7f4e852c5dbd0e645e7e990aa7328f3b368
Merge: e6d515e f8fe6dd
Author: Example Dev <[email protected]>
Date: Mon Sep 14 10:00:00 2026 +0000
Merge branch 'docs'
diff --cc README.md
index 28e9d7d,711fd5a..ff68dd3
--- a/README.md
+++ b/README.md
@@@ -1,1 -1,1 +1,1 @@@
- # Demo app
-# Demo guide
++# Demo app guide
@@@ compte trois @ parce qu’il y a deux parents. Comme l’explique la documentation de git diff, chaque ligne a une colonne de préfixe par parent : un - dans la colonne N signifie que la ligne était dans le parent N mais pas dans le résultat, et un + que le résultat contient une ligne que ce parent n’avait pas. Ainsi, # Demo app venait de main, # Demo guide de docs, et # Demo app guide est nouveau dans le merge. Pour le cadre général, voyez merge ou rebase.
Dans GitMini, un clic sur un commit affiche les mêmes détails dans le panneau de droite : SHA, auteur, parents cliquables et fichiers modifiés avec leurs lignes ajoutées et supprimées.

Pour un commit de merge, une liste déroulante placée à côté des parents, nommée « Compare to parent » pour les lecteurs d’écran, liste « Parent 1 » et « Parent 2 » avec leurs identifiants, par exemple « Parent 1 — d242263 ». La liste de fichiers est calculée par rapport à un seul parent à la fois, le premier par défaut, comme --first-parent. Choisissez le second pour voir l’autre côté, comme le second bloc de -m.
Sources
- Git : git-show, consulté le 4 octobre 2026.
- Git : git-log, consulté le 4 octobre 2026.
- Git : git-diff-tree, consulté le 4 octobre 2026.
- Git : git-diff, consulté le 4 octobre 2026.
- Git : gitrevisions, consulté le 4 octobre 2026.
- README du produit GitMini, consulté le 4 octobre 2026.