Zum Inhalt springen
GitTree

Lektion 3 · Stiftungen

Sagen Sie voraus, was Ihr nächstes Commit enthalten wird

Trennen Sie die Dateien, die Sie bearbeiten, vom Snapshot, der für einen Commit vorbereitet wurde, und vom aufgezeichneten Verlauf. Erklären Sie mithilfe des zukünftigen GitTree Features-Helds, warum eine Datei sowohl bereitgestellt als auch geändert werden kann.

In diesem Browser gespeicherter Fortschritt.

Beim Abspielen wird das Video von YouTube geladen (erweiterter Datenschutzmodus).

Englische Erzählung · English and Arabic Bildunterschriften

Öffnen Sie die VideoseiteAuf YouTube ansehen

Was Sie lernen werden

  • Unterscheiden Sie den Arbeitsbaum, den Index und den zuletzt aufgezeichneten Commit.
  • Sagen Sie voraus, was sich durch Staging, Bearbeitung und einen normalen Commit ändert.
  • Lesen Sie beide Spalten des Kurzstatus, ohne davon auszugehen, dass inszeniert bedeutet, für immer gespeichert zu sein.
  • Verwenden Sie separate Vergleiche für nicht bereitgestellte und bereitgestellte Änderungen.

Bevor Sie beginnen

Lesen Sie zuerst Lektion 1; Lektion 2 bereitet Git und Ihre Commit-Identität vor. Sie beginnen mit no course repository und beenden ohne: Dies ist eine Konzeptlektion. Die erste praktische Initialisierung ist Lektion 4 in GitTree.

Diese Lektion zeigt eine Vorschau von vier Zuständen, die Sie in Lektion 5 selbst erstellen werden. Die folgenden Terminalausgaben und die GitTree-Bildschirme im Video stammen aus einer Einwegkopie des zukünftigen Projekts: Die Befehle und Bildschirme wurden mit Git 2.52.0 und GitTree 2.0 auf Ubuntu 24.04 aufgezeichnet. Sie wurden nicht am macOS ausgeführt. Jede dieser Szenen im Video ist mit „Vorschau auf zukünftige Lektion 5“ gekennzeichnet. Führen Sie die Future-State-Befehle nicht in einem nicht verwandten Arbeits-Repository aus und initialisieren Sie jetzt kein zusätzliches Übungs-Repository. Sehen und lesen Sie die Vorschau und wiederholen Sie dann die Abfragen, wenn Lektion 5 diese Zustände erreicht.

Das überprüfte Minimum von GitTree beträgt Git 2.39.0. Drücken Sie bei macOS die Befehlstaste, wobei Windows und Linux die Strg-Taste verwenden. Die Befehle wurden nicht auf Windows ausgeführt. Für das lokale Modell ist kein Anbieter, Konto, Pro oder Testversion erforderlich.

Konzept: drei Orte, kein Verschieben einer Datei

Ihr working tree sind die Projektdateien auf der Festplatte. Durch Bearbeiten und Speichern einer Datei werden diese Bytes geändert. Git hat sie nicht unbedingt für einen Commit ausgewählt.

Das index, auch staging area genannt, beschreibt den nächsten Snapshot, den Sie vorbereiten. Beim Staging einer Datei wird der Indexeintrag anhand des aktuellen Inhalts aktualisiert. Es handelt sich nicht um ein dauerhaftes Abonnement für spätere Bearbeitungen.

Ein commit zeichnet einen Baum sowie Metadaten und übergeordnete Beziehungen auf. HEAD identifiziert Ihre aktuelle Position, normalerweise über den ausgecheckten Zweig. Vor dem ersten Commit kann HEAD einen ungeborenen Zweig benennen, obwohl kein Zweig-Commit vorhanden ist.

Eine nützliche Analogie ist ein Arbeitsentwurf, eine vorbereitete Ausgabe und eine aufgezeichnete Ausgabe. Nehmen Sie die Analogie nicht wörtlich: Beim Staging wird die Arbeitsdatei nicht verschoben oder gelöscht. Bei einem normalen verfolgten Pfad können die drei Versionen unabhängig voneinander übereinstimmen oder voneinander abweichen.

Wir verwenden ein normales Commit des vorbereiteten Index, without -a, explizite Pfadargumente, automatisches Staging oder Amend. Andere Commit-Modi sind in diesem Beispiel nicht austauschbar. Gits Add-Referenz erklärt das Snapshot-at-Staging-Verhalten; die Diff-Referenz unterscheidet die Vergleiche.

