Comment inspecter l’historique d’un projet avec Git Log
L'un des services les plus fondamentaux fournis par Git est l'historique du projet. Étant donné que Git garde une trace de toutes les modifications apportées aux fichiers dans un référentiel, il peut offrir des fonctionnalités de journalisation très puissantes. Vous pouvez interroger l'historique d'un projet de différentes manières et vous pouvez extraire et afficher diverses données à l'aide d'une seule commande flexible.
La commande git log est énorme, la plus grande de toutes les commandes Git classiques. Son manuel compte plus de 2 500 lignes. Heureusement, git log fournit une grande partie de son comportement le plus utile à partir de quelques options clés.
Journalisation de base avec le comportement par défaut
Par défaut, git log affiche une liste chronologique inversée des commits. Chaque commit comprend son hachage, son auteur, sa date et son message de commit :
La commande utilise un pager (par exemple moins, plus) pour afficher la sortie complète afin que vous puissiez facilement naviguer dans les résultats. Vous pouvez configurer Git pour utiliser un programme de votre choix, tel que most pager .
Voici une sortie du journal git du référentiel du code source git lui-même :
commit 670b81a890388c60b7032a4f5b879f2ece8c4558 (HEAD -> master, origin/next,
origin/master, origin/HEAD)
Author: Junio C Hamano <[email protected]>
Date: Mon Jun 14 13:23:28 2021 +0900
The second batch
Signed-off-by: Junio C Hamano <[email protected]>
Le résultat commence par le hachage du commit ( 670 …) suivi d'une liste de branches qui pointent actuellement vers ce commit ( HEAD -> master , etc.)
La ligne suivante décrit l'auteur de ce commit, en donnant son nom et son adresse e-mail.
La date et l'heure complètes du commit suivent sur la ligne suivante.
Enfin, le contenu complet du message de validation apparaît. Vous pouvez contrôler la plupart de tout ce que git log propose avec des options de ligne de commande. Il existe deux principaux types d'options :
- Le formatage, qui définit comment Git affiche chaque commit.
- Le filtrage, qui définit les commits que git log inclut.
En plus des options de ligne de commande, git log accepte des arguments qui spécifient des fichiers, des commits, des branches ou d'autres types de référence. Ceux-ci appliquent un filtrage supplémentaire.
Formatage de la sortie du journal Git
L'un des ajustements les plus simples est l'option –oneline qui produit une sortie très brève :
git log --oneline
Chaque ligne du journal ne contient désormais qu'un hachage de validation abrégé et le sujet du message de validation . C'est un excellent moyen d'avoir une vue d'ensemble des commits récents du projet :
Malheureusement, sans autre contexte, cette information n'est pas toujours aussi utile. Cela peut vous donner une vague idée du projet, mais il manque des dates et d'autres informations utiles sur les auteurs et les fichiers.
Affichage d'un graphique de branche
L'option –graph vous permet de visualiser les relations entre les branches. C'est très basique mais peut aider à démêler une histoire compliquée.
git log --oneline --graph
Jolie sortie personnalisée
Vous pouvez obtenir un formatage plus compliqué en le spécifiant en détail à l'aide de l'option –pretty . La syntaxe va de très simple à beaucoup plus complexe, alors consultez un manuel pour plus de détails .
git log --pretty=short
Est essentiellement le même que git log sans la date ni le message complet :
git log --pretty=oneline
Est équivalent à git log –oneline .
git log --pretty=fuller
Comprend beaucoup de détails. Il sépare même auteur et committer qui peuvent, en théorie, être des personnes différentes :
Avec le format : variante, vous pouvez fournir une chaîne contenant le contenu de votre choix, y compris des espaces réservés qui sont remplacés par diverses données. Voici quelques exemples d'espaces réservés :
- %H commit hachage
- %h hachage de validation abrégé
- Date de l'auteur de l' annonce
- %ar date d'auteur, relative
- Objet du message de validation %s
- %b corps du message de validation
- %p hachages parent abrégés
Vous pouvez ajouter des caractères fixes à la sortie et la coloriser. Cet exemple montre également une variante du format de date :
git log --pretty=format:'%C(auto) %h [%ad] %s' --date=short
Notez que les parenthèses entourent la date. Quel que soit le formatage que vous choisissez, si vous souhaitez que la sortie soit utile dans un pipeline ou pour d'autres formes de traitement de texte, vous devez réfléchir à la manière de délimiter chaque partie de la sortie.
Affichage des différences dans le journal
Un détail important lors de l'examen de l'historique d'un référentiel est les différences elles-mêmes. Ils représentent ce qui a réellement changé dans le code, après tout ! Pour commencer, vous pouvez obtenir un résumé des modifications à côté de chaque commit en utilisant –shortstat :
git log --shortstat
Cela ajoute une ligne comme :
1 file changed, 48 insertions(+), 2 deletions(-)
Au bas de chaque commit. Vous verrez souvent ce genre de résumé—tout au long des pages sur GitHub, par exemple—et c'est un moyen utile d'évaluer rapidement la portée d'un commit spécifique. Pour des informations plus détaillées, vous pouvez inclure une sortie de patch complète (diffs) à l'aide de l'option -p :
git log -p
Filtrage de la sortie du journal Git
Quel que soit le formatage que vous appliquez, vous verrez toujours le journal complet de tous les commits dans la branche actuelle. Même si Git les divise en pages, cela peut quand même être beaucoup de sortie. Les options suivantes vous permettent de personnaliser les commits inclus dans le journal.
Restriction par montant
Si vous souhaitez simplement rogner les résultats pour afficher les quelques commits les plus récents, utilisez la syntaxe -[nombre] :
git log -2
Restriction par date
Pour limiter l'ensemble des commits à une période donnée, utilisez les options –since (–after) et –until (–before). Celles-ci prennent chacune une date au format ISO 8601. Vous pouvez utiliser –since ou –until eux – mêmes, ou les deux ensemble pour spécifier une plage. Les options –after et –before sont des synonymes.
git log --since="2021-01-01" --until="2021-05-01"
Restriction par fichier
Git log peut se concentrer sur un fichier spécifique plutôt que sur chaque fichier de votre référentiel. C'est très bien pour vous aider à découvrir comment un fichier particulier a changé au fil du temps. Ajoutez simplement le nom du fichier à la fin de votre commande git :
git log filename
Vous ne verrez que les commits qui ont affecté le nom de fichier .
Différences entre les succursales
Vous pouvez avoir des exigences uniques lors de l'affichage du journal d'une branche. Par exemple, plutôt que de voir l'historique complet, vous voudrez peut-être simplement voir ce qui a changé dans cette branche spécifique. Git log peut vous aider via la syntaxe ref1..ref2 . Vous pouvez utiliser trois approches légèrement différentes :
- Affichez les commits qui sont dans main, mais pas dans la branche :
git log --oneline origin/branch..origin/main
- Afficher les commits qui sont dans la branche, mais pas dans le principal :
git log --oneline origin/ main ..origin/ branch
- Afficher les commits qui n'existent que dans la branche ou la main :
git log --oneline origin/branch ... origin/main
Différences entre deux balises
Tout comme vous pouvez afficher l'historique entre les branches en utilisant la syntaxe ref1..ref2 , vous pouvez également afficher l'historique entre les balises de la même manière. Après tout, les balises et les branches sont des types de référence.
git log --abbrev-commit --pretty=format:'%h %ar %s' v2.32.0-rc3..v2.32.0
Commandes associées
Si vous préparez des notes de version pour un projet plus important, git shortlog devrait être votre première escale. Il produit une liste d'auteurs avec des sujets de commit à leurs côtés. Vous pouvez lui transmettre une plage de référence pour limiter l'historique de la même manière que git log :
git shortlog v2.32.0-rc3..v2.32.0
La commande git show est encore plus polyvalente que git log . Il peut fonctionner avec des balises et d'autres types d'objets git au-delà de l'historique des commits. Il partage de nombreuses options avec git log , mais vous n'en aurez vraiment besoin que si vous avez besoin de creuser dans des détails de niveau inférieur.
Revoir le passé avec Git Log
Git log est une commande compliquée, mais vous pouvez obtenir beaucoup d'utilisation de ses options les plus basiques. Parcourir l'historique d'un référentiel est un excellent moyen de comprendre à quelle fréquence les changements se produisent et combien de personnes les effectuent. Une fois que vous aurez une bonne compréhension de l'histoire d'un projet, vous serez dans une excellente position pour y contribuer vous-même.