Versioning avec Git & GitHub · Étape 05

Lis l’historique, les diffs et les objets commit

Parcours un historique, inspecte un commit, compare deux états et retrouve la modification qui a introduit une ligne.

Durée indicative · ~1 h 35Niveau débutantPrérequis conseillé · Leçon 4 — commits atomiques et lisiblesPratique · TP
L’idée reçue

« git log affiche seulement une liste de sauvegardes. »

L’historique est un graphe de commits liés à leurs parents. Chaque commit porte arbre de fichiers, auteur, date, message et relation avec le passé.

01Construis l’historique de référence

./module1-git-foundations.sh run
./module1-git-foundations.sh validate
cd /tmp/soria-git-foundations-$USER/reference

Le dépôt contient quatre commits atomiques et un working tree propre.

02Change de vue sans changer l’historique

git log
git log --oneline --decorate --graph --all
git log --format='%h | %ad | %an | %s' --date=short
git log --stat

Ces commandes lisent les mêmes commits avec des formats différents. –graph deviendra particulièrement utile lorsque plusieurs branches existeront.

03Inspecte un commit

git show HEAD
git show --stat HEAD
git show --name-status HEAD
git show --no-patch --format=fuller HEAD

git show combine métadonnées et patch. Limite la sortie à ce dont tu as besoin pour éviter de masquer l’information importante.

04Compare deux états

git diff HEAD~1 HEAD
git diff --stat HEAD~2 HEAD
git diff HEAD~3 HEAD -- README.md
git diff --name-status HEAD~3..HEAD

Une comparaison porte sur deux états. La notation A..B est souvent utilisée avec log pour les commits accessibles depuis B mais pas A ; avec diff, les deux extrémités désignent les snapshots comparés.

05Filtre par chemin et contenu

git log -- README.md
git log -p -- docs/observations.md
git log -S 'Working tree' --oneline --all
git log -G 'Index|Repository' --oneline --all

-S recherche une variation du nombre d’occurrences d’une chaîne. -G recherche les patches dont les lignes ajoutées ou retirées correspondent à une expression régulière.

06Attribue une ligne avec prudence

git blame README.md
git blame -L 1,12 README.md
git show "$(git blame -L 1,1 --porcelain README.md | head -1)"

git blame indique le dernier commit ayant modifié chaque ligne. Il ne prouve ni l’auteur initial de l’idée, ni la responsabilité d’un défaut.

07Observe les objets internes via Git

git cat-file -t HEAD
git cat-file -p HEAD
git cat-file -p HEAD^{tree}
git count-objects -v

Utilise les commandes de plomberie pour observer commit et tree sans modifier directement le contenu de .git/objects.

08Produis une preuve de lecture

git log --reverse --format='%h %s'
git diff --check HEAD~3 HEAD
git status --porcelain

Le rapport doit expliquer les quatre intentions dans l’ordre, les fichiers modifiés par chacune et l’état final propre.

Projet du lot 1

Raconte l’histoire du dépôt

À partir du repository de référence, produis une chronologie des quatre commits. Pour chaque commit, donne hash court, intention, fichiers concernés, patch essentiel et commande utilisée pour vérifier l’information.

Lot 1 terminé

Tu sais distinguer Git et GitHub, préparer un dépôt, sélectionner l’index, créer des commits atomiques et lire précisément l’historique obtenu.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.