Zum Inhalt springen
GitTree

Lektion 30 · Erholung

GitTree Rückgängigmachen, Wiederherstellen und Wiederherstellungs-Snapshots

Machen Sie einen Commit über die Symbolleiste von GitTree rückgängig, wiederholen Sie ihn und erfahren Sie, was die App zurücknehmen kann und was nicht, wann sie sich weigert und warum sie Wiederherstellungs-Snapshots speichert.

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 ansehen

Was Sie lernen werden

  • Lesen Sie, was das nächste Rückgängigmachen oder Wiederherstellen bewirken würde, bevor Sie darauf drücken.
  • Sagen Sie voraus, dass durch das Rückgängigmachen eines Commits die Änderungen beibehalten werden und dass Redo den Commit wiederherstellen kann.
  • Erkennen Sie, warum die App ein Rückgängigmachen oder Wiederherstellen ablehnt: Der Zweig wurde verschoben, Dateien wurden geändert, eine Fernbedienung wurde geändert.
  • Erfahren Sie, was Wiederherstellungs-Snapshots sind und wie Sie alte bewusst löschen können.

Bevor Sie beginnen

Sie befinden sich auf private/undo-demo, einem Zweig aus dem Ergebnis M von Lektion 18 mit einem sauberen Arbeitsbaum. Sie erstellen eine kleine Notiz, docs/signup-recovery.md, und übernehmen sie through GitTree, da das Rückgängigmachen von GitTree anhand der Schritte funktioniert, die es selbst aufzeichnet. Ein in einem Terminal durchgeführter Commit ist etwas anderes und wird nicht in diesen Datensatz aufgenommen.

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, Tooltips und Hinweise stammen aus den eigenen Zeichenfolgen und Quellen von GitTree 2.0. Die nativen Befehle wurden mit Git 2.43 in Einwegkopien ausgeführt und zeigen nur das Git-Modell, nicht den Datensatz der App. Die GitTree-Schritte wurden nicht auf macOS, Windows oder Linux ausgeführt.

Konzept und Zustandswirkungen

GitTree behält einen journal der von ihm ausgeführten Schritte. „Rückgängig“ macht den neuesten Schritt rückgängig und „Wiederholen“ wiederholt den zuletzt rückgängig gemachten Schritt. Der Tooltip der Symbolleiste benennt den Schritt, zum Beispiel „Rückgängig: Festschreiben …“. Lesen Sie es zuerst: Wenn es etwas anderes nennt, als Sie erwarten, hören Sie auf.

Vor einem destruktiven Schritt speichert GitTree ein recovery snapshot unter refs/ogt/trash/* und schreibt den Journaleintrag. Machen Sie Wiederherstellungen aus diesem Datensatz rückgängig, und zwar nur, solange sich seitdem nichts geändert hat: Ein Zweig wird nur dann zurückverschoben, wenn er immer noch auf die Stelle zeigt, an der er beim Schritt verlassen wurde, und Dateien werden nur wiederhergestellt, wenn sie danach von niemandem mehr bearbeitet wurden. Andernfalls wird das Rückgängigmachen mit einem Grund abgelehnt und der Schnappschuss bleibt erhalten.

Das Rückgängigmachen eines commit verschiebt den Zweig zurück und behält die festgeschriebenen Änderungen bei, sodass nichts verloren geht. Durch das Wiederherstellen dieses Commits wird der Zweig erneut zum selben Commit verschoben. Nicht jeder Schritt kann wiederholt werden, und einige können nicht rückgängig gemacht werden: Durch einen erzwungenen Druck wurde eine Fernbedienung geändert („erneut drücken, um sie wieder zurück zu ändern“); ein gelöschter Stash wird als Snapshot aufbewahrt, aber noch nicht rückgängig gemacht; Der allererste Commit hat keinen früheren Status. Für einen Schritt, der teilweise gestoppt wurde, gibt es kein vollständiges Ergebnis, das rückgängig gemacht werden könnte.

Snapshots werden nicht nach einem Zeitplan gelöscht. Mit dem Befehl Delete Old Recovery Snapshots… können Sie ein Alter auswählen, genau anzeigen, welche Snapshots älter sind, und diese nur nach Bestätigung löschen. Durch das Löschen eines Snapshots entfällt der Rückweg für diesen Schritt.

Rückgängig und Wiederherstellen ändern nur das lokale Repository. Es wird nichts veröffentlicht.

Bereiten Sie den genauen Projektstand vor

Beginnen Sie mit einer separaten, gewöhnlichen Kopie des Ergebnisses M aus Lektion 18, der Sie vertrauen, und lassen Sie Ihr Original unberührt. Erstellen Sie den Zweig und machen Sie die Notiz. DOC_LOST ist der Inhalt der Notiz.

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/signup-recovery.md – DOC_LOST

Ausgabe
# Recovered signup work

Keep a branch name before leaving useful experimental work.

In GitTree

Öffnen Sie die Palette mit Befehl+Umschalt+P (Strg+Umschalt+P bei Ubuntu). Undo und Redo befinden sich in der Symbolleiste und in der Palette; Die Tastenkombinationen lauten Befehl+Z für Rückgängig und Befehl+Umschalt+Z oder Befehl+Y für Wiederherstellen (Strg bei Windows und Linux).

  1. Erstellen Sie in einer separaten Kopie den Zweig private/undo-demo und speichern Sie DOC_LOST als docs/signup-recovery.md. Öffnen Sie die Änderungsliste: Die Datei ist neu.
  2. Stellen Sie nur diese Datei bereit und übergeben Sie sie mit der Zusammenfassung docs: demonstrate a reversible local commit. Warten Sie auf das tatsächliche Ergebnis.
  3. Bewegen Sie den Mauszeiger über Undo in der Symbolleiste. Der Tooltip lautet „Rückgängig machen: Festschreiben …“. Wenn ein weiterer Schritt erforderlich ist, hören Sie auf: Machen Sie nichts rückgängig, was Sie nicht beabsichtigt haben.
  4. Wählen Sie einmal Undo. Der Hinweis lautet „Rückgängig gemacht: Festschreiben“. Der Zweig ist wieder auf M und die Notiz ist staged, nicht gelöscht.
  5. Bewegen Sie den Mauszeiger über Redo. Der Tooltip lautet „Wiederholen: Festschreiben …“. Wählen Sie einmal Redo. In der Mitteilung steht „Redid: Commit“. Das Commit ist zurück und der Arbeitsbaum ist sauber.
  6. Separate stale-state copy. Wiederholen Sie in einer zweiten Kopie die Schritte 1 bis 4 und übernehmen Sie dann außerhalb von GitTree die bereitgestellte Notiz mit git commit -m "docs: external move after app undo". Schauen Sie sich Redo an: Es ist deaktiviert und der Grund dafür ist „Der Zweig wurde seitdem verschoben; ein Rückgängigmachen würde diese Änderung überschreiben.“ Erzwinge es nicht.
  7. Öffnen Sie die Palette und führen Sie Delete Old Recovery Snapshots… aus. Belassen Sie Older than (days) bei 30 und wählen Sie Find. Lesen Sie, was in der Liste steht: „Keine Snapshots sind so alt.“ oder eine Liste der alten. Schließen Sie den Dialog. Löschen Sie nichts, um die Lektion zu beenden.

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

Das Terminal nutzt das Journal der App nicht. Dies ist das einfache Git-Modell dessen, was das Commit-Rückgängigmachen bewirkt, in einer different sauberen Kopie des Ergebnisses von Lektion 18:

Command · bash
git switch --create private/undo-demo
BEFORE_SHA="$(git rev-parse HEAD)"

Speichern Sie DOC_LOST als docs/signup-recovery.md, dann:

Command · bash
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: demonstrate a reversible local commit"
AFTER_SHA="$(git rev-parse HEAD)"
git reset --soft "$BEFORE_SHA"
git status --short
Ausgabe
A  docs/signup-recovery.md

Der Zweig ist zurück und die Datei wird bereitgestellt. Nochmals vorwärts:

Command · bash
git reset --soft "$AFTER_SHA"
git status --short

Der Status ist leer. Diese Befehle not rufen das Rückgängigmachen oder Wiederherstellen der App auf, zeichnen einen GitTree Journaleintrag auf oder erstellen einen Snapshot; git for-each-ref refs/ogt/trash gibt in dieser Kopie nichts aus. In einem von der App erstellten Take werden die echten Snapshot-Namen aufgelistet, die Sie lesen, ohne sie zu ändern.

Der Schutz vor einem abgestandenen Schritt ist ein Vergleichen und Tauschen. Git hat die gleiche Idee in update-ref, das einen Verweis nur dann verschiebt, wenn er immer noch den erwarteten Wert enthält. Nach einem externen Commit:

Command · bash
git update-ref refs/heads/private/undo-demo "$AFTER_SHA" "$BEFORE_SHA"

Git lehnt mit „cannot lock ref … is at … but erwartet …“ ab. GitTrees eigene Ablehnung ist die im Tooltip: „Der Zweig wurde seitdem verschoben; ein Rückgängigmachen würde diese Änderung überschreiben.“

Ergebnis

Where you end: in der ersten Kopie wurde die Notiz festgeschrieben, rückgängig gemacht (bereitgestellt, Verzweigung auf M) und erneut erstellt (Verzweigung beim Festschreiben, Baumbereinigung). In der veralteten Kopie wurde Redo abgelehnt, weil der Zweig verschoben wurde und der externe Commit intakt blieb. Sie haben den Snapshot-Dialog geöffnet und geschlossen, ohne etwas zu löschen.

Häufige Fehler

  • Wenn Sie auf „Rückgängig“ klicken, ohne den Tooltip zu lesen, und einen Schritt rückgängig machen, haben Sie das nicht gemeint.
  • Angenommen, jede Aktion kann rückgängig gemacht oder wiederholt werden: Ein erzwungener Push und ein gelöschter Stash sind nicht möglich, und die meisten Schritte verfügen über kein Wiederherstellen.
  • Es wird erwartet, dass „Rückgängig“ Änderungen abdeckt, die Sie in einem Editor außerhalb von GitTree vorgenommen haben.
  • Zum Aufräumen alte Snapshots löschen, wodurch der Rückweg entfällt.

Wenn etwas schief geht

Wenn „Rückgängig“ deaktiviert ist, lesen Sie den Grund im Tooltip: Der Zweig wurde verschoben, seitdem wurden Dateien bearbeitet, ein Remote-Befehl wurde geändert oder es gibt nichts, was rückgängig gemacht werden kann. Wenn ein Schritt abgelehnt wird, wird sein Wiederherstellungs-Snapshot unter refs/ogt/trash/* aufbewahrt; Löschen Sie es nicht, wenn Sie unsicher sind. Für Commits, die außerhalb von GitTree vorgenommen werden, verwenden Sie das Reflog aus Lektion 29.

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

  1. Frage 1 von 6

    Was sollten Sie tun, bevor Sie auf „Rückgängig“ klicken?

    Wählen Sie eine Antwort.

  2. Frage 2 von 6

    Welchen dieser Schritte weigert sich GitTree, mit einem angegebenen Grund rückgängig zu machen?

    Wählen Sie jede zutreffende Antwort aus.

  3. Frage 3 von 6
    Erforderlich

    Sie übernehmen die Notiz in GitTree und wählen einmal „Rückgängig“. Was siehst du?

    Wählen Sie eine Antwort.

  4. Frage 4 von 6

    Ändern Sie die Eingabe: Nach dem Rückgängigmachen übernehmen Sie die inszenierte Notiz außerhalb von GitTree und schauen sich dann Wiederholen an. Was siehst du?

    Wählen Sie eine Antwort.

  5. Frage 5 von 6
    Erforderlich

    „Rückgängig“ ist ausgegraut und in der QuickInfo steht „Der Wiederherstellungs-Snapshot wurde gelöscht.“ Was ist passiert und was machen Sie?

    Wählen Sie eine Antwort.

  6. Frage 6 von 6
    Erforderlich

    Welche Readbacks zeigen in der reinen Git-Modellkopie, was ein Commit-Rückgängigmachen bewirkt?

    Wählen Sie jede zutreffende Antwort aus.

0 von 6 korrekt

Beantworten Sie die erforderlichen Fragen richtig, um die Lektion abzuschließen.

In diesem Browser überprüft.

Üben

Notieren Sie, was in der QuickInfo „Rückgängig“ gesagt wurde, wie der Zweig und die bereitgestellte Liste nach dem Rückgängig-Vorgang aussahen und was „Wiederherstellen“ bewirkt hat. Schreiben Sie in die veraltete Kopie den Grund, den Redo angegeben hat. Nennen Sie dann einen Schritt, den die App nicht rückgängig machen kann, und sagen Sie, warum.

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

  • Lesen Sie den Tooltip, bevor Sie drücken.
  • Durch das Rückgängigmachen eines Commits bleiben die Änderungen erhalten.
  • Ein verschobener Zweig oder bearbeitete Dateien verweigern das Rückgängigmachen; Schnappschüsse werden gespeichert.

Glossarbegriffe eingeführt

Rückgängig machen – تراجع; Wiederholen – إعادة; Zeitschrift – سجل العمليات; Wiederherstellungs-Snapshot – Download.

Videotranskript

Die Erzählung des Videos, Stichwort für Stichwort.

Zeigen Sie das Transkript
  1. GitTree kann einige Schritte zurücktreten. Hier ist wie und wo es aufhört.
  2. GitTree führt ein Tagebuch über seine eigenen Schritte. Mit „Rückgängig“ wird die neueste Version rückgängig gemacht.
  3. Vor einem riskanten Schritt erspart es sich eine Erholung Schnappschuss zuerst.
  4. Wir haben eine Filiale und eine neue Notiz.
  5. Stellen Sie nur diese Datei bereit.
  6. Schreiben Sie die Zusammenfassung. Alle Optionen bleiben bestehen aus.
  7. Einmal festschreiben, in GitTree selbst.
  8. Ein in einem Terminal vorgenommener Commit ist hier nicht enthalten aufzeichnen.
  9. Bewegen Sie den Mauszeiger über „Rückgängig“. Der Tooltip benennt den Schritt: begehen.
  10. Wenn es etwas anderes nennt, hören Sie auf.
  11. Wählen Sie „Einmal rückgängig machen“. In der Mitteilung steht „Undid“. begehen.
  12. Die Filiale ist wieder auf M.
  13. Und die Notiz wird inszeniert, nicht gelöscht. Nichts geht verloren.
  14. Jetzt benennt Redo dasselbe Commit.
  15. Wählen Sie „Einmal wiederholen“. Der Commit ist zurück.
  16. Der Arbeitsbaum ist wieder sauber.
  17. In einer zweiten Kopie übernehmen wir das Commit und machen es rückgängig auf die gleiche Weise.
  18. Übergeben Sie nun die inszenierte Notiz nach draußen GitTree.
  19. Wiederherstellen ist deaktiviert. Die Filiale ist seitdem umgezogen.
  20. Es lässt Ihr Commit in Ruhe. Niemals erzwingen es.
  21. Andere Gründe: Dateien bearbeitet, eine Fernbedienung geändert, das erste Commit.
  22. Nun die Schnappschüsse. Führen Sie „Alte Wiederherstellung löschen“ aus Schnappschüsse.
  23. Es heißt, dass es sich nur um die aufgelisteten Schnappschüsse handelt gelöscht.
  24. Warten Sie 30 Tage und wählen Sie „Suchen“.
  25. Schließen Sie es. Nichts verfällt von alleine.
  26. In einer einfachen Git-Kopie wird ein Soft-Reset durchgeführt die gleiche Form.
  27. Wieder vorwärts, der Baum ist sauber und Es gibt keinen App-Snapshot.
  28. Git schützt einen Ref auf die gleiche Weise: Verschieben Sie ihn Nur wenn es das hält, was Sie erwarten.
  29. „Rückgängig“ ist kein globaler Rücklauf. Es kehrt sich um Schritte, die die App aufgezeichnet hat.
  30. Übung: Schreiben Sie den Tooltip und das Ergebnis Rückgängig machen, Wiederherstellen und der veraltete Grund.
  31. Als nächstes erfahren Sie, was ein freistehender KOPF bedeutet.