Das genaue Zukunftsbeispiel

Die Datei ist index.html. Der Titel bleibt Understand every change.. Die unterstützende Zeile hat zwei Versionen:

Aktenauszug · html
<p id="hero-copy">A clear view of Git history.</p>

Spätere Bearbeitung:

Aktenauszug · html
<p id="hero-copy">Choose one change, then check what Git saved.</p>

Hierbei handelt es sich um Zeilenauszüge aus der vollständigen Originalseite und der vollständig bearbeiteten Seite des Projekts, nicht um Ersatzdateien, die über die gesamte Seite eingefügt werden können.

Zukünftiger ZustandLetzter CommitIndexArbeitsdateiKurzstatus für index.html
A: Dateien erstellenKein CommitKein EintragOriginalseite?? index.html
B: Bühnen-DemodateienKein CommitOriginalseiteOriginalseiteA index.html
C: Nach dem Staging bearbeitenKein CommitOriginalseitebearbeitete SeiteAM index.html
D: Den Index festschreibenOriginalseiteOriginalseitebearbeitete Seite M index.html

Das vollständige Projekt enthält auch eine README-Datei. Beide Dateien werden vor dem ersten Commit bereitgestellt. Statusbeispiele sind auf index.html beschränkt. In D ist die README-Datei sauber und index.html behält seine absichtliche, nicht bereitgestellte Bearbeitung bei.

Für die hier aufgeführten normalen, konfliktfreien Zeilen vergleicht die erste Spalte des Kurzstatus den Index mit dem HEAD. Der zweite vergleicht den Arbeitsbaum mit dem Index. ?? ist die spezielle nicht verfolgte Markierung, nicht zwei gewöhnliche Änderungsspalten. Ein führender Bereich in M-Angelegenheiten.

Was ändert sich

  • Stage: aktualisiert den Indexinhalt; Kein Festschreiben oder Verzweigen, kein Umschreiben der Arbeitsdatei.
  • Edit after staging: aktualisiert nur Arbeitsbytes; Der vorbereitete Index bleibt die frühere Version.
  • Normal commit: zeichnet den vorbereiteten Snapshot auf und aktualisiert den aktuellen lokalen Zweig. Der Index bleibt dieser Schnappschuss; spätere Bearbeitungen, die nichts mit der Arbeit zu tun haben, bleiben erhalten.
  • Remote: Keiner dieser lokalen Schritte überträgt, ruft oder erstellt eine Remote-Tracking-Referenz. Dieses Beispiel hat keine Fernbedienung.

Der Index ist mehr als eine Liste von Namen. Erweiterte Konflikte können mehrere Indexstufen umfassen; Wir modellieren hier normale Dateieinträge der Stufe Null, keine ungelösten Zusammenführungen.

Im Terminal – Vorschau des zukünftigen Kontrollpunkts

Do not execute these in the still-uninitialized learner project. Sie wurden in einer Einwegkopie ausgeführt, die die vollständige README-Datei und beide Versionen der Seite enthielt. Lektion 5 liefert die eigentlichen Erstellungs- und Bereitstellungsschritte.

Überprüfen Sie im zukünftigen Zustand C die beiden Versionen

Command · bash
git status --short -- index.html

Beobachtet:

Ausgabe
AM index.html

Lesen Sie die vorbereitete Datei direkt:

Command · bash
git show :index.html

Beobachtet full output:

Ausgabe
<!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>

Vergleichen Sie den Arbeitsbaum mit dem Index:

Command · bash
git diff -- index.html

Beobachtet:

Ausgabe
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>

Die oben genannten Objektabkürzungen sind tatsächliche Datei-Blob-IDs aus genau diesen LF-Dateikörpern und keine erfundenen Commit-SHAs. Die Länge/Ausgabe Ihrer Abkürzung kann je nach Konfiguration unterschiedlich sein.

Untersuchen Sie die gestaffelte Hinzufügung relativ zum leeren Verlauf vor dem ersten Commit:

Command · bash
git diff --cached --stat -- index.html

Beobachtet:

Ausgabe
 index.html | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

--stat fasst zusammen; Es handelt sich nicht um eine Inhaltsüberprüfung. Der vollständig bereitgestellte Snapshot ist die frühere Datei, die von git show :index.html angezeigt wird.

Überprüfen Sie im zukünftigen Zustand D, was aufgezeichnet wurde

Nach dem normalen Commit des vorbereiteten Index in Lektion 5:

Command · bash
git log -1 --format=%s
git status --short -- index.html
git diff --cached -- index.html

