Ein Durchlauf des Tutorials Notfall-Branchwechsel: wie git stash unfertige Änderungen beiseitelegt, damit Sie Branches wechseln können, und wie Sie die Arbeit zurückholen.
Dieses Szenario behandelt das Problem „ich muss jetzt sofort den Branch wechseln, bin aber mitten in etwas". Sie haben unfertige Arbeit im Arbeitsbaum und brauchen einen sauberen Branch, um wegzukommen. git stash ist genau dafür da.
Die Situation
Stashen Sie Ihre laufende Arbeit, um mit einem sauberen Arbeitsbaum Branches zu wechseln.
Sie sind auf dem Branch feature/contact-form und mittendrin, ein Kontaktformular in index.html zu ergänzen. Die Änderung ist nicht commitet und noch nicht commit-reif. Etwas Dringendes verlangt nun, dass Sie auf einem anderen Branch sind.
Sie wollen kein halbes Feature commiten und auch nicht die Arbeit verlieren. Sie müssen sie beiseitelegen, wechseln und später wieder aufnehmen.
Führen Sie zuerst git status aus, um die unkommitete Änderung an index.html zu sehen. Genau das wird der Stash für Sie aufbewahren.
Der Ablauf Schritt für Schritt
git stash pop holt Ihre gestashten Änderungen zurück in den Arbeitsbaum.
Sehen, was nicht commitet ist
git status
index.html erscheint als modifiziert. Diese Arbeit in Bearbeitung ist es, die Sie gleich stashen.
Die Änderungen stashen
git stash
Git sichert Ihre unkommiteten Änderungen auf dem Stash-Stapel und stellt einen sauberen Arbeitsbaum her. Der Branch sieht nun aus, als hätten Sie das Formular noch gar nicht begonnen.
Den Branch wechseln und die andere Arbeit erledigen
git checkout main
Bei sauberem Arbeitsbaum ist der Branchwechsel sofort und sicher. Sie können die dringende Aufgabe auf main erledigen.
Zurückkommen und die Arbeit wiederherstellen
git checkout feature/contact-form
git stash pop
Zurück auf dem Feature-Branch wendet git stash pop Ihre Kontaktformular-Änderungen wieder an und entfernt sie aus dem Stash. Sie sind genau dort, wo Sie aufgehört haben.
Warum stashen statt commiten
Ein Commit ist ein dauerhafter Punkt in der Historie; Stashen ist ein temporärer Aufbewahrungsort:
- Commit, wenn die Arbeit ein sinnvoller, abgeschlossener Schritt ist.
- Stash, wenn Sie unfertige Arbeit nur kurz parken müssen.
git stash list zeigt alles, was Sie gestasht haben. Sie können mehrfach stashen, und jeder Eintrag wartet, bis Sie pop oder drop ausführen.
pop entfernt den Eintrag nach dem Wiederanwenden. Tritt beim Pop ein Konflikt auf, lösen Sie ihn wie einen Merge-Konflikt; der Stash-Eintrag bleibt erhalten, bis das Pop erfolgreich ist.
Der Stash-Werkzeugkasten
Jeder Stash wird auf einen Stapel gelegt: stash@{0}, stash@{1} und so weiter.
Stash ist mehr als push und pop. Die Befehle, zu denen Sie greifen werden:
- Arbeit sichern —
git stash (getrackte Änderungen), git stash -u (auch ungetrackte Dateien), git stash push -m "message" (benannt, später leichter zu finden)
- Sehen, was Sie gestasht haben —
git stash list und git stash show -p stash@{0}, um einen Diff anzuzeigen
- Zurückholen —
git stash pop (anwenden und entfernen) oder git stash apply (anwenden und behalten); einen bestimmten mit git stash apply stash@{1} ansteuern
- Aufräumen —
git stash drop stash@{0} entfernt einen Eintrag, git stash clear entfernt alle
- Einen Stash in einen Branch verwandeln —
git stash branch <name>, praktisch, wenn der Stash nicht mehr sauber anwendbar ist
Experimentieren Sie hier mit mehreren Stashes gleichzeitig, damit stash@{0} und stash@{1} nicht mehr verwirrend sind.