Einführung
DAYLIGHT CAFE korrigiert den Preis seines Flat White. Die Preisänderung und eine passende Speisekarte zum Mitnehmen als Download sind bereits vorbereitet. In derselben Menüdatei steht außerdem eine noch unfertige Ankündigung für saisonale Getränke. Private Verkostungsnotizen dürfen nicht in den öffentlichen Commit gelangen.
Du wählst genau aus, was in einen Git-Commit aufgenommen wird, und bewahrst dabei die übrige Arbeit. Du solltest dich grundlegend im Terminal bewegen können und mit einfachen Textdateien vertraut sein. Arbeitsbaum, Staging-Bereich und Commit-Snapshots von Git werden hier erklärt; du brauchst weder Kenntnisse in der Website-Programmierung noch ein GitHub-Konto.
Verwende Workspace für Befehle, Working Copy zum Anzeigen der bearbeiteten Dateien und Committed Menu zum Anzeigen genau der Dateien, die im aktuellen Commit gespeichert sind. Beide Seiten lesen echte Inhalte und ergänzen niemals fehlende Dateien. Das Café, die Illustration und die Speisekarte sind eigens erstelltes Übungsmaterial. Die Beschriftungen der Oberfläche und die Laufzeitausgaben bleiben auf Englisch.
Die beiden Menüversionen vergleichen
In diesem Schritt vergleichst du die öffentliche Speisekarte mit den vorbereiteten Arbeitsdateien und legst anschließend eine nur für dieses Repository geltende Autorenidentität fest.
Öffne Committed Menu. Der Flat White kostet EUR 3.80, und die Tafel für saisonale Angebote besagt, dass die Getränke noch geplant werden. Öffne mit Download takeaway menu die tatsächliche Textdatei zum Herunterladen. Auch dort steht EUR 3.80.
Wechsle zu Working Copy. Der Flat White kostet jetzt EUR 4.20, aber die Tafel für saisonale Angebote enthält außerdem eine Ankündigung für eine private Verkostung. Nur die Preiskorrektur ist freigegeben. Beide öffentlichen Menüdateien müssen EUR 4.20 ausweisen; der saisonale Entwurf und tasting-notes.txt müssen auf deinem Rechner außerhalb des Commits erhalten bleiben.
In Working Copy bleibt die unfertige saisonale Ankündigung sichtbar:

Wechsle zu Workspace. Dieser Tab öffnet sich in /home/labex/project/daylight-menu, dem vorbereiteten Git-Repository. Gib mit pwd dein aktuelles Verzeichnis aus:
pwd
Falls du in ein anderes Verzeichnis gewechselt bist, kehre mit dem vollständigen Pfad zurück:
cd /home/labex/project/daylight-menu
Ein Repository speichert die Snapshots und den Verlauf eines Projekts. Der Arbeitsbaum (Working Tree) umfasst die Dateien, die du bearbeiten kannst. git status --short fasst zusammen, wie sich diese Dateien vom letzten Commit und vom Staging-Bereich unterscheiden. --short fordert eine kompakte Anzeige an:
git status --short
Du solltest die geänderten Dateien menu.txt und menu-download.txt sowie ?? tasting-notes.txt sehen. ?? bedeutet, dass die Notizen unversioniert sind: Git hat sie noch nicht in einen Snapshot aufgenommen. Eine geänderte Datei wird nicht automatisch in einen Commit aufgenommen.
Git speichert in jedem Commit einen Autorennamen und eine E-Mail-Adresse. git config --local speichert eine Einstellung nur in diesem Repository. Die Anführungszeichen halten die beiden Wörter des Namens zusammen. Verwende diese fiktive Übungsidentität:
git config --local user.name "Alex Morgan"
git config --local user.email "alex@example.test"
Lies die Werte wieder aus:
git config --local user.name
git config --local user.email
Die erwarteten Werte sind Alex Morgan und alex@example.test. Dabei werden weder eine globale Git-Identität noch ein externes Konto geändert. Alle weiteren Befehle in diesem Lab gehören in dasselbe Repository.
Nur den freigegebenen Preisänderungsblock vormerken
In diesem Schritt nimmst du die freigegebene Preiskorrektur in den Staging-Bereich auf, ohne den saisonalen Entwurf einzubeziehen.
Bleibe in Workspace. Ein Commit ist ein gespeicherter Snapshot. HEAD bezeichnet den aktuellen Commit. Der Staging-Bereich, auch Index genannt, enthält genau den Snapshot, den der nächste Commit speichern wird. Beim Vormerken werden ausgewählte Inhalte in den Index kopiert; andere Änderungen an den Arbeitsdateien werden dadurch nicht gelöscht.
--no-pager ist eine Git-Option, die Ausgaben direkt anzeigt, statt ein interaktives Anzeigeprogramm zu öffnen. Verwende sie für die folgenden Vergleiche. Falls ein früherer Git-Befehl bereits ein Anzeigeprogramm geöffnet hat, das (END) anzeigt, drücke q, um zur Shell zurückzukehren; gib den nächsten Befehl nicht in diesem Anzeigeprogramm ein.
git --no-pager diff vergleicht den Arbeitsbaum mit dem Index. Das Trennzeichen -- legt fest, dass das folgende Argument ein Dateiname und keine Git-Option ist:
git --no-pager diff -- menu.txt
Achte auf zwei Gruppen von Änderungen, sogenannte Hunks oder Änderungsblöcke. Eine mit - beginnende Zeile zeigt den bisherigen Inhalt; eine mit + beginnende Zeile zeigt den vorgeschlagenen Inhalt. Der erste Hunk ändert den Preis des Flat White von 3.80 auf 4.20. Der zweite ändert die saisonale Ankündigung. Die Zeile mit @@ kennzeichnet die Position des jeweiligen Hunks und gehört nicht zum Menüinhalt.
git add --patch fragt dich, welche Hunks in den Index kopiert werden sollen. Der Befehl ändert den vorgemerkten Snapshot, lässt aber die vollständige Arbeitsdatei unverändert:
git add --patch menu.txt
Gib beim Hunk mit dem Flat-White-Preis y ein und drücke Enter, um ihn vorzumerken. Gib beim Hunk mit der saisonalen Tafel n ein und drücke Enter, damit er nicht vorgemerkt wird. Lies den angezeigten Text vor jeder Antwort; y bedeutet Ja und n bedeutet Nein.
Prüfe nun den tatsächlich vorgemerkten Unterschied. --cached wählt den Vergleich zwischen HEAD und Index aus:
git --no-pager diff --cached -- menu.txt
Es sollte nur die Preiskorrektur erscheinen. Vergleiche sie mit den Änderungen, die noch nicht vorgemerkt sind:
git --no-pager diff -- menu.txt
Hier sollte nur die saisonale Ankündigung erscheinen. Bisher wurde noch nichts committet.
Falls du den falschen Hunk ausgewählt hast, stelle mit git restore --staged den Indexeintrag dieser Datei aus HEAD wieder her. --staged wirkt nur auf den Index, sodass Preiskorrektur und Entwurf in der Arbeitsdatei erhalten bleiben:
git restore --staged menu.txt
Wiederhole anschließend git add --patch menu.txt, wähle den Preis-Hunk aus und prüfe erneut beide Unterschiede. Vor dem Commit ist diese Korrektur sicher, weil sie deine Arbeitsdateien nicht verwirft.
Den passenden Download zum Mitnehmen aufnehmen
In diesem Schritt vervollständigst du den nächsten Commit, indem du den passenden Download hinzufügst und alle vorgemerkten Dateien überprüfst.
Bleibe in Workspace. Das Café bietet sowohl eine Webseite als auch eine Speisekarte zum Mitnehmen an. Würde nur eine der beiden Korrekturen veröffentlicht, blieben zwei unterschiedliche Preise bestehen. cat gibt eine kleine Textdatei aus:
cat menu-download.txt
Sie enthält bereits Flat white: EUR 4.20. Diese Datei enthält nur die freigegebene Korrektur. Merke deshalb die gesamte Datei vor:
git add menu-download.txt
Der einfache Befehl git add merkt die angegebene Datei vor. Vermeide es, das gesamte Verzeichnis vorzumerken: Es enthält auch private Notizen und die unfertige Ankündigung.
--name-only listet die Pfade eines Unterschieds ohne deren Inhalt auf. Prüfe die vorgemerkten Pfade:
git --no-pager diff --cached --name-only
Die Liste darf nur menu-download.txt und menu.txt enthalten. Prüfe anschließend den vollständigen vorgemerkten Unterschied dieser Dateien:
git --no-pager diff --cached
Beide öffentlichen Versionen sollten denselben Preis von 4.20 enthalten. Die saisonale Ankündigung und die Verkostungsnotizen dürfen nicht erscheinen.
Um eine vollständige vorgemerkte Datei statt eines Unterschieds zu lesen, verwende git --no-pager show mit :menu.txt. Der führende Doppelpunkt wählt den Indexeintrag aus:
git --no-pager show :menu.txt
Die vorgemerkte Speisekarte kombiniert EUR 4.20 mit dem ursprünglichen saisonalen Text Seasonal drinks are being planned. Diese Kombination zeigt, dass sich der Index vom Arbeitsbaum unterscheiden kann.
Falls du versehentlich die privaten Notizen vorgemerkt hast, entferne sie aus dem Index, ohne die Datei zu löschen:
git restore --staged tasting-notes.txt
Führe diese Korrektur nur aus, wenn die Notizen vorgemerkt wurden; andernfalls kann Git zu Recht melden, dass der unversionierte Pfad unbekannt ist. Prüfe vor dem Fortfahren erneut git --no-pager diff --cached. Ein falsch geschriebener Dateiname ändert nichts: Ermittle mit git status --short den tatsächlichen Namen und wiederhole den beabsichtigten Befehl.
Commit erstellen und das tatsächliche öffentliche Ergebnis prüfen
In diesem Schritt speicherst du einen gezielten Commit und überprüfst, dass die unfertige Arbeit danach weiterhin vorhanden ist.
Bleibe in Workspace. git commit speichert den vollständigen Index als neuen Snapshot. Mit -m gibst du eine kurze erklärende Nachricht an; die Anführungszeichen halten diese Nachricht zusammen:
git commit -m "Correct the flat white price"
Git meldet einen neuen Commit und zwei geänderte Dateien. Sein Hash ist jeweils unterschiedlich. Die Nachricht beschreibt die Arbeit, entscheidend ist jedoch der tatsächliche Inhalt des Snapshots.
git --no-pager show kann eine Datei direkt aus einem Commit lesen. HEAD:menu.txt bezeichnet die Datei menu.txt, die im aktuellen Commit gespeichert ist:
git --no-pager show HEAD:menu.txt
git --no-pager show HEAD:menu-download.txt
Beide zeigen den freigegebenen Preis 4.20. Die im Commit gespeicherte saisonale Ankündigung besagt weiterhin, dass die Getränke noch geplant werden.
Prüfe die verbleibende Arbeit:
git status --short
Erwarte M menu.txt und ?? tasting-notes.txt. Die beiden Statusspalten unterscheiden links vorgemerkte Änderungen von rechts stehenden, nicht vorgemerkten Änderungen im Arbeitsbaum. Das M in der zweiten Spalte bedeutet, dass der saisonale Entwurf weiterhin nicht vorgemerkt ist. Die Notizen sind nach wie vor unversioniert. Ein leerer Status wäre bei dieser Aufgabe falsch: Er würde bedeuten, dass die zu erhaltende unfertige Arbeit verschwunden oder in einen Commit gelangt ist.
Lies den verbleibenden Unterschied und die Notizen:
git --no-pager diff -- menu.txt
cat tasting-notes.txt
Wechsle zu Committed Menu und aktualisiere die Seite. Prüfe, dass der Flat White EUR 4.20 kostet und die Tafel für saisonale Angebote ihren ursprünglichen öffentlichen Text behält. Lade die Speisekarte zum Mitnehmen erneut herunter und prüfe denselben Preis in der echten Datei. Wechsle zu Working Copy: Dort ist der Entwurf für die private Verkostung weiterhin sichtbar.
Die im Commit gespeicherte Speisekarte zeigt den freigegebenen Preis und die ursprüngliche öffentliche saisonale Ankündigung:

Du hast jetzt eine vollständige öffentliche Korrektur erstellt und die übrige Arbeit unversehrt erhalten. Ein Push ist nicht erforderlich; dieses Projekt vermittelt die Grenzen lokaler Commits. Die Zusammenarbeit über ein Remote-Repository gehört zu einem eigenen Projekt.
Zusammenfassung
Du hast Arbeitsdateien, Index und Commit voneinander unterschieden, einen einzelnen Änderungsblock ausgewählt, einen passenden Download aufgenommen und die tatsächlich im Commit gespeicherte Speisekarte überprüft. Der saisonale Entwurf und die privaten Notizen blieben außerhalb des Commits. Ein sinnvoller Commit enthält die vollständige beabsichtigte Änderung, nicht jede zufällig geänderte Datei.