Beobachtete die ersten beiden Ausgaben in der Reihenfolge:

Ausgabe
feat: add the GitTree Features hero
 M index.html

Der dritte Befehl gibt no output aus und wird erfolgreich beendet: Index und HEAD stimmen für diesen Pfad überein. Das bedeutet nicht, dass der Arbeitsbaum sauber ist. Das funktionierende Diff zeigt immer noch die obige Bearbeitung der unterstützenden Linie. Dies ist ein häufiger Grund dafür, dass „der Commit meine letzte Bearbeitung verpasst hat“ tatsächlich das korrekte Git-Verhalten ist.

In GitTree

In Ihrem aktuellen Nicht-Repository-Kontext

  1. Halten Sie New Tab geöffnet und verwenden Sie bei Bedarf Command+T / Ctrl+T (tab.new).
  2. Öffnen Sie Feature Guide mit Option+H auf macOS oder Alt+H an anderer Stelle oder öffnen Sie Command Palette… mit Command+Shift+P / Ctrl+Shift+P und wählen Sie Feature Guide.
  3. Geben Sie in Features stage in Search features ein und lesen Sie Stage and commit. Führen Sie keine Initialisierungsaktion aus. Die Karte ist eine Orientierung, kein Beweis einer inszenierten Akte.
  4. Drücken Sie Escape, um die Anleitung zu schließen. Ihr Kurs-Repository existiert immer noch nicht.

Die gleichen Zustände in GitTree (im Video gezeigt)

Das Video öffnet eine Einwegkopie des Zukunftsprojekts in GitTree mit der Bezeichnung „Vorschau auf Zukunftslektion 5“. Es ist nicht Ihr Projekt und keine Aufzeichnung Ihrer Arbeit.

  1. Öffnen Sie unter C Command Palette…, geben Sie Show Working Changes ein und wählen Sie genau diesen Befehl (wip.show). Für diesen Befehl ist keine Standardverknüpfung aktiviert.
  2. Untersuchen Sie Unstaged Files und Staged Files im rechten Bereich. index.html erscheint in beiden Fällen, da es zwei unterschiedliche Vergleiche gibt; Es handelt sich nicht um zwei physische Dateien.
  3. Klicken Sie auf die entsprechende Zeile in Unstaged Files. Erwarten Sie, dass der mittlere Unterschied die Änderung der Originalseite zur bearbeiteten Seite anzeigt, einschließlich der Änderung der Stützlinie.
  4. Klicken Sie auf die entsprechende Zeile in Staged Files. Erwarten Sie den gestaffelten Zusatz, der die frühere unterstützende Zeile enthält. Durch die bloße Inspektion einer der beiden Zeilen wird nichts aktiviert oder deaktiviert.
  5. Bei D erfolgt nach dem normalen Commit der erste Commit für den Graphen; Staged Files sagt Nothing is staged. A commit contains only staged changes. Die Arbeitsbearbeitung bleibt unter Unstaged Files.
  6. Klicken Sie in dieser Konzeptvorschau auf not, Stage File, Unstage File, Stage All Changes oder Discard Changes…. Spezielle Anweisungen zum Erstellen und Festschreiben folgen in den Lektionen 4 und 5.

Ergebnis

Sie können D aus C vorhersagen: Der erste Commit zeichnet die frühere unterstützende Zeile auf, während die spätere Arbeitsbearbeitung erhalten bleibt. Ihr eigenes Projekt bleibt im Status „Kein Repository“. Bei der Grafik des zukünftigen Projekts handelt es sich um eine ausdrücklich gekennzeichnete Vorschau, nicht um Ihre abgeschlossene Arbeit.

Häufige Fehler

  • “Staged means all future edits are included.” Dies bedeutet, dass der Index zu diesem Zeitpunkt eine ausgewählte Version enthält.
  • “Empty cached diff means no edits.” Es heißt, dass Index und HEAD für den ausgewählten Pfad übereinstimmen; Überprüfen Sie auch das funktionierende Diff.
  • “Two lists mean two files.” Es handelt sich um zwei Vergleiche für denselben Pfad.
  • “A staged file is safely committed.” Der Index ist veränderbar; Es handelt sich nicht um einen dauerhaften Verlauf oder ein Backup.
  • “Commit means remote update.” In diesem Beispiel gibt es keine Fernbedienung und es findet kein Push statt.

Wenn etwas schief geht

Wenn Sie jetzt eine Repo-Abfrage ausführen und „kein Git-Repository“ erhalten, lassen Sie den Lektionsprüfpunkt intakt und lesen Sie die Vorschau. Erstellen Sie kein zweites Repository, damit ein Beispielbefehl erfolgreich ist.

Wenn Ihr eigenes Projekt später einen anderen Status anzeigt, überprüfen Sie den ausgewählten Pfad, bevor Sie versuchen, ihn zu reparieren. Hast du nach dem Schnitt noch einmal inszeniert? Dadurch ändert sich der vorbereitete Snapshot und damit das vorhergesagte Commit. Haben Sie einen automatischen Bühnenbefehl verwendet? Das ist hier ein anderer Vorgang als das normale Nur-Index-Commit.

In dieser Phase erholen wir uns, indem wir den richtigen Vergleich identifizieren und nicht den Inhalt zerstören. Lektion 5 zeigt sichere Staging-Entscheidungen und der Wiederherstellungspfad lehrt das bereichsüberprüfte Rückgängigmachen und erneute Protokollieren. GitTree Papierkorb-Snapshots sind kein Versprechen, dass jede beliebige Editor-Speicherung wiederherstellbar ist.

Überprüfen Sie Ihr Verständnis

Beantworten Sie jede Frage und lesen Sie dann, warum. Mit „erforderlich“ gekennzeichnete Fragen zählen zum Abschluss der Lektion.

  1. Frage 1 von 6

    Welcher Snapshot liefert den hier modellierten normalen Commit?

    Wählen Sie eine Antwort.

  2. Frage 2 von 6

    Was hat sich bei C durch die Post-Staging-Bearbeitung geändert?

    Wählen Sie jede zutreffende Antwort aus.

  3. Frage 3 von 6
    Erforderlich

    Bei C wird der Index ohne erneutes Staging festgeschrieben. Welche Zeile wird aufgezeichnet?

    Wählen Sie eine Antwort.

  4. Frage 4 von 6
    Erforderlich

    Beginnen Sie bei C, stellen Sie die bearbeitete Version bereit und übernehmen Sie dann den Commit. Was ändert sich?

    Wählen Sie eine Antwort.

  5. Frage 5 von 6

    Bei D ist das zwischengespeicherte Diff leer, aber der Status ist Leerzeichen, dann M. Warum?

    Wählen Sie eine Antwort.

  6. Frage 6 von 6
    Erforderlich

    Folgen Sie A → B → C und führen Sie dann das normale Commit des Index durch. Welche Beobachtungen beweisen D?

    Wählen Sie jede zutreffende Antwort aus.

0 von 6 korrekt

Beantworten Sie die erforderlichen Fragen richtig, um die Lektion abzuschließen.

In diesem Browser überprüft.

Üben

Machen Sie vor Lektion 5 eine Vorhersage auf Papier: Stellen Sie eine Datei bereit, bearbeiten Sie sie nach dem Staging und führen Sie dann einen normalen Commit durch. Welche unterstützende Zeile wird aufgezeichnet und wo bleibt die spätere Bearbeitung? Ändern Sie dann die Reihenfolge: Stellen Sie die bearbeitete Datei erneut bereit, bevor Sie sie festschreiben. Jetzt sollte die aufgezeichnete Zeile die neuere sein, ohne dass ein Unterschied in der Arbeitsweise verbleibt. Das Video zeigt beide Routen mit realer Leistung; Sie werden beides in Lektion 5 selbst überprüfen.

Ihre eigene Bestätigung: Die Website kann Ihren Computer nicht sehen.

Um die Lektion abzuschließen, beantworten Sie die erforderlichen Fragen richtig und bestätigen Sie die praktische Übung.

Zusammenfassung

  • Arbeitsdateien, der Index und der aufgezeichnete Verlauf sind unterschiedliche Schnappschüsse.
  • Die Inszenierung erfasst die gewählten Inhalte; Bei späteren Änderungen wird es nicht automatisch aktualisiert.
  • Überprüfen Sie beide Vergleiche und verwechseln Sie einen lokalen Commit nicht mit einer Remote-Aktion.

Glossarbegriffe eingeführt

Arbeitsbaum – مجلد العمل; Bereitstellungsbereich / Index – منطقة التجهيز / الفهرس; begehen – إيداع; ref – مرجع; untracked – غير مُتتبَّع; inszeniert – مُجهَّز. HEAD bleibt der wörtliche technische Bezeichner.

Videotranskript

Die Erzählung des Videos, Stichwort für Stichwort.

Zeigen Sie das Transkript
  1. Sagen Sie den Commit durch Trennen voraus Arbeitsdateien, den Index und den Verlauf.
  2. Dies ist eine zukünftige Projektvorschau. Ihr Das eigene Repository ist noch nicht erstellt.
  3. Verwenden Sie drei beschriftete Snapshots, keine Datei, die zwischen Boxen verschoben wird.
  4. Der Arbeitsbaum enthält die Dateien, die Sie bearbeiten und auf der Festplatte speichern.
  5. Der Index beschreibt den Schnappschuss Sie bereiten sich auf einen Commit vor.
  6. Ein Commit zeichnet einen Snapshot und Metadaten auf und seine Beziehung zur früheren Geschichte.
  7. Vor dem ersten Commit die Verzweigung hat einen Namen, aber noch keinen aufgezeichneten Tipp.
  8. Staging wählt aktuelle Inhalte aus, nicht spätere Änderungen, ohne die Datei zu verschieben.
  9. Unser zukünftiger Held beginnt mit dieser unterstützenden Linie.
  10. Bei A existiert die Datei nur im Arbeitsbaum und nicht verfolgt.
  11. Stellen Sie die Demodateien bereit. Der Index enthält nun den ursprünglichen Helden.
  12. Nach der Bereitstellung bearbeiten. Die Arbeitsdatei ändert sich, aber der Index bleibt früher.
  13. Ohne erneute Inszenierung, was unterstützend Zeile würde ein normaler Commit-Datensatz?
  14. Es zeichnet die vorbereitete Linie auf, nicht die spätere Arbeitsbearbeitung.
  15. Kurzstatus zeigt zwei verschiedene Vergleiche für den gleichen Weg.
  16. Hier ist A die abgestufte Addition; M ist die spätere Arbeitsmodifikation.
  17. Lesen Sie die vorbereitete Datei direkt aus dem Index.
  18. Der Index enthält noch die frühere Stützlinie.
  19. Der gewöhnliche Diff vergleicht die Arbeitsweise Datei mit ihrer vorbereiteten Version.
  20. Vor dem ersten Commit wird das zwischengespeicherte Die Zusammenfassung beschreibt die bereitgestellte neue Datei.
  21. Überprüfen Sie nun den gleichen Zustand in einer echten GitTree-Aufnahme.
  22. Öffnen Sie Arbeitsänderungen anzeigen über die Befehlspalette.
  23. Die nicht bereitgestellte Zeile zeigt die neuere Version Bearbeitung anhand des Indexes.
  24. Die abgestufte Zeile zeigt das frühere Datei, die für das erste Commit vorbereitet wurde.
  25. Ein Pfad kann in beiden Listen erscheinen ohne zwei physische Dateien zu erstellen.
  26. Das Lesen beider Vergleiche ist nicht der Fall Inhalte inszenieren, aus der Bereitstellung entfernen oder verwerfen.
  27. Ein normaler Commit zeichnet den Index auf und fördert die örtliche Niederlassung.
  28. Das aufgenommene Motiv bestätigt Der erste Helden-Commit existiert.
  29. Auf das führende Leerzeichen kommt es an: nur das Der Arbeitsvergleich ist immer noch unterschiedlich.
  30. Ein leerer zwischengespeicherter Diff bedeutet Der Index stimmt mit dem Verlauf für diesen Pfad überein.
  31. Das funktionierende Diff enthält noch die neuere Bearbeitung. Nichts ging verloren.
  32. Die Geschichte hat jetzt ein Commit, während die Die bewusste Bearbeitung bleibt bestehen.
  33. Ändern Sie die Reihenfolge: Bühnenbild bearbeitete Datei vor dem Festschreiben.
  34. Jetzt wird die neuere Zeile aufgezeichnet, und Dieser Weg hat keinen verbleibenden Unterschied.
  35. Keiner dieser lokalen Schritte lädt alles zu einem Anbieter hoch.
  36. Ihre eigene Lektion endet immer noch ohne a Aufbewahrungsort; Als nächstes folgt die Initialisierung.
  37. Verwerfen Sie keine Dateien und setzen Sie den Verlauf nicht zurück nur um eine Beispielübereinstimmung zu ermöglichen.
  38. Arbeitsdateien, aufbereitete Inhalte und der aufgezeichnete Verlauf können unterschiedlich sein.
  39. Überprüfen Sie beide Sequenzen und Erklären Sie die beiden Statusspalten.
  40. Erstellen Sie als Nächstes GitTree Features darin GitTree, dann testen Sie dieses Modell selbst.