Lab 02: Die Staging Area (Terminal)¶
In dieser Übung geht es darum, die Staging Area (auch Index genannt) zu verstehen. Git arbeitet mit drei Bereichen:
- Working Directory - hier bearbeitest du deine Dateien ganz normal.
- Staging Area - hier sammelst du mit
git adddie Änderungen, die in den nächsten Commit aufgenommen werden sollen. - Repository - hier landen die Änderungen dauerhaft, sobald du
git commitausführst.
Das Besondere: Eine Datei kann gleichzeitig unterschiedliche Änderungen im Working Directory und in der Staging Area haben. Das klingt zunächst verwirrend, ist aber nützlich, um gezielt zu kontrollieren, was in einen Commit einfließt.
Aufgaben¶
Öffne das Terminal im Verzeichnis labs/02-basic-staging/exercise.
Änderungen sichtbar machen mit git diff¶
- Schaue dir den Inhalt von
file.txtan. Was steht drin? - Überschreibe den Inhalt:
echo "v2" > file.txt - Führe
git diffaus. Dieser Befehl zeigt die Unterschiede zwischen dem Working Directory und der Staging Area. Du solltest die Änderung vonv1zuv2sehen. - Führe
git diff --stagedaus. Warum ist die Ausgabe leer?
Weil du noch nichts gestaged hast. Die Staging Area enthält noch den gleichen Stand wie der letzte Commit.
Staging und Working Directory unterschiedlich machen¶
- Stage die Änderung:
git add file.txt - Führe nun
git diffaus. Warum ist die Ausgabe jetzt leer? - Führe
git diff --stagedaus. Hier solltest du jetzt die Änderung sehen, denn sie liegt nun in der Staging Area. - Überschreibe den Inhalt erneut:
echo "v3" > file.txt - Führe
git diffaus. Was zeigt es an? - Führe
git diff --stagedaus. Was zeigt es an?
Die Staging Area enthält den Wert
v2(vom letztengit add), das Working Directory enthältv3, und das Repository enthält nochv1. Alle drei Bereiche haben einen unterschiedlichen Stand!
- Führe
git statusaus. Du wirst sehen, dassfile.txtzweimal in der Ausgabe erscheint - einmal als staged, einmal als modified.
Nimm' dir nun einen Moment Zeit, das sacken zu lassen. Der Unterschied zwischen Working Directory und Staging ist vielleicht erstmal nicht intuitiv verständlich, aber sehr wichtig und vor allem später auch sehr praktisch. Fange die Aufgabe gerne von vorne an mit dem Befehl
git reset --hard, um alle Schritte noch einmal zu sehen.
Änderungen aus der Staging Area entfernen¶
- Entferne die Änderung aus der Staging Area mit
git restore --staged file.txt. Die Datei im Working Directory bleibt unverändert - nur die Staging Area wird zurückgesetzt. - Was zeigt
git statusjetzt? Die Änderung sollte nur noch als unstaged angezeigt werden. - Stage die Änderung erneut und erstelle einen Commit.
- Wie sieht das Log jetzt aus?
Änderungen im Working Directory verwerfen¶
- Überschreibe den Inhalt nochmals:
echo "v4" > file.txt - Überprüfe den Inhalt der Datei.
- Was sagt
git status? - Führe
git restore file.txtaus. Damit wird die Datei im Working Directory auf den Stand des letzten Commits zurückgesetzt. - Was steht jetzt in
file.txt? - Was sagt
git status? Das Arbeitsverzeichnis sollte wieder sauber sein.
Merke:
git restore --stagedentfernt Änderungen aus der Staging Area (zurück ins Working Directory).git restoreohne--stagedverwirft Änderungen im Working Directory unwiderruflich.
Nützliche Befehle¶
| Befehl | Beschreibung |
|---|---|
git diff |
Unterschiede zwischen Working Directory und Staging Area |
git diff --staged |
Unterschiede zwischen Staging Area und letztem Commit |
git add <datei> |
Änderungen in die Staging Area aufnehmen |
git restore --staged <datei> |
Staging rückgängig machen |
git restore <datei> |
Änderungen im Working Directory verwerfen |
git status |
Überblick über den aktuellen Zustand |