Stellen Sie sich vor, Sie arbeiten an einer Funktion in einem Git-gesteuerten Softwareprojekt. Sie sind gerade dabei, einige Änderungen vorzunehmen, wenn Sie aufgefordert werden, einen kritischen Fehler zu beheben. Um das Problem zu lösen, benötigen Sie einen neuen Zweig und ein sauberes Arbeitsverzeichnis. Wenn es um grundlegende Git-Befehle geht, haben Sie zwei Möglichkeiten:
git reset --hard
um Ihre nicht festgeschriebenen Änderungen zu entfernen.Die erste Option verliert Ihre gesamte Arbeit, während die letztere zu einem partiellen Commit führt, das nicht sinnvoll ist. Keines dieser Szenarien ist so wünschenswert.
Dies ist, wo die git stash
Befehl kommt ins Spiel. Mögen git reset --hard
, Es gibt Ihnen ein sauberes Arbeitsverzeichnis, zeichnet jedoch auch Ihre unvollständigen Änderungen intern auf. Nachdem Sie den kritischen Fehler behoben haben, können Sie diese Änderungen erneut anwenden und dort weitermachen, wo Sie aufgehört haben. Sie können sich vorstellen git stash
als "Pause-Taste" für Ihre laufenden Arbeiten.
In diesem Lernprogramm wird davon ausgegangen, dass Sie Git installiert haben und mit dem grundlegenden Arbeitsablauf vertraut sind. Sie sollten Änderungen bereitstellen, Commits erstellen und mit Zweigen arbeiten. Sie benötigen auch ein Git-Repository, um damit zu experimentieren.
Bevor du laufen kannst git stash
, Sie benötigen einige nicht festgeschriebene Änderungen in Ihrem Git-Repository. Zum Beispiel, wenn Sie eine aufgerufene Datei bearbeitet haben foo.py
, Ihre Git-Status
Ausgabe würde so aussehen:
Auf dem Zweigmaster Änderungen, die für das Festschreiben nicht bereitgestellt wurden: (Verwenden Sie "git add")… "Um zu aktualisieren, was begangen wird" (git checkout) -- … "Um Änderungen im Arbeitsverzeichnis zu verwerfen) modified: foo.py
Um diese Änderungen zu speichern, führen Sie sie einfach aus git stash
ohne irgendwelche Argumente.
git stash
Dies erfordert sowohl Ihre inszenierten als auch nicht inszenierten Änderungen, zeichnet sie intern auf und löscht das Arbeitsverzeichnis. Dadurch haben Sie die Möglichkeit, zu einem neuen Zweig zu wechseln und andere Funktionen zu entwickeln, ohne sich Sorgen darüber machen zu müssen, dass Ihr partieller Commit irgendetwas durcheinander bringt.
Wenn Sie bereit sind, zu Ihrer unvollständigen Arbeit zurückzukehren, führen Sie den folgenden Befehl aus, um die verlegten Änderungen erneut anzuwenden:
Git Stash Pop
Das zuletzt gespeicherte Changeset wird wieder in Ihrem Arbeitsverzeichnis angezeigt und Sie können genau dort fortfahren, wo Sie aufgehört haben. Das ist alles dazu.
Ähnlich wie das git merge
Befehl, Git Stash Pop
kann zu Konflikten führen, wenn sich die gleichen Abschnitte des Quellcodes seit der Ausführung geändert haben git stash
. In diesem Fall wird nach dem Ausführen die folgende Meldung angezeigt Git Stash Pop
:
Foo.py CONFLICT (Inhalt) automatisch mischen: Konflikt in foo.py zusammenführen
Sie finden auch die betroffene Datei unter Nicht zusammengeführte Pfade
Abschnitt in der Git-Status
Ausgabe sowie die betroffenen Zeilen in der Quelldatei.
<<<<<<< Updated upstream print("Recently committed changes"); ======= print("Incomplete work"); >>>>>>> Versteckte Änderungen
Sie müssen den Konflikt in der Quelldatei manuell auflösen, aber normalerweise möchten Sie ihn nicht sofort so übergeben, wie Sie es nach einer git merge
Konflikt. Die meiste Zeit arbeiten Sie an Ihrem unfertigen Feature, bis Sie ein sinnvolles Commit vorbereitet haben. Dann können Sie es einfach zum Index hinzufügen und wie üblich festschreiben. Mit anderen Worten, Sie können behandeln Git Stash Pop
Konflikte ebenso wie alle anderen unverbindlichen Änderungen.
Für die meisten Szenarien genügen die obigen Befehle, wenn es sich um eine "Pause-Schaltfläche" handelt. Wenn Sie jedoch verstehen, wie verstopfte Änderungen dargestellt werden, ist die Tür für eine fortgeschrittenere Verwendung offen.
Bisher haben wir nur darüber gesprochen, ein einziges Änderungsset zu speichern. Sie werden jedoch jedes Mal ausgeführt git stash
, Nicht festgeschriebene Änderungen werden in einem Stapel gespeichert. Das bedeutet, dass Sie mehrere Changesets gleichzeitig unterbringen können.
Dies ist in der Anfangsphase der Entwicklung hilfreich, wenn Sie nicht sicher sind, in welche Richtung Sie gehen möchten. Anstatt Ihre Änderungen mit zu verlieren git reset --hard
, Sie können Ihre Snapshots in Bearbeitung auf dem Stash-Stack aufbewahren, falls Sie später einen von ihnen erneut anwenden möchten.
Sie können den Stapel mit dem überprüfen Liste
Parameter.
Git-Stash-Liste
Wenn du vorher ausgeführt hättest git stash
dreimal würde dies etwa Folgendes ausgeben:
stash @ 0: WIP bei neuer Funktion: 5cedccc Probieren Sie etwas Verrücktes aus. stash @ 1: WIP bei neuer Funktion: 9f44b34 Wählen Sie eine andere Richtung stash @ 2: WIP bei neuer Funktion: 5acd291 Beginnen Sie mit der neuen Funktion
Das Git Stash Pop
Der Befehl wendet immer den aktuellsten Snapshot an, den am oberen Rand des Stash-Stacks. Es ist jedoch auch möglich, zu wählen, welche Momentaufnahme Sie mit der erneuten Anwendung anwenden möchten sich bewerben
Befehl. Wenn Sie beispielsweise den zweiten Satz von Änderungen erneut anwenden möchten, verwenden Sie den folgenden Befehl:
Git Stash anwenden Stash @ 1
So wie Git Stash Pop
, Die Änderungen werden wieder in Ihrem Arbeitsverzeichnis angezeigt, und Sie können mit der unvollständigen Funktion fortfahren. Beachten Sie, dass der Snapshot dadurch nicht automatisch aus dem Stapel entfernt wird. Stattdessen müssen Sie es manuell mit löschen fallen
Befehl.
git stash drop stash @ 1
Das Arbeiten mit dem Stash-Stack ist für die meisten Git-Benutzer eher ein Randfall. Das git stash
und Git Stash Pop
Befehle sollten für die meisten Ihrer Bedürfnisse ausreichen Git-Stash-Liste
kann sich auch als nützlich erweisen, wenn Sie vergessen haben, wo Ihre letzte Einlagerung stattgefunden hat.
Das Festlegen von sinnvollen Momentaufnahmen ist das Herzstück eines jeden Git-Workflows. Zielgerichtete, gekapselte Commits erleichtern das Navigieren in Ihrem Projektverlauf, das Auffinden von Fehlern und das Rückgängigmachen von Änderungen.
Während nicht gerade ein alltäglicher Befehl, git stash
kann ein sehr praktisches Werkzeug zum Erstellen sinnvoller Commits sein. Sie können unvollständige Arbeiten speichern und müssen keine partiellen Momentaufnahmen für Ihren permanenten Projektverlauf machen. Denken Sie daran, wenn Sie das nächste Mal wünschen, Sie könnten anhalten, woran Sie gerade arbeiten, und später darauf zurückkommen.