Git est un gestionnaire de révision ou CVS1), son principal objectif est de conserver l'historique des modifications apportées à un projet. C'est en consultant cet historique qu'on sera en mesure par exemple :
La principale commande permettant de consulter l'historique d'un projet git est la commande git log.
Les arguments (ou options) disponibles pour la commande git log se répartissent en deux catégories :
Quelques options largement utilisées:
--name-status | affiche pour chaque commit le nom des fichiers modifiés. |
---|---|
--oneline | Affiche sur une seule ligne lesi nformations essentielles du commit. |
--decorate | Affiche les références(pointeurs tags et branches). |
-p | Affiche le patch appliqué par chaque commit. |
--stat | Affiche pour chaque fichier modifié les statistiques. |
--graph | Souvent utilisé avec --oneline pour visualiser le graph des branches. |
L'option --pretty permet de choisir une mise en forme parmi celles disponibles. On peut toutefois précisément décrire le format de la sortie avec la syntaxe --pretty=format:"fstring" où fstring est une chaine de type printf():
%H | SHA-1, Condensat complet du commit |
---|---|
%h | SHA-1, condensat abrégé du commit |
%T | SHA-1, condensat de l'arborescence |
%t | SHA-1, condensat abrégé de l'arborescence |
%P | SHA-1, Condensat complet des parents |
%p | SHA-1, Condensat abrégé des parents |
%an | Nom de l'auteur |
%ae | email de l'auteur |
%ad | Date renseignée par l'auteur (au format spécifiée par l'option --date=) |
%ar | Date relative de l'auteur |
%cn | Nom du validateur |
%ce | Mail du validateur |
%cd | Date du validateur |
%cr | Date relative du validateur |
%s | Sujet du commit |
Le formatage peut également définir des couleurs parmi les couleurs standard : normal, black, red, green, yellow, blue, magenta, cyan et white.
Pour les terminaux supportant les couleurs 24 bits les couleurs peuvent être décrites par les valeurs hexadécimales des composantes RVB:
# Utilise un gris %C(#808080) pour le formatage de la date git --no-pager log --pretty=format:"%C(auto)%h%d - %s %C(#808080)[%ad] %Creset" --graph --all
Ci dessous un exemple d'affichage en graphe avec affichage personnalisé intégrant des couleurs et une mise en forme de la date :
git --no-pager log --pretty=format:"%C(auto)%h%d - %s %C(#808080)[%ad] %Creset" --graph --all --date=format:"%d/%m/%y %H:%M"
Pour limiter la sortie aux n derniers commit insérer -n:
$ git log --oneline --stat -2
Ici les titres des deux derniers commits seront affichés avec les statistiques des fichiers modifiés.
Il est également possible de limiter l'historique retourné sur des critères temporels. Pour n'afficher que les commits émis depuis 2 semaines:
$ git log --since=2.weeks
On peut également choisir de n'afficher les commits d'un auteur en spécifiant le filtre --author
Si l'on souhaite afficher les commits ayant introduit des modifications contenant la chaîne de caractères “exemple”:
git log -Sexemple
La commande ci-dessus retournera les commits comportant des patchs ayant introduits ou retirés la chaîne “exemple”.
On peut placer en dernière option de git log est un chemin (fichier ou répertoire). Cette option est précédée d'un séparateur double tirets **--**:
$ git log --oneline --name-status -- lib/
La commande ci-dessus n'affichera que les commits ayant introduits des changements sur le dossier lib
Ci dessous un alias à ajouter dans le fichier de configuration ~/.gitconfig pour modifier la mise en forme de l'historique par défaut:
[alias]
lg = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
Cette mise en forme présente un graph avec l'ensemble des branches et affiche les références.