Historique

Afficher l’historique de toutes les branches Git

Utilisez git log --all pour afficher les commits de toutes les branches, pas seulement de la branche courante, et lisez les références locales et origin/.

Sommaire

Pourquoi une branche ne montre pas tout le dépôt

Lancez git log sans argument : Git part de HEAD, puis suit les liens de parenté. La documentation de git log indique qu’il liste les commits accessibles depuis les commits donnés en suivant les parents, et que HEAD est la valeur par défaut. Un commit qui n’existe que sur une autre branche, que votre branche courante n’a jamais fusionnée, n’est pas accessible : il reste invisible. Un git log de toutes les branches demande donc chaque point de départ.

Pour le voir, créez un dépôt jetable. C’est celui du guide git log –graph : passez la préparation si vous l’avez déjà. 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'"

HEAD est sur main, qui a fusionné feature mais n’a jamais reçu docs. Listez l’historique, puis les branches :

git log --oneline --decorate
e6d515e (HEAD -> main) Merge branch 'feature'
d242263 Change default port
c7bfac7 (feature) Add search tests
3dc02d2 Rename project title
b13288d Add search option
ccb94c7 Add default config
9cfbfd0 Add app skeleton
3d7dc15 Add README
git branch -v
  docs    f8fe6dd Draft user guide
  feature c7bfac7 Add search tests
* main    e6d515e Merge branch 'feature'

docs existe et porte un commit, f8fe6dd, que la première commande n’a jamais affiché. Un intervalle montre exactement ce que docs a en plus de main. Selon gitrevisions, main..docs désigne les commits accessibles depuis docs, sans ceux qui sont accessibles depuis main :

git log --oneline main..docs
f8fe6dd Draft user guide

Ajouter –all à git log

--all évite de nommer chaque branche. Associez-le à --graph --oneline --decorate pour voir aussi la forme de l’historique :

git log --all --graph --oneline --decorate
*   e6d515e (HEAD -> main) Merge branch 'feature'
|\
| * c7bfac7 (feature) Add search tests
| * b13288d Add search option
* | d242263 Change default port
* | 3dc02d2 Rename project title
|/
| * f8fe6dd (docs) Draft user guide
|/
* ccb94c7 Add default config
* 9cfbfd0 Add app skeleton
* 3d7dc15 Add README

La documentation définit --all comme le fait de procéder comme si toutes les références de refs/, ainsi que HEAD, étaient listées sur la ligne de commande. Chaque sommet de branche devient un point de départ : f8fe6dd (docs) apparaît donc dans sa propre colonne, qui part de ccb94c7.

Deux options plus étroites existent : --branches part de refs/heads, --remotes de refs/remotes. Une fois une autre branche visible à côté de main, reste à décider comment l’intégrer : choisir entre merge et rebase répond à cette question.

Lire les références locales et distantes

Créez un dépôt nu à partir de la démo, puis clonez-le : le clone a un main local et des références origin/….

cd ..
git clone --bare demo-log demo-remote.git
git clone demo-remote.git demo-clone
cd demo-clone
git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/docs
  remotes/origin/feature
  remotes/origin/main

Seul main existe en local. origin/docs, origin/feature et origin/main sont des branches de suivi à distance (remote-tracking branches). Le glossaire Git les définit comme des références qui suivent les changements d’un autre dépôt, avec un nom qui ressemble typiquement à refs/remotes/<remote>/<branche>. Ici, origin/HEAD est un alias qui pointe vers origin/main. Relancez la première commande :

git log --oneline --decorate
e6d515e (HEAD -> main, origin/main, origin/HEAD) Merge branch 'feature'
d242263 Change default port
c7bfac7 (origin/feature) Add search tests
3dc02d2 Rename project title
b13288d Add search option
ccb94c7 Add default config
9cfbfd0 Add app skeleton
3d7dc15 Add README

main, origin/main et origin/HEAD partagent e6d515e, et origin/feature est sur c7bfac7. Le commit de docs manque toujours, car origin/docs n’est pas un ancêtre de HEAD. Ajoutez --all :

git log --all --graph --oneline --decorate
*   e6d515e (HEAD -> main, origin/main, origin/HEAD) Merge branch 'feature'
|\
| * c7bfac7 (origin/feature) Add search tests
| * b13288d Add search option
* | d242263 Change default port
* | 3dc02d2 Rename project title
|/
| * f8fe6dd (origin/docs) Draft user guide
|/
* ccb94c7 Add default config
* 9cfbfd0 Add app skeleton
* 3d7dc15 Add README

Dans ce clone, les quatre cas se comportent ainsi :

Commande Point de départ Affiche f8fe6dd
git log HEAD Non
git log --branches Branches locales Non
git log --remotes Branches de suivi à distance Oui
git log --all Tout refs/, plus HEAD Oui

Les noms origin/… ne bougent pas tout seuls. Lors d’un test, un commit poussé vers le dépôt distant depuis un autre dépôt n’est apparu dans git log --all qu’après un git fetch.

Vérifier les branches affichées dans le graphe

GitMini n’a pas d’interrupteur « toutes les branches » à activer. Son graphe part de HEAD, de chaque branche locale, de chaque branche distante et de chaque tag à la fois : les branches et les tags que vous voyez sont ceux que git log --all --graph --oneline --decorate atteindrait, sans avoir à saisir l’option. GitMini ordonne les lignes par date de commit, comme --date-order : l’ordre des lignes peut donc différer des colonnes groupées de --graph.

Graphe GitMini montrant branches locales, branches distantes et tags dans un seul graphe, avec la barre latérale qui liste les mêmes références
Un dépôt de démonstration dans GitMini : les sections Local, Remote et Tags de la barre latérale, et toutes les branches dans le graphe.

La colonne « Branches / tags » porte les étiquettes (les en-têtes et les titres de la barre latérale s’affichent en capitales). Une branche locale et la branche distante située sur le même commit partagent une étiquette, par exemple fix/pagination ⇅ origin sur la capture. Une branche distante sans équivalent local garde son nom complet, comme origin/feature/export. Une ligne affiche au plus deux étiquettes ; un badge « +n » compte les autres, et son info-bulle liste toutes les étiquettes de la ligne. origin/HEAD n’est pas affiché.

Les sections « Local », « Remote » et « Tags » de la barre latérale listent les mêmes références, et un clic sur une branche y sélectionne son commit de sommet dans le graphe. La colonne « Graph » montre jusqu’à 12 lignes côte à côte. Au-delà, les lignes en trop sont masquées et l’info-bulle de l’en-tête de colonne en donne le nombre, par exemple « 2 hidden lanes ».

GitMini n’a pas de filtre par branche : la barre de recherche passe d’un résultat à l’autre pendant que tout le graphe reste en place. Si une branche distante attendue manque, rappelez-vous que les références distantes ne bougent qu’au fetch, au pull ou au push : le bouton « Fetch » de la barre d’outils récupère tous les remotes.

Sources