Leçon 3 · Fondations
Prédisez ce que contiendra votre prochain commit
Séparez les fichiers que vous modifiez de l'instantané préparé pour une validation et de l'historique enregistré. Utilisez le futur héros des fonctionnalités GitTree pour expliquer pourquoi un fichier peut être à la fois intermédiaire et modifié.
- Niveau: Débutant
- 12 minutes de lecture
- 5 minutes de vidéo
- Mis à jour
- Avant cette leçon: Distinguez Git, GitTree et votre fournisseur d'hébergement, Installez Git et prévisualisez une identité de validation sécurisée
Progression enregistrée dans ce navigateur.
La lecture charge la vidéo depuis YouTube (mode de confidentialité amélioré).
Ce que vous apprendrez
- Distinguer l'arbre de travail, l'index et le dernier commit enregistré.
- Prévoyez ce que la mise en scène, l'édition et un commit normal changent.
- Lisez les deux colonnes de statut court sans supposer que la mise en scène signifie sauvegardée pour toujours.
- Utilisez des comparaisons distinctes pour les modifications non planifiées et planifiées.
Avant de commencer
Lisez d’abord la leçon 1 ; la leçon 2 prépare Git et votre identité de commit. Vous commencez avec no course repository et vous terminez sans : c'est une leçon conceptuelle. La première initialisation pratique est la leçon 4, à l'intérieur de GitTree.
Cette leçon présente quatre états que vous créerez vous-même dans la leçon 5. Les sorties du terminal ci-dessous et les écrans GitTree dans la vidéo proviennent d'une copie jetable du futur projet : les commandes et les écrans ont été enregistrés avec Git 2.52.0 et GitTree 2.0 sur Ubuntu 24.04. Ils n'ont pas été exécutés sur macOS. Chacune de ces scènes dans la vidéo est intitulée « Aperçu de la future leçon 5 ». N'exécutez pas les commandes de l'état futur dans un référentiel de travail non lié et n'initialisez pas un référentiel de pratique supplémentaire maintenant ; regardez et lisez l'aperçu, puis répétez les requêtes lorsque la leçon 5 atteint ces états.
Le minimum inspecté de GitTree est Git 2.39.0. Sur macOS, appuyez sur Commande où Windows et Linux utilisent Ctrl. Les commandes n'ont pas été exécutées sur Windows. Aucun fournisseur, compte, Pro ou essai n'est nécessaire pour le modèle local.
Concept : trois lieux, pas un seul dossier déplacé
Votre working tree correspond aux fichiers du projet sur le disque. La modification et l'enregistrement d'un fichier modifient ces octets. Git ne les a pas nécessairement sélectionnés pour un commit.
Le index, également appelé staging area, décrit le prochain instantané que vous préparez. La mise en scène d'un fichier met à jour son entrée d'index à partir de son contenu actuel. Il ne s'agit pas d'un abonnement permanent aux modifications ultérieures.
Un commit enregistre un arbre ainsi que des métadonnées et des relations parentales. HEAD identifie votre position actuelle, généralement via la branche extraite. Avant le premier commit, HEAD peut nommer une branche à naître même si aucun commit de branche n'existe.
Une analogie utile est une ébauche de travail, une édition préparée et une édition enregistrée. Ne prenez pas l’analogie au pied de la lettre : la mise en scène ne déplace ni ne supprime le fichier de travail. Dans un chemin suivi normal, les trois versions peuvent s'accorder ou différer indépendamment.
Nous utilisons une validation normale de l'index préparé, without -a, des arguments de chemin explicites, une mise en scène ou une modification automatique. Les autres modes de validation ne sont pas interchangeables avec cet exemple. Référence d'ajout de Git explique le comportement de l'instantané lors de la mise en scène ; la référence diff distingue les comparaisons.
L'exemple futur exact
Le fichier est index.html. Son titre reste Understand every change. Sa ligne de support a deux versions :
<p id="hero-copy">A clear view of Git history.</p>Modification de travail ultérieure :
<p id="hero-copy">Choose one change, then check what Git saved.</p>Il s'agit d'extraits de lignes de la page originale complète et de la page entièrement modifiée du projet, et non de fichiers de remplacement à coller sur la page entière.
| État futur | Dernier commit | Indice | Fichier de travail | Statut court pour index.html |
|---|---|---|---|---|
| A : créer des fichiers | Aucun engagement | Aucune entrée | page originale | ?? index.html |
| B : fichiers de démonstration de scène | Aucun engagement | page originale | page originale | A index.html |
| C : modifier après la mise en scène | Aucun engagement | page originale | page éditée | AM index.html |
| D : valider l'index | page originale | page originale | page éditée | M index.html |
Le projet complet contient également un README. Les deux fichiers sont préparés avant la première validation ; les exemples de statut sont limités à index.html. En D, le README est propre et index.html conserve sa modification délibérée et non mise en scène.
Pour les lignes normales sans conflit ici, la première colonne du statut court compare l'index à HEAD ; la seconde compare l'arbre de travail à l'index. ?? est le marqueur spécial non suivi, et non deux colonnes de modification ordinaires. Un espace leader dans les domaines M.
Quels changements
- Stage: met à jour le contenu de l'index ; pas de validation ou de mouvement de branche, pas de réécriture du fichier de travail.
- Edit after staging: met à jour uniquement les octets de travail ; l'index préparé reste la version antérieure.
- Normal commit: enregistre l'instantané préparé et met à jour la branche locale actuelle. L'index reste cet instantané ; les modifications de travail ultérieures sans rapport demeurent.
- Remote: aucune de ces étapes locales ne pousse, ne récupère ou ne crée une référence de suivi à distance. Cet exemple n'a pas de télécommande.
L'index est plus qu'une liste de noms. Les conflits avancés peuvent contenir plusieurs étapes d'indexation ; nous modélisons ici des entrées de fichiers ordinaires au stade zéro, et non des fusions non résolues.
Dans le terminal — prévisualisez le futur point de contrôle
Do not execute these in the still-uninitialized learner project. Ils ont été exécutés dans une copie jetable contenant le README complet et les deux versions de la page. La leçon 5 fournit les véritables étapes de création et de mise en scène.
À l'état futur C, inspectez les deux versions
git status --short -- index.htmlObservé :
AM index.htmlLisez directement le fichier préparé :
git show :index.htmlObservé full output :
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>GitTree Features — course demo</title>
</head>
<body>
<header class="site-header">
<a href="#main">GitTree Features</a>
</header>
<main id="main">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
<p id="hero-copy">A clear view of Git history.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>Comparez l'arbre de travail avec l'index :
git diff -- index.htmlObservé :
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">Understand every change.</h1>
- <p id="hero-copy">A clear view of Git history.</p>
+ <p id="hero-copy">Choose one change, then check what Git saved.</p>
</section>
</main>
<footer><p>Built by a fictional team for GitTree Learn.</p></footer>Les abréviations d'objet ci-dessus sont de véritables ID de fichiers blob provenant de ces corps de fichiers LF exacts, et non des SHA de validation inventés. La longueur/sortie de votre abréviation peut différer selon la configuration.
Inspectez l'ajout par étapes, par rapport à l'historique vide avant la première validation :
git diff --cached --stat -- index.htmlObservé :
index.html | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)--stat résume ; il ne s'agit pas d'une révision de contenu. L'instantané intermédiaire complet est le fichier précédent affiché par git show :index.html.
À l'état futur D, vérifiez ce qui a été enregistré
Après la validation normale de l'index préparé par la leçon 5 :
git log -1 --format=%s
git status --short -- index.html
git diff --cached -- index.htmlDeux premières sorties observées, dans l'ordre :
feat: add the GitTree Features hero
M index.htmlLa troisième commande imprime no output et se termine avec succès : index et HEAD sont d'accord pour ce chemin. Cela ne signifie pas que l’arbre en activité est propre. Le diff de travail montre toujours la modification de la ligne de support ci-dessus. C'est une raison courante pour laquelle « le commit a manqué ma dernière modification » est en fait un comportement correct de Git.
Dans GitTree
Dans votre contexte actuel sans référentiel
- Gardez New Tab ouvert, en utilisant Command+T / Ctrl+T (
tab.new) si nécessaire. - Ouvrez Feature Guide avec Option+H sur macOS ou Alt+H ailleurs, ou ouvrez Command Palette… avec Command+Shift+P/Ctrl+Shift+P et choisissez Feature Guide.
- Dans Features, tapez
stagedans Search features et lisez Stage and commit. N'exécutez pas d'action d'initialisation. La carte est une orientation et non la preuve d'un dossier mis en scène. - Appuyez sur Escape pour fermer le guide. Votre référentiel de cours n'existe toujours pas.
Les mêmes états dans GitTree (affichés dans la vidéo)
La vidéo ouvre une copie jetable du futur projet dans GitTree, intitulée « Aperçu de la leçon 5 du futur ». Il ne s'agit pas de votre projet ni d'un enregistrement de votre travail.
- En C, ouvrez Command Palette…, tapez Show Working Changes et choisissez cette commande exacte (
wip.show). Aucun raccourci par défaut n'est défini pour cette commande. - Inspectez les Unstaged Files et Staged Files du panneau de droite.
index.htmlapparaît dans les deux car il comporte deux comparaisons différentes ; ce ne sont pas deux fichiers physiques. - Cliquez sur sa ligne dans Unstaged Files. Attendez-vous à ce que la différence centrale affiche la page d'origine modifiée en page modifiée, y compris le changement de ligne de support.
- Cliquez sur sa ligne dans Staged Files. Attendez-vous à l'ajout par étapes, contenant la ligne de support précédente. Le simple fait d’inspecter l’une ou l’autre des lignes ne met en scène ni ne désactive quoi que ce soit.
- En D, après la validation normale, le graphe a la première validation ; Staged Files dit Nothing is staged. A commit contains only staged changes. La modification de travail reste sous Unstaged Files.
- Faites not cliquez sur Stage File, Unstage File, Stage All Changes ou Discard Changes… dans cet aperçu du concept. Des instructions dédiées à la création et à la validation suivent dans les leçons 4 et 5.
Résultat
Vous pouvez prédire D à partir de C : le premier commit enregistre la ligne de support précédente, tandis que la modification de travail ultérieure reste. Votre propre projet reste dans l'état sans référentiel. Le graphique du futur projet est un aperçu explicitement étiqueté, et non votre travail terminé.
Erreurs courantes
- “Staged means all future edits are included.” Cela signifie que l'index contient une version sélectionnée à ce stade.
- “Empty cached diff means no edits.” Il indique que index et HEAD sont d'accord pour le chemin sélectionné ; inspectez également le différentiel de travail.
- “Two lists mean two files.” Il s'agit de deux comparaisons pour le même chemin.
- “A staged file is safely committed.” L'index est mutable ; il ne s'agit pas d'un historique durable ou d'une sauvegarde.
- “Commit means remote update.” Il n'y a pas de télécommande dans cet exemple et aucun push ne se produit.
Si quelque chose ne va pas
Si vous exécutez une requête de dépôt maintenant et obtenez « pas un référentiel git », gardez le point de contrôle de la leçon intact et lisez l'aperçu. Ne créez pas un deuxième référentiel pour faire réussir un exemple de commande.
Si votre propre projet affiche ultérieurement un statut différent, inspectez le chemin sélectionné avant d'essayer de le réparer. Avez-vous repris la scène après le montage ? Cela modifie l'instantané préparé et donc la validation prévue. Avez-vous utilisé une commande de scène automatique ? Il s’agit d’une opération différente de la validation normale d’index uniquement ici.
À ce stade, nous récupérons en identifiant la bonne comparaison, sans détruire le contenu. La leçon 5 montre des décisions de mise en scène sûres, et le chemin de récupération enseigne l'annulation et le reflog dont la portée est vérifiée. Les instantanés de la corbeille GitTree ne garantissent pas que chaque sauvegarde arbitraire de l'éditeur est récupérable.
Vérifiez votre compréhension
Répondez à chaque question, puis lisez pourquoi. Les questions marquées « Obligatoire » comptent pour terminer la leçon.
0 sur 6 corrects
Répondez correctement aux questions requises pour terminer la leçon.
Vérifié dans ce navigateur.
Pratique
Avant la leçon 5, prédisez sur papier : stagez un fichier, éditez-le après le staging, puis validez normalement. Quelle ligne de support est enregistrée et où reste la modification ultérieure ? Modifiez ensuite la séquence : remettez en scène le fichier modifié avant de le valider. Maintenant, la ligne enregistrée devrait être la plus récente, sans aucune différence de fonctionnement restante. La vidéo montre les deux itinéraires avec un résultat réel ; vous vérifierez les deux vous-même dans la leçon 5.
Votre propre confirmation : le site ne peut pas voir votre ordinateur.
Pour terminer la leçon, répondez correctement aux questions demandées et confirmez l'exercice pratique.
Récapitulatif
- Les fichiers de travail, l'index et l'historique enregistré sont des instantanés différents.
- La mise en scène capture les contenus choisis ; les modifications ultérieures ne le mettent pas à jour automatiquement.
- Inspectez les deux comparaisons et ne confondez pas une validation locale avec une action à distance.
En rapport
Termes du glossaire introduits
Arbre de travail — مجلد العمل; zone de transit / index — منطقة التجهيز / الفهرس ; commettre — إيداع; réf — مرجع; non suivi — غير مُتتبَّع ; mis en scène — مُجهَّز. HEAD reste l’identifiant technique littéral.
Transcription vidéo
La narration de la vidéo, repère par repère.
Afficher la transcription
- Prédire le commit en séparant les fichiers de travail, l'index et l'historique.
- Il s’agit d’un aperçu d’un futur projet. Votre votre propre référentiel n'est pas encore créé.
- Utilisez trois instantanés étiquetés, pas un fichier se déplaçant entre les cases.
- L'arbre de travail contient le les fichiers que vous modifiez et enregistrez sur le disque.
- L'index décrit l'instantané vous vous préparez pour un commit.
- Un commit enregistre un instantané, des métadonnées et sa relation avec l'histoire antérieure.
- Avant le premier commit, la branche a un nom mais pas encore de conseil enregistré.
- La mise en scène sélectionne le contenu actuel, pas modifications ultérieures, sans déplacer le fichier.
- Notre futur héros commence avec cette ligne de soutien.
- En A, le fichier n'existe que dans le arbre de travail et n’est pas suivi.
- Mettez en scène les fichiers de démonstration. L'indice détient désormais le héros original.
- Modifier après la mise en scène. Le dossier de travail change, mais l'index reste plus tôt.
- Sans mise en scène à nouveau, qui supporte la ligne serait-elle un enregistrement de validation normal ?
- Il enregistre la ligne préparée, pas la modification de travail ultérieure.
- Le statut court montre deux différents comparaisons pour le même chemin.
- Ici, A est l’addition par étapes ; M est la dernière modification fonctionnelle.
- Lire le fichier préparé directement à partir de l'index.
- L'index contient toujours la ligne de soutien précédente.
- Le diff ordinaire compare le travail fichier avec sa version préparée.
- Avant le premier commit, le cache Le résumé décrit le nouveau fichier intermédiaire.
- Maintenant, inspectez le même état dans un véritable enregistrement GitTree.
- Ouvrir Afficher les modifications de travail via la palette de commandes.
- La ligne non mise en scène montre le plus récent édition de travail par rapport à l'index.
- La ligne par étapes montre le précédent fichier préparé pour le premier commit.
- Un chemin peut apparaître dans les deux listes sans créer deux fichiers physiques.
- La lecture de l'une ou l'autre comparaison ne mettre en scène, supprimer ou supprimer du contenu.
- Un commit normal enregistre l'index et fait progresser la branche locale.
- Le sujet enregistré confirme le premier commit de héros existe.
- L'espace de tête compte : seul le la comparaison de travail diffère encore.
- Un diff en cache vide signifie que le l'index correspond à l'historique de ce chemin.
- Le diff de travail contient toujours la modification la plus récente. Rien n'a été perdu.
- L'histoire a désormais un engagement, tandis que le une modification de travail délibérée demeure.
- Changer la séquence : mettre en scène le fichier édité avant de valider.
- Maintenant, la nouvelle ligne est enregistrée et ce chemin n'a plus aucune différence.
- Aucune de ces étapes locales télécharge n'importe quoi sur un fournisseur.
- Votre propre leçon se termine toujours sans référentiel ; l'initialisation vient ensuite.
- Ne supprimez pas les fichiers et ne réinitialisez pas l'historique juste pour faire un exemple de correspondance.
- Fichiers de travail, contenu préparé et l’histoire enregistrée peut différer.
- Vérifiez les deux séquences et expliquer les deux colonnes d'état.
- Ensuite, créez GitTree fonctionnalités à l'intérieur GitTree, puis testez ce modèle vous-même.