Tipp Nutzen Sie die Kraft von Git Stash

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:

  • Lauf git reset --hard um Ihre nicht festgeschriebenen Änderungen zu entfernen.
  • Notieren Sie Ihre unvollständige Arbeit als neuen Commit.

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.

Voraussetzungen

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.

1. Änderungen verwahren

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.

2. Angehaltene Änderungen erneut anwenden

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.

3. Konflikte lösen

Ä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.

4. Der Stash-Stack

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.

Fazit

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.