GitVoici le douzième volet de la formation Git. Dans mon précédent article, nous avons vu en détail la gestion des conflits éventuels lors de la fusion de deux branches. Aujourd’hui nous allons nous intéresser à la gestion de l’historique de Git.

Depuis notre première prise en main de Git, nous avons créé des branches, effectué des commits et fusionné ce que nous avons développé dans les branches. Chaque pas en avant dans notre travail est ainsi matérialisé dans un commit. Tôt ou tard nous allons nous demander comment nous avons fait exactement pour en arriver là.

Un peu d’histoire appliquée

Commençons par un exemple simple. Retournez dans le répertoire atelier-08 :

$ cd ~/formation-git/atelier-08
$ ls
RECETTES.md  Sauce-bolognaise.md

Le dépôt a l’air propre :

$ git status
On branch master
nothing to commit, working tree clean

Il ne contient que la seule branche master :

$ git branch
* master

Dans sa configuration par défaut, la commande git log affiche tous les commits de la branche courante. Le commit le plus récent s’affiche en premier, suivi du commit parent, et ainsi de suite :

$ git log
commit 41e6de1fca2c6dac37af6fe21642f836ebb59b91 (HEAD -> master)
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:16:48 2023 +0100

Peaufinage de la recette de sauce bolognaise.

commit 08de09960b9ee5e1882aa9f10c9096b2a641634e
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:15:32 2023 +0100

Ajout d'une recette de sauce bolognaise.

commit ad07c4d2b08409f29315edf5e8c3a514567d74d2
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:13:19 2023 +0100

Ajout d'un fichier RECETTES.

Chaque commit est identifié grâce à une saucisse hexadécimale indigeste à 40 caractères. En règle générale, nous n’avons pas besoin d’autant de caractères pour identifier clairement un commit. Il se trouve que les sept premiers caractères de l’ID suffisent amplement :

$ git log --abbrev-commit
commit 41e6de1 (HEAD -> master)
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:16:48 2023 +0100

Peaufinage de la recette de sauce bolognaise.

commit 08de099
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:15:32 2023 +0100

Ajout d'une recette de sauce bolognaise.

commit ad07c4d
Author: Nicolas Kovacs <info@microlinux.fr>
Date: Fri Jan 27 09:13:19 2023 +0100

Ajout d'un fichier RECETTES.

Vous n’avez peut-être pas besoin de toutes ces infos sur l’auteur et la date du commit. Dans ce cas, on peut faire encore plus bref :

$ git log --abbrev-commit --pretty=oneline
41e6de1 (HEAD -> master) Peaufinage de la recette de sauce bolognaise.
08de099 Ajout d'une recette de sauce bolognaise.
ad07c4d Ajout d'un fichier RECETTES.

AstuceBien évidemment rien ne vous empêche d’utiliser l’option --pretty=oneline toute seule sans l’option --abbrev-commit, mais vous vous retrouverez avec des identifiants à 40 caractères.

Cette combinaison d’options est tellement populaire qu’elle existe sous une forme compacte :

$ git log --oneline
41e6de1 (HEAD -> master) Peaufinage de la recette de sauce bolognaise.
08de099 Ajout d'une recette de sauce bolognaise.
ad07c4d Ajout d'un fichier RECETTES.

L’historique et les branches

À présent, rendez-vous dans le répertoire atelier-12/hello. Vous ne vous souvenez plus trop à quoi correspond ce dépôt Git ? Faisons donc notre propre recherche. Affichez d’abord l’état du dépôt :

$ git status
On branch master
nothing to commit, working tree clean

Est-ce que nous avons des branches dans ce dépôt ?

$ git branch
hello-cow
hello-figlet
* master

J’ai dit plus haut que dans sa configuration par défaut, git log affiche tous les commits de la branche courante dans un ordre chronologique inverse. Voyons à quoi cela correspond dans la pratique :

$ git log --oneline
89211a3 (HEAD -> master) Peaufinage du script initial.
bebe769 Commit initial.
$ git switch hello-cow
Switched to branch 'hello-cow'
$ git log --oneline
477d1a0 (HEAD -> hello-cow) Implémentation d'une vache fatiguée.
d268724 Premier jet de la vache qui dit bonjour.
bebe769 Commit initial.
$ git switch hello-figlet
Switched to branch 'hello-figlet'
$ git log --oneline
8db1b22 (HEAD -> hello-figlet) Premier jet avec des majuscules ASCII.
bebe769 Commit initial.
$ git switch master
Switched to branch 'master'

Un peu compliqué, tout ça. Et pas très parlant non plus.

Est-ce qu’il n’y aurait pas moyen de voir en un coup d’œil tous les commits dans toutes les branches ? Oui, en ajoutant les deux options --all et --graph :

$ git log --oneline --all --graph
* 477d1a0 (hello-cow) Implémentation d'une vache fatiguée.
* d268724 Premier jet de la vache qui dit bonjour.
| * 89211a3 (HEAD -> master) Peaufinage du script initial.
|/
| * 8db1b22 (hello-figlet) Premier jet avec des majuscules ASCII.
|/
* bebe769 Commit initial.
  • L’option --all affiche l’historique de toutes les branches.
  • L’option --graph se charge d’afficher les commits sous forme graphique.

Exercice

  • Jetez un œil dans le dépôt Git atelier-15/hello.
  • Quel est l’état du dépôt ?
  • Est-ce qu’il y a des branches ?
  • Retracez l’historique du dépôt avec la commande git log et les options qui vont bien.
  • Expliquez l’historique du dépôt avec vos mots.

Lire la suite : Afficher les modifications


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *