Comment lire les visualisations

Chaque visualisation est pilotée par un simulateur Git dont la sortie est vérifiée avec le vrai Git. Voici ce que signifie chaque partie de la scène — et une scène en direct pour essayer.

Exemple en direct : git commit

Appuyez sur ▶ et regardez un fichier voyager de votre disque à la zone de préparation, puis dans un commit. Pour taper vos propres commandes, ouvrez le bac à sable.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsinchangéindex.htmlinchangév1v1v1v1v1v1v2v2v2HEAD → main → 2e039ac “Add homepage”
0.0s / 66s
commitanneau = le commit où se trouve HEADinaccessible (existe encore)branche = étiquette déplaçableorigin/* = votre marque-page du dépôt distantHEAD = là où vous êtes

1 Vos fichiers — un fichier, trois endroits

Le tableau de gauche suit chaque fichier à travers les trois endroits où Git le conserve. Une étiquette de version (v1, v2…) change quand le contenu change, et une cellule clignote quand une commande la touche.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiélogin.jsnon suiviv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

Répertoire

Le fichier sur votre disque — ce que montre votre éditeur. Les modifications arrivent d’abord ici.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiélogin.jsnon suiviv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

Préparation

Le brouillon de votre prochain commit. git add y copie une version.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiélogin.jsnon suiviv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

HEAD

La version du dernier commit de la branche sur laquelle vous êtes.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiélogin.jsnon suiviv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

Ligne d’état

Sous chaque nom de fichier : unchanged, modified, staged, untracked, conflict… exactement ce que dirait git status.

2 Le graphe des commits

La partie droite dessine votre dépôt. Tout ce qui s’y trouve vient de l’état réel après chaque commande — rien n’est placé à la main.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiélogin.jsnon suiviv1v1v1v2v2v1v3v2v2v1——HEAD → main → 2e039ac “Add homepage”

Cercle

Un commit, avec son hash court et son message. Les hashs sont réels : ils sont calculés à partir du contenu.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur16a965cMerge feature…16a965c6f96f4a7acb902f45bf46455f09ccff30 Merge feature/logina2b8b5dDocument inst…a2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagefeature/loginfeature/login: une étiquette déplaçable sur un commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsinchangéindex.htmlinchangélogin.jsinchangév2v2v2v2v2v2v2v2v2v1v1v1HEAD → main → 16a965c “Merge feature/login”

Ligne

Va d’un parent vers son enfant. Un commit de fusion a deux parents, donc deux lignes s’y rejoignent.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateura2b8b5dDocument installa2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on lo…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagemainmain: une étiquette déplaçable sur un commitfeature/loginfeature/login: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsinchangéindex.htmlinchangév2v2v2v1v1v1v2v2v2HEAD → main → a2b8b5d “Document install”

Étiquette

Une branche n’est qu’une étiquette déplaçable posée sur un commit (main, feature/login…).

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateura2b8b5dDocument installa2b8b5df5d4f38ac299e9b25e95ebcc998bfb7fa Document install2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit960123aCall login on lo…960123a1d58a1488381355be004d5a6ff601640c Call login on load19d2019Add login page19d2019870aaae1bc0c6d1a5aa8cc1f8d76c6473 Add login pagemainmain: une étiquette déplaçable sur un commitfeature/loginfeature/login: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsinchangéindex.htmlinchangév2v2v2v1v1v1v2v2v2HEAD → main → a2b8b5d “Document install”

HEAD

Là où vous êtes. HEAD se trouve à côté de la branche sur laquelle vous êtes, ou directement sur un commit quand HEAD est détachée.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (un autre dépôt)VOTRE DÉPÔT — .git sur votre ordinateur2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cart2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitorigin/mainorigin/main: votre marque-page LOCAL de l’endroit où était la branche d’origin lors de votre dernier fetch/pushmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesmainmain: tel qu’il existe SUR originREADME.mdinchangéapp.jsinchangéindex.htmlinchangév1v1v1v2v2v2v2v2v2HEAD → main → 2b4c917 “Add to cart”

Étiquette en pointillés

origin/main et consorts : votre dernière copie connue des branches du serveur, mise à jour par fetch, pull et push.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateurb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepage (inaccessible — aucune branche ne pointe ici ; le reflog s’en souvient encore)mainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsinchangéindex.htmlinchangév1v1v1v1v1v1v1v1v1HEAD → main → b272b3a “Set up project”

Cercle pâle en pointillés

Un commit inaccessible — plus aucune branche ne pointe dessus, mais il existe encore (le reflog peut le ramener).

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (un autre dépôt)VOTRE DÉPÔT — .git sur votre ordinateur2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cart2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitorigin/mainorigin/main: votre marque-page LOCAL de l’endroit où était la branche d’origin lors de votre dernier fetch/pushmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesmainmain: tel qu’il existe SUR originREADME.mdinchangéapp.jsinchangéindex.htmlinchangév1v1v1v2v2v2v2v2v2HEAD → main → 2b4c917 “Add to cart”

Zone ORIGIN

Affichée quand une leçon utilise un dépôt distant : le dépôt du serveur au-dessus du vôtre, pour que push et fetch déplacent visiblement des commits entre eux.

3 Le terminal

Chaque leçon est une liste de commandes Git. Un simulateur Git intégré au site les exécute dans votre navigateur — avant chaque version, sa sortie est vérifiée ligne par ligne avec le vrai Git 2.48.

~/shop — bashgit add -p
$ git add -p app.js
diff --git a/app.js b/app.js index 4f29dbf..1cd9aa2 100644 --- a/app.js +++ b/app.js @@ -1,6 +1,6 @@ const cart = [] function add(item) { - cart.push(item) + if (item) cart.push(item) } function remove(item) { const i = cart.indexOf(item) (1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]?

Invites

Les commandes interactives (add -p, rebase -i) marquent une pause à chaque question pour que vous puissiez la lire avant que la réponse soit tapée.

~/shop — bashgit commit
$ git commit
✎ .git/COMMIT_EDITMSGsaved ✓ — git continues
Add cart feature
 
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Changes to be committed:
# modified: app.js
#
# Untracked files:
# login.js
#

Vue éditeur

Quand Git ouvre un éditeur (message de commit, liste de tâches du rebase, message de tag), la scène montre le fichier en cours d’édition.

$try any command… (help)✎ Edit a file
Bloqué ? Commandes probables ensuite
cat index.html
Voir le conflit : votre version est entre <<<<<<< et =======, la leur en dessous
code index.html
Le résoudre dans l’éditeur (garde les deux côtés, retire les marqueurs)
git add index.html
Après la résolution : dit à Git « index.html est réglé »

Bac à sable

Les leçons se regardent seulement. Pour taper vos propres commandes, ouvrez le bac à sable (lien sous chaque visualisation) : le graphe réagit exactement comme dans les leçons, et des suggestions proposent les commandes les plus probables quand vous êtes bloqué.

~/shop — bashgit fetch
# meanwhile… Sam pushes 7f94dc7 “Update README” to origin/main
$ git fetch
remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) Unpacking objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done. From github.com:acme/shop 2e039ac..7f94dc7 main -> origin/main

Lignes « collègue »

Une ligne de narration comme « un collègue pousse… » signifie que quelqu’un d’autre a modifié le serveur — c’est la raison pour laquelle un push ou un pull plus tard se comporte ainsi.

4 Un message à la fois

Une étape est découpée en temps. Chaque temps change une seule chose et l’explique dans une légende en bas de la scène ; tout le reste s’estompe.

~/shop — bash① la commande est tapée
$ echo "<p>Sale</p>" >> index.html
VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZEVOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commitmainmain: une étiquette déplaçable sur un commitHEADHEAD → la branche sur laquelle vous êtesREADME.mdinchangéapp.jsindexéindex.htmlmodifiév1v1v1v2v2v1v3v2v2HEAD → main → 2e039ac “Add homepage”

La cause d’abord

La commande est tapée avant que rien ne bouge, et les panneaux ne changent que lorsque son effet arrive.

VOS FICHIERS — UN FICHIER, TROIS ENDROITSRépertoirevotre disquePréparationà committerHEADdernier commitadd ›commit ›GITUALIZE☁ ORIGIN — github.com/acme/shop (un autre dépôt)VOTRE DÉPÔT — .git sur votre ordinateur2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2e039acAdd homepage2e039ac897849007af489a58ee9eec107a21974e Add homepageb272b3aSet up projectb272b3abaca08f2f1c56c0562679f66a61035535 Set up project129c2dbInitial commit129c2db06bfe68f8469dc82e6e05d1c03d1f768c Initial commit2b4c917Add to cart2b4c91785b581691dd1665ce1839576f03d6ac23 Add to cartmainmain: une étiquette déplaçable sur un commitorigin/mainorigin/main: votre marque-page LOCAL de l’endroit où était la branche d’origin lors de votre dernier fetch/pushHEADHEAD → la branche sur laquelle vous êtesmainmain: tel qu’il existe SUR originREADME.mdinchangéapp.jsindexéindex.htmlinchangév1v1v1v2v2v1v2v2v2HEAD → main → 2e039ac “Add homepage”
Un nouveau commit 2b4c917 naît — un instantané de tout ce qui est dans la zone de préparation. main avance dessus (HEAD suit — il pointe sur main)

Légende

Ce qui vient de se passer et pourquoi, en une phrase. Le panneau à côté du terminal la reprend avec l’explication de l’étape.

  1. 1Observergit log --oneline
  2. 2Vous modifiezecho "cart.push(item)" >> app.js
  3. 3Nouveau fichierecho "export function login() {}" > login.js
  4. 4Demander à Gitgit status
  5. 5Préparergit add app.js login.js

Chapitres

La liste numérotée sous l’explication. Cliquez sur une étape pour y aller.

5 Contrôles

Regardez-la comme une vidéo ou avancez pas à pas.

⏮◀▶▶|1× ▾

⏮ ◀ ▶ ▶|

Recommencer, étape précédente, lecture / pause, étape suivante.

⏮◀▶▶|1× ▾

Chronologie

Faites glisser pour aller à n’importe quel moment de la leçon.

⏮◀▶▶|1× ▾

Vitesse

De 0,5× à 2×.

Spacelecture / pause←→étape précédente / suivante

Clavier

Cliquez sur la scène, puis Espace = lecture / pause, ← / → = étape précédente / suivante.

6 Pages de commandes, options et scénarios

Là où vivent les visualisations.

--force-with-leaseGit ≥ 1.8.5Recommandé
▷ Afficher la visualisation

Page de commande

La visualisation principale couvre l’usage courant de la commande. Chaque option a sa propre courte visualisation — ouvrez-la depuis la liste des options.

RecommandéMainstream, safe choiceSi nécessaireUseful in specific casesDéconseilléRisky or superseded

Recommandation

Chaque option porte un badge : Recommandé, Si nécessaire ou Déconseillé, avec une raison en une ligne.

git add --editGit ≥ 1.6.4

Ouvrir le diff dans votre éditeur avant l’indexation. Vous pouvez choisir à la main les modifications à inclure.

$ git add -e app.js

Pourquoi il n’y a pas d’animation

git add -e ouvre tout le diff sous forme de patch dans votre éditeur ; vous supprimez les lignes que vous ne voulez pas indexer et git applique le reste. C’est un fichier modifié à la main, pas un changement d’état du dépôt que la scène peut animer — git add -p en est l’équivalent visuel.

Comment ça marche

Quelques options dépendent d’éléments extérieurs au dépôt (votre éditeur, les permissions des fichiers, les fins de ligne). Elles ont une carte d’explication au lieu d’une animation.

1Démarrer la fonctionnalité
Brancher
$ git switch -c feature/login
Page de connexion
$ echo "export function login() {}" > login.js && git add login.js && git commit -m "Add login page"
La brancher
$ echo "login()" >> app.js && git commit -am "Call login on load"

Scénarios

Des démonstrations réelles jouées comme une histoire continue, découpées en sections titrées sur lesquelles vous pouvez cliquer.

Paramètres

Le bouton en forme d’engrenage dans l’en-tête regroupe les paramètres : langue, site clair ou sombre, thème des visualisations, mode daltonien et taille du texte.

Prêt à apprendre ?

Suivez un workflow complet, ou choisissez une commande.