Lektion 26 · Erholung
Bewahren Sie die Arbeit auf und setzen Sie sie sicher fort
Legen Sie eine unvollendete Bearbeitung und eine neue Notiz mit Stash beiseite, bringen Sie sie mit „Übernehmen“ zurück und sehen Sie, was Pop tut, wenn es zu Konflikten kommt: Der Stash bleibt, bis Sie sich entscheiden.
- Ebene: Mittelstufe
- 10 Min. gelesen
- 5 Min. Video
- Aktualisiert
- Vor dieser Lektion: Stellen Sie den beabsichtigten Snapshot bereit und führen Sie Ihren ersten Commit durch, Lösen Sie Merge- und Rebase-Konflikte
In diesem Browser gespeicherter Fortschritt.
Beim Abspielen wird das Video von YouTube geladen (erweiterter Datenschutzmodus).
Englische Erzählung · English and Arabic Bildunterschriften
Öffnen Sie die VideoseiteAuf YouTube ansehenWas Sie lernen werden
- Wählen Sie aus, was in einem Stash gespeichert werden soll: nachverfolgte Bearbeitungen, nicht nachverfolgte Dateien oder nur das, was bereitgestellt wird.
- Erklären Sie, warum Apply den Vorrat behält und Pop ihn erst nach einer sauberen Anwendung entfernt.
- Stellen Sie sicher, dass sowohl die Bearbeitung als auch die Notiz zurückkamen und der Zweig nicht verschoben wurde.
- Erholen Sie sich von einem Pop-Konflikt, ohne den Vorrat zu verlieren.
Bevor Sie beginnen
Sie befinden sich auf private/stash-hint, einem Zweig aus dem Ergebnis von Lektion 18, mit einem Commit, der docs/stash-conflict.md hinzufügt („Verwenden Sie eine fiktive Adresse.“). In Ihrem Arbeitsbaum haben Sie eine noch nicht abgeschlossene Bearbeitung dieser Datei und eine neue Datei, docs/signup-hint.md, die Git noch nie gesehen hat. Jemand bittet Sie, zu etwas anderem zu wechseln, also möchten Sie, dass beides beiseite gelegt wird, ohne halbfertige Arbeit zu leisten.
Alles ist lokal und im kostenlosen Plan (GitTree fordert Sie auf, sich anzumelden): kein Hosting-Konto, kein Anbieter, kein Internet. Jede Identität ist fiktiv (example.com). Führen Sie diese Lektion niemals in einem echten Projekt aus.
Nehmen Sie die Änderungen in GitTree oder mit den nativen Git-Befehlen vor, nicht beides in derselben Kopie. Das Ablesen des Ergebnisses ist immer sicher. Die Menübezeichnungen stammen aus den eigenen Strings von GitTree 2.0 und die nativen Befehle wurden mit Git 2.43 in Einwegkopien ausgeführt. Die GitTree-Schritte wurden nicht auf macOS, Windows oder Linux ausgeführt.
Konzept und Zustandswirkungen
Stash speichert Ihre lokalen Änderungen als Git-Objekte und bereinigt dann den Arbeitsbaum bis zum letzten Commit. Es handelt sich um ein Tool zur kurzen Unterbrechung, nicht um ein Backup und auch nicht um einen Ersatz für einen Zweig, den Sie behalten möchten.
Ein Stash enthält standardmäßig nachverfolgte Änderungen. Nicht verfolgte Dateien bleiben zurück, es sei denn, Sie fragen danach, was Git mit --include-untracked tut. GitTrees Stash Changes…-Dialogfeld hat Include untracked files eingeschaltet, wenn es geöffnet wird; überprüfe es trotzdem. Ignorierte Dateien gehören zu einer anderen Kategorie und werden hier nicht gespeichert. Only staged changes speichert genau das, was im Index enthalten ist, und Keep staged changes in place too lässt den Index unverändert.
Apply Stash setzt die Änderungen zurück und behält den Stash in der Liste. Pop Stash wendet es an und entfernt den Eintrag nur, wenn die Anwendung sauber war. Wenn ein Konflikt auftritt, bleibt der Stash erhalten und Sie lösen den Konflikt im Arbeitsbaum. GitTrees Apply und Pop stellen den bereitgestellten Zustand nicht wieder her; git stash apply --index macht das, aber die App verwendet es nicht, sodass bereitgestellte Änderungen nicht bereitgestellt zurückkommen.
Beim Stashing und Anwenden wird der Zweig niemals verschoben oder ein Commit durchgeführt. Lediglich der Arbeitsbaum und ein Stash-Eintrag ändern sich.
Bereiten Sie den genauen Projektstand vor
Beginnen Sie mit einer separaten, normalen Kopie des Projekts, so wie es in Lektion 18 belassen wurde, und lassen Sie Ihr Original gittree-features unberührt. Erstellen Sie den Zweig, speichern Sie DOC_STASH_BASE und schreiben Sie ihn fest. Speichern Sie dann DOC_STASH_WORK über derselben Datei und DOC_HINT als neue Datei, auch ohne Staging. DOC_STASH_OTHER und STASH_RESOLVED werden nur in der separaten Konfliktkopie verwendet.
Vollständige Dateieingaben
Speichern Sie nur in der unten genannten Phase. Dabei handelt es sich um vollständige UTF-8/LF-Körper mit einem abschließenden Zeilenumbruch; Fügen Sie niemals Markdown-Zäune ein. Unveränderte ausführbare Dateien erben die benannte Eingabe. Versionen in separaten Varianten dürfen das Original nicht überschreiben.
docs/stash-conflict.md – DOC_STASH_BASE
Use a fictional address.docs/stash-conflict.md – DOC_STASH_WORK
Use a complete fictional email address.docs/signup-hint.md – DOC_HINT
Unfinished signup hint: use fictional data only.docs/stash-conflict.md – DOC_STASH_OTHER
Do not send the address anywhere.docs/stash-conflict.md – STASH_RESOLVED
Use a complete fictional email address. Nothing is sent.In GitTree
Öffnen Sie die Palette mit Befehl+Umschalt+P (Strg+Umschalt+P bei Ubuntu). Stash-Einträge werden im linken Bereich unter Stashes aufgelistet; Die Aktionen eines Verstecks befinden sich im Kontextmenü.
- Erstellen Sie den Zweig und die beiden nicht bereitgestellten Änderungen, wie im nächsten Abschnitt gezeigt. Lesen Sie die Änderungsliste:
docs/stash-conflict.mdwurde geändert unddocs/signup-hint.mdist neu. - Öffnen Sie die Palette und führen Sie Stash Changes… aus. Stellen Sie im Dialogfeld Message auf
signup hint rehearsalein. Only staged changes ist ausgeschaltet. Include untracked files ist eingeschaltet. Keep staged changes in place too ist ausgeschaltet. Wählen Sie Stash. - Warten Sie auf die Meldung „Änderungen gespeichert“. Die Änderungsliste ist leer, die Notiz ist vom Datenträger verschwunden und der Stash erscheint unter Stashes.
- Bewegen Sie den Mauszeiger über die Stash-Zeile: Der Tooltip lautet „Enthält nicht verfolgte Dateien“. Klicken Sie mit der rechten Maustaste darauf und wählen Sie Show Stash: Das Diagramm wählt den Stash aus und im rechten Bereich wird die nachverfolgte Änderung
docs/stash-conflict.mdaufgeführt. Die nicht verfolgte Notiz wird in einem separaten Teil des Vorrats aufbewahrt. - Klicken Sie erneut mit der rechten Maustaste darauf und wählen Sie Apply Stash. In der Mitteilung steht: „Der Vorrat wurde angewendet; er befindet sich immer noch in der Liste.“
- Überprüfen Sie das Ergebnis:
docs/stash-conflict.mdwurde erneut geändert,docs/signup-hint.mdist als nicht verfolgte Datei zurück, der Branch-Tip ist derselbe Commit und der Stash wird weiterhin aufgelistet. - Separate conflict copy. Übertragen Sie DOC_STASH_OTHER in einer zweiten Kopie nach dem Stash in dieselbe Datei. Klicken Sie mit der rechten Maustaste auf den Stash und wählen Sie Pop Stash. Die Warnung lautet: „Der Stash steht im Konflikt mit Ihren Änderungen: Lösen Sie die Konflikte. Der Stash bleibt erhalten.“
- Die Konfliktdatei wird mit Conflicted aufgeführt. Öffnen Sie es, schreiben Sie STASH_RESOLVED in die Ausgabe und wählen Sie Save and Mark Resolved. Der Vorrat ist noch da. Wenn Sie sicher sind, dass die Arbeit sicher ist, klicken Sie mit der rechten Maustaste darauf und wählen Sie Delete Stash…; Im Dialogfeld wird angezeigt, dass es aus der Liste entfernt und in den Wiederherstellungs-Snapshots beibehalten wird. Durch das Rückgängigmachen von GitTree wird ein gelöschter Stash noch nicht wiederhergestellt (Lektion 30). Behandeln Sie das Löschen daher als endgültig.
Für jeden gewöhnlichen Commit im Kurs: Summary ist das angegebene Subjekt, Description ist leer und die Optionen Amend Previous Commit, Skip Hooks, Add Signed-off-by, Different Author, Push After Commit und Allow Empty Commit bleiben ausgeschaltet.
Im Terminal
In einer separaten Kopie des Ergebnisses von Lektion 18:
git switch --create private/stash-hintSpeichern Sie DOC_STASH_BASE als docs/stash-conflict.md, dann:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: establish the stash conflict baseline"Speichern Sie DOC_STASH_WORK über docs/stash-conflict.md und DOC_HINT als docs/signup-hint.md, ohne Staging. Dann verstauen Sie beides:
git stash push --include-untracked --message "signup hint rehearsal"
git status --short
git stash list --format=%sOn private/stash-hint: signup hint rehearsalDer Status gibt nichts aus: Der Baum ist sauber. Behalten Sie eine unberührte Kopie dieses Zustands für den Konflikt und wenden Sie dann Folgendes an:
git stash apply 'stash@{0}'
git status --short
git stash list --format=%s
git rev-parse HEAD M docs/stash-conflict.md
?? docs/signup-hint.md
On private/stash-hint: signup hint rehearsalBeide Körper sind zurück, der Stash ist immer noch aufgelistet und HEAD ist der Commit, der er war. Ohne --include-untracked belässt derselbe Push docs/signup-hint.md auf der Festplatte und speichert nur die Bearbeitung.
Speichern Sie in der separaten Kopie DOC_STASH_OTHER, schreiben Sie es fest und öffnen Sie dann Folgendes:
git add -- docs/stash-conflict.md
git commit --quiet -m "docs: change the stash target"
git stash pop 'stash@{0}'
git ls-files --unmerged
git stash list --format=%sPop wird mit 1 beendet und gibt „CONFLICT (content)“ und „Der Stash-Eintrag wird aufbewahrt für den Fall, dass Sie ihn erneut benötigen“ aus. Drei nicht zusammengeführte Einträge werden aufgelistet, die Datei enthält Konfliktmarkierungen, docs/signup-hint.md wird wiederhergestellt und der Stash wird weiterhin aufgelistet. Es gibt keine Zusammenführung oder Rebase, um fortzufahren: Speichern Sie STASH_RESOLVED und führen Sie git add -- docs/stash-conflict.md aus. Um die Arbeit stattdessen in einem eigenen Zweig zu parken, erstellt git stash branch rescue-hint 'stash@{0}' den Zweig bei dem Commit, bei dem der Stash erstellt wurde, wendet ihn an und entfernt den Stash erst dann.
Ergebnis
Where you end: in der ersten Kopie enthält der Baum erneut die Bearbeitung und die Notiz, HEAD wurde nicht verschoben und der Stash wird weiterhin aufgelistet. In der Konfliktkopie hat Pop den Konflikt gemeldet, der Vorrat hat überlebt und Ihre Lösung ist inszeniert. Kein Stash-Befehl hat einen Commit durchgeführt und nichts wurde gepusht.
Häufige Fehler
- Vergessen Sie, dass nicht verfolgte Dateien nicht gespeichert werden, es sei denn, Sie schließen sie ein.
- Angenommen, Pop hat den Vorrat nach einem Konflikt gelöscht. Das war nicht der Fall.
- Zweimal anwenden, obwohl die erste Anwendung bereits funktioniert hat, und mich dann über doppelte Änderungen wundern.
- Verwendung eines Vorrats als Langzeitspeicher. Nennen Sie nützliche Arbeiten mit einer Branche.
Wenn etwas schief geht
Lassen Sie nach einem Pop-Konflikt den Stash an Ort und Stelle, lösen Sie die Datei auf und überprüfen Sie das Ergebnis, bevor Sie etwas löschen. Wenn Sie sich auf den falschen Zweig beworben haben, verwerfen Sie die Arbeit erst, nachdem Sie sich vergewissert haben, dass sie im Vorrat noch enthalten ist. Create Branch from Stash… gibt dem Stash bei dem Commit, bei dem es erstellt wurde, einen eigenen Zweig.
Überprüfen Sie Ihr Verständnis
Beantworten Sie jede Frage und lesen Sie dann, warum. Mit „erforderlich“ gekennzeichnete Fragen zählen zum Abschluss der Lektion.
0 von 6 korrekt
Beantworten Sie die erforderlichen Fragen richtig, um die Lektion abzuschließen.
In diesem Browser überprüft.
Üben
Stellen Sie sicher, dass der Baum nach dem Stash sauber war, dass Apply beide Dateien wiederhergestellt hat und dass der Stash immer noch aufgeführt ist. Sagen Sie voraus, was anders wäre, wenn Include untracked files ausgeschaltet wäre. Beweisen Sie in der Konfliktkopie, dass der Vorrat den Pop überlebt hat.
Ihre eigene Bestätigung: Die Website kann Ihren Computer nicht sehen.
Um die Lektion abzuschließen, beantworten Sie die erforderlichen Fragen richtig und bestätigen Sie die praktische Übung.
Zusammenfassung
- Wählen Sie die Stash-Optionen absichtlich aus.
- Übernehmen behält den Eintrag bei.
- Ein widersprüchlicher Pop behält es auch.
Verwandt
Glossarbegriffe eingeführt
Stash – مخبأ; anwenden – تطبيق; Pop – تطبيق وحذف; untracked – غير متتبَّع.
Videotranskript
Die Erzählung des Videos, Stichwort für Stichwort.
Zeigen Sie das Transkript
- Legen Sie unvollendete Arbeiten beiseite und bringen Sie sie mit sicher zurück.
- Ein Vorrat hält Ihre Bearbeitungen in einem Regal und reinigt den Arbeitsbaum.
- Übernehmen bringt die Änderungen zurück und behält sie bei der Eintrag. Pop entfernt es, wenn es sauber ist.
- Erstellen Sie einen Zweig mit einem Commit und bearbeiten Sie ihn dann die Datei und fügen Sie eine neue Notiz hinzu.
- In der Änderungsliste: eine geänderte Datei, und eine neue Datei.
- Notieren Sie sich den aktuellen Commit. Es darf nicht bewegen.
- Öffnen Sie die Palette und führen Sie Stash Changes aus.
- Geben Sie ihm eine Botschaft, die Sie wiedererkennen.
- Nur inszeniert ist deaktiviert. Nicht verfolgte Orte einbeziehen auf. „Immer in Szene gesetzt“ ist deaktiviert.
- Ignorierte Dateien sind eine andere Kategorie. und geh nicht hinein.
- Wählen Sie Stash und warten Sie auf die Benachrichtigung.
- Die Änderungsliste ist leer und der Stash aufgeführt ist.
- Der Tooltip besagt, dass es sich um nicht verfolgte Dateien handelt enthalten. Show Stash listet seine Dateien auf.
- Klicken Sie mit der rechten Maustaste auf den Stash und wählen Sie „Anwenden“. Versteck.
- In der Mitteilung steht, dass der Vorrat noch im Lager ist Liste.
- Beide sind zurück: die Bearbeitung und die Notiz.
- Der Branch-Tipp ist derselbe Commit. Nein Der Stash-Befehl hat einen erstellt.
- Und der Vorrat liegt immer noch im Regal.
- Im Terminal git stash push mit Dazu gehören „untracked“, dann der Status.
- Die Liste zeigt die Nachricht mit dem Filialname zuerst.
- git stash apply bringt beides zurück.
- Der Stash ist weiterhin aufgeführt und HEAD ist der gleich.
- Ohne diese Option bleibt die Notiz eingeschaltet Festplatte.
- In der Konfliktkopie begehen wir eine weitere Zuerst ändern und dann Pop.
- Die Warnung besagt, dass der Vorrat aufbewahrt wird. Die Datei ist in Konflikt.
- Lösen Sie die Datei auf und markieren Sie sie als gelöst. Der Vorrat ist noch da.
- Löschen Sie den Stash nur, wenn Sie sicher sind. Oder geben Sie ihm einen eigenen Zweig.
- Praxis: Beweisen Sie, dass es sauber, wiederhergestellt und aufbewahrt ist. Dann vorhersagen, ohne nicht verfolgt zu werden.
- Als nächstes erfahren Sie, was Soft, Mixed und Reset bedeutet hart jede Veränderung.