Un meilleur historique Git, sans difficulté

Souvenir d’un vieux jeu vidéo

⚙️ L’incroyable machine

Git est pratique

  • Moins de perte de travail ;

  • Expérimentation dans des branches ;

  • Historique à utiliser (localement et sur des plateformes comme GitHub).

Ressources Git pour les débutants (Anglais)

Historique de Git

Petits commits (modifications) avec des messages informatifs

Une ligne de code mystérieuse

un script avec une ligne mystérieuse 'x <- x - 1'

git blame

diagramme simplifié de Git blame : pour chaque ligne d'un script à gauche, on voit qui l'a ajoutée, quand, avec quel message de commit.

Git blame : clique sur le commit…

Git blame : clique sur le commit…

“Ajoute un tas de fichiers avant le déjeuner 🍝

Affiche 145 fichiers modifiés avec 2 624 ajouts et 2 209 suppressions.

Git blame : clique sur le commit…

“fix: adapter le code à l’indexation 0 de l’outil”

Affichage de 2 fichiers modifiés avec 3 ajouts et 2 suppressions.

Une mauvaise idée il y a 7 commits

Oh non, cette idée d’il y a 7 commits est mauvaise ! Doit-on…

  • Supprimer manuellement le changement ;

  • Défaire (“Revert”) le commit qui a ajouté la modification ?

Git revert

Cela ne fonctionne bien que si le commit est petit.

Toi faisant un truc il y a trois jours

un tas de scripts, sur lesquels figure un emoji d'un visage heureux portant des lunettes de soleil.

Toi faisant la même chose aujourd’hui

un tas de scripts, sur lesquels figure un emoji d'un visage en train de sangloter.

Git bisect : historique des commits

une série d'emoji, le premier un visage cool, puis des visages endormis, puis un visage sanglotant.

Git bisect : explore les commits de façon optimale

une série d'emoji, le premier un visage cool, puis des visages endormis, puis un visage sanglotant. une flèche au-dessus d'un visage endormi.

Git bisect : explore les commits de façon optimale

tous les visages jusqu'à la flèche sont maintenant des visages cool.

Git bisect : explore les commits de façon optimale

flèche au-dessus d'un visage endormi différent

Git bisect : explorer les commits de manière optimale

tous les visages après la flèche sont maintenant en train de sangloter

Git bisect : explore les commits de manière optimale

flèche sur le dernier visage endormi

Git bisect : explorer les commits de manière optimale

last sleeping face now sobbing

Résultat de Git bisect : un commit !

Résultat de Git bisect : un commit !

“Ajoute un tas de fichiers avant le sport 💪”.

Affiche 145 fichiers modifiés avec 2 624 ajouts et 2 209 suppressions.

Résultat de Git bisect : un commit !

“refactor: commencer à utiliser YAML”

Affiche 2 fichiers modifiés avec 3 ajouts et 2 suppressions.

Git bisect : essayons-le !

dir  <- withr::local_tempdir()
saperlipopette::exo_bisect(dir)

Historique Git

L’historique Git de ton dépôt devrait ressembler à la grille de ton profil Instagram.

Historique Git

““there’s no need for everyone to see the mistakes you made along the way””

traduction : “il n’est pas nécessaire que tout le monde voit les erreurs que tu as faites en cours de route”.

Mike McQuaid, Git in practice

Comment obtenir un bel historique Git

Une autre dimension à ton travail.

Travailler dans des branches

“L’amendement répété”™️ :
git commit --amend

Qu’est-ce que git commit --amend

dir  <- withr::local_tempdir()
saperlipopette::exo_one_small_change(dir)

“L’amendement répété”™️ :
git commit --amend

https://happygitwithr.com/repeated-amend

  • Première partie du travail, git commit -m "feat: ajoute truc cool"

  • Deuxième partie du travail, git commit --amend --no-edit

  • C’est fait ! git push

“L’amendement répété”™️ :
git commit --amend

  • git checkout -b 'feature-cool'

  • Première partie du travail, git commit -m "feat: ajoute truc cool", git push

  • Deuxième partie du travail, git commit --amend --no-edit, git push -f

  • C’est fait ! git push -f

“Squash and merge” : clique sur le bon bouton GitHub/GitLab.

une branche principale avec plusieurs commits, une branche de fonctionnalités avec des commits en pagaille.

“Squash and merge” : clique sur le bon bouton GitHub/GitLab.

une branche principale avec plusieurs commits, dont un commit de nouvelle fonctionnalité

“Squash and merge” : clique sur le bon bouton GitHub/GitLab.

Exemple

“Partir de zéro”

  • git reset --mixed Changements dans le répertoire mais pas l’historique Git.

  • git add (--patch) Bons commits, avec le recul.

“Repartir de zéro”

dir  <- withr::local_tempdir()
saperlipopette::exo_reset(dir)

“Mélange et associe tes commits”

git rebase -i

dir  <- withr::local_tempdir()
saperlipopette::exo_rebase_i(dir)

“Mélange et associe tes commits”

Resources en anglais sur git rebase

Julia Evans’ rules for rebasing

Julia Evans’ post “git rebase: what can go wrong?”

Pourquoi avoir des petits commits informatifs.

Meilleur historique, en particulier pour

  • git blame

  • git bisect

  • git revert

Comment créer de meilleurs commits

Il n’est pas nécessaire de réussir du premier coup

  • L’Amendement répété ™️

  • Écraser et fusionner les PR

  • Repartir de zéro

  • Mélange et associe tes commits

Pratique en toute sécurité avec les terrains de jeux de {saperlipopette} !

saperlipopette en tant que CLI ?

En cours de construction : https://github.com/maelle/ohcrabgit

Utilise les outils que tu préfères !

Quels outils pour Git ?

  • Le terminal : il ne change jamais, et tu apprends les mots.

  • RStudio IDE

  • Positron IDE, extension GitLens

  • Autres IDE

  • GitHub Desktop