Zum Inhalt springen
GitTree

Lektion 27 · Erholung

Zurücksetzen: weich, gemischt und hart

Verschieben Sie einen Zweig auf drei Arten um einen Commit zurück und sehen Sie, was jeder Modus mit dem Zweig, dem Staging-Bereich und Ihren Dateien macht, sodass Sie denjenigen auswählen können, der die gewünschte Arbeit beibehält.

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

  • Sagen Sie, was jeder Reset-Modus bewegt: den Zweig, den Index und die Dateien auf der Festplatte.
  • Schützen Sie festgeschriebene und nicht festgeschriebene Arbeit vor einem destruktiven Modus.
  • Lesen Sie die Statusausgabe, die jeder Modus hinterlässt.
  • Wissen Sie, welche Dateien durch einen Hard-Reset überschrieben werden können, einschließlich nicht verfolgter Dateien.

Bevor Sie beginnen

Sie befinden sich auf private/reset, einem Zweig, der auf der zusammengeführten Seite M aus Lektion 18 („Sehen Sie Ihre Arbeit klar.“) beginnt. Es gibt einen Commit über M, C, der die Überschrift in „Änderungen mit Zuversicht prüfen“ ändert. Ein Zweig rescue/before-reset zeigt bereits auf C. Nach diesem Commit haben Sie die Seite erneut bearbeitet, um „jede gespeicherte Änderung zu verstehen“, und Sie haben sie weder bereitgestellt noch committet. Sie haben auch eine nicht verfolgte Notiz, docs/signup-hint.md. Sie möchten private/reset zurück nach M verschieben.

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. Die Hard-Reset-Kopie ist wegwerfbar.

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

Ein Reset verschiebt den aktuellen Zweig zu einem anderen Commit. Der Modus entscheidet darüber, wie viel mehr er berührt. Soft verschiebt nur den Zweig: Der Index und Ihre Dateien bleiben unverändert, sodass der Unterschied als gestaffelte Änderungen angezeigt wird. Mixed verschiebt den Zweig und ersetzt den Index durch das Ziel: Ihre Dateien bleiben erhalten, sodass der Unterschied als nicht bereitgestellte Änderungen angezeigt wird. Hard verschiebt den Zweig, ersetzt den Index und schreibt Ihre verfolgten Dateien neu in das Ziel. Ihre nicht übernommenen Änderungen an den nachverfolgten Dateien sind verschwunden.

Der Rettungszweig behält das Commit-C bei, sodass die Commit-Überschrift wieder gefunden werden kann. Die neuere Bearbeitung wird nicht beibehalten, da sie nie festgeschrieben wurde. Commits können über das Reflog gefunden werden; nicht gespeicherte Änderungen können nicht, da sie nie in Git waren. Schützen Sie sie selbst vor jedem zerstörerischen Modus.

Ein Hard-Reset überschreibt auch eine nicht verfolgte Datei, wenn das Ziel eine verfolgte Datei im selben Pfad hat. Eine nicht verfolgte Datei, die nicht im Weg ist, wie hier docs/signup-hint.md, bleibt in Ruhe. Das ist eine Beobachtung zu diesem Projekt und kein Versprechen für jede nicht verfolgte Datei.

In allen drei Modi ist der Zweig der einzige Verweis, der sich bewegt: rescue/before-reset, andere Zweige und alles auf einem Server bleiben unverändert.

GitTree fragt zuerst. Sein Reset-Dialog sagt, was bleiben wird, und bei einem Hard-Reset heißt es, dass alles, was es entfernt, zuerst unter refs/ogt/trash gespeichert wird, damit es durch Rückgängig wiederhergestellt werden kann. Ein Reset-Lauf im Terminal macht keinen solchen Snapshot.

Bereiten Sie den genauen Projektstand vor

Beginnen Sie mit einer separaten gewöhnlichen Kopie des zusammengeführten Ergebnisses M aus Lektion 18 und lassen Sie Ihr Original unberührt. Erstellen Sie den Branch, speichern Sie SARA als Heading-Commit und verzweigen Sie dort den Rescue-Ref. Speichern Sie dann OMAR unstaged und DOC_HINT als neue Datei. Bewahren Sie eine Kopie von OMAR und die Notiz außerhalb von Git auf und erstellen Sie dann drei identische Kopien, jeweils eine für Soft, Mixed und Hard.

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.

index.html – ZUSAMMENGEFÜHRT

Aktenauszug · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">See your work clearly.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html – SARA

Aktenauszug · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Review changes with confidence.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html – OMAR

Aktenauszug · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main" tabindex="-1">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand each saved change.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
    <section aria-labelledby="plans-title">
      <h2 id="plans-title">Choose the workflow you need</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>Local Git</h3>
          <p>Local Git workflows work without signing in.</p>
        </article>
        <article class="feature-card">
          <h3>Connected workflows</h3>
          <p>Provider integrations and Nour require Pro or an applicable trial.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

docs/signup-hint.md – DOC_HINT

Ausgabe
Unfinished signup hint: use fictional data only.

In GitTree

Öffnen Sie die Palette mit Befehl+Umschalt+P (Strg+Umschalt+P bei Ubuntu). Das Zurücksetzen erfolgt im Kontextmenü eines Commits im Untermenü Reset private/reset to This Commit.

  1. Erstellen Sie den Zweig, die Rettungsreferenz, die nicht bereitgestellte Bearbeitung und die Notiz, wie im nächsten Abschnitt gezeigt. Bewahren Sie eine Kopie der Bearbeitung und der Notiz außerhalb von Git auf. Erstellen Sie drei identische Kopien und öffnen Sie sie in drei Registerkarten.
  2. Soft copy. Klicken Sie im Diagramm mit der rechten Maustaste auf M (das Commit unter C, nicht auf die Verzweigungsspitze) und öffnen Sie Reset private/reset to This Commit. Wählen Sie Soft: Keep All Changes Staged. Der Bestätigungsdialog besagt, dass alle seitdem vorgenommenen Änderungen gespeichert bleiben und keine Dateiänderungen vorgenommen werden. Wählen Sie Reset private/reset.
  3. Überprüfen Sie das weiche Ergebnis: Der Zweig befindet sich auf M, auf der Seite auf der Festplatte steht immer noch „Verstehen Sie jede gespeicherte Änderung.“ und die bereitgestellten und nicht bereitgestellten Listen enthalten beide index.html.
  4. Mixed copy. Wählen Sie Mixed: Keep Changes in the Working Folder auf M. Das Dialogfeld besagt, dass jede Änderung in Ihrer Arbeitskopie verbleibt und nicht bereitgestellt wird. Wählen Sie Reset private/reset. Der Zweig befindet sich auf M, die Seite auf der Festplatte ist die gleiche Bearbeitung und die Änderung erfolgt nur ohne Bereitstellung.
  5. Hard copy. Erst nachdem Sie die Bearbeitung und die Notiz an anderer Stelle gespeichert haben, wählen Sie Hard: Discard All Changes… auf M. Das Dialogfeld ist eine Warnung: Es listet auf, was entfernt wurde, und sagt, dass es zuerst unter refs/ogt/trash behalten wird. Lesen Sie es. Die Standardeinstellung ist Abbrechen. Wählen Sie Discard and reset private/reset.
  6. Überprüfen Sie das harte Ergebnis: Der Zweig befindet sich auf M, die Seite ist die Überschrift von M und in der Änderungsliste wird nur die nicht verfolgte Notiz angezeigt. Der Hinweis lautet „Zurücksetzen auf“ und der Commit.
  7. Vergleichen Sie die drei Kopien mit rescue/before-reset, das sich immer noch auf C befindet. Drücken Sie keine davon.

Die Reset-Befehle sind beim Commit deaktiviert, auf dem sich der Zweig bereits befindet, und wenn kein Zweig ausgecheckt ist.

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:

Command · bash
git switch --create private/reset

Speichern Sie SARA als index.html, dann:

Command · bash
git add -- index.html
git commit --quiet -m "feat: reset snapshot example"
git branch rescue/before-reset

Speichern Sie OMAR als index.html ohne Staging und DOC_HINT als docs/signup-hint.md. Behalten Sie eine Kopie von beiden außerhalb von Git und erstellen Sie dann drei identische Kopien. In jedem:

Command · bash
TARGET_SHA="$(git rev-parse rescue/before-reset^)"

Nur Softcopy:

Command · bash
git reset --quiet --soft "$TARGET_SHA"

Nur gemischte Kopie:

Command · bash
git reset --quiet --mixed "$TARGET_SHA"

Nur in gedruckter Form, als Einwegexemplar:

Command · bash
git reset --quiet --hard "$TARGET_SHA"

In jeder Kopie lesen Sie:

Command · bash
git rev-parse HEAD
git show :index.html
git status --short

Jedes HEAD ist M. Der Index enthält SARA nach Soft und Ms Seite nach Mixed und Hard. Die Datei auf der Festplatte ist OMAR nach Soft und Mixed und M's Page nach Hard. Die Status waren:

Weich:

Ausgabe
MM index.html
?? docs/signup-hint.md

Gemischt:

Ausgabe
 M index.html
?? docs/signup-hint.md

Schwer:

Ausgabe
?? docs/signup-hint.md

Beim Zurücksetzen des Terminals wurde kein GitTree-Snapshot erstellt. git reflog listet immer noch C auf, aber OMAR steht nirgends darin. In einem separaten gesicherten Labor wurde durch einen Hard-Reset auf einen Commit mit einem nachverfolgten docs/signup-hint.md eine nicht nachverfolgte Datei in diesem Pfad überschrieben.

Ergebnis

Where you end: Alle drei Zweige liegen auf M. Soft: Der Index enthält SARA und die Datei enthält OMAR. Gemischt: Der Index enthält M und die Datei enthält OMAR. Schwer: Beide halten M. Die nicht verfolgte Note bleibt in jeder Kopie und rescue/before-reset ist immer noch auf C.

Häufige Fehler

  • Behandeln Sie den Rettungszweig als Backup für neuere, nicht festgeschriebene Arbeiten.
  • Verwenden Sie einen Hard-Reset, um einen Checkout aufzuräumen, ohne die Änderungen zuerst zu speichern.
  • Ich erwarte, dass durch einen Soft-Reset nichts zurückbleibt.
  • Zurücksetzen eines Zweigs, den Sie bereits vorangetrieben haben, und anschließendes Weiterschieben über die Arbeit eines Teamkollegen.

Wenn etwas schief geht

Verwenden Sie die Rettungsreferenz, um die übernommene Überschrift wiederzufinden, und Ihre externen Kopien für die Bearbeitung und die Notiz. In GitTree wurde bei einem über die App durchgeführten Hard-Reset zunächst ein Snapshot gespeichert, sodass dieser durch Rückgängig wiederhergestellt werden kann. Ein im Terminal durchgeführter Reset hat nicht funktioniert.

Ü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

    Welcher Reset-Modus verschiebt nur den Zweig und lässt den Index und Ihre Dateien unverändert?

    Wählen Sie eine Antwort.

  2. Frage 2 von 6

    Welche davon treffen auf einen Hard-Reset zu?

    Wählen Sie jede zutreffende Antwort aus.

  3. Frage 3 von 6
    Erforderlich

    In der gemischten Kopie setzen Sie private/reset auf M zurück. Was gibt git status --short aus?

    Wählen Sie eine Antwort.

  4. Frage 4 von 6

    Ändern Sie die Eingabe: Sie haben die Bearbeitung und die Notiz nicht außerhalb von Git gespeichert und führen den Hard-Reset im Terminal durch. Woher können Sie die Bearbeitung zurückbekommen?

    Wählen Sie eine Antwort.

  5. Frage 5 von 6
    Erforderlich

    Nach einem Reset gibt git status --short MM index.html aus. Welcher Modus wurde ausgeführt und was enthält der Index?

    Wählen Sie eine Antwort.

  6. Frage 6 von 6
    Erforderlich

    Welche Readbacks zeigen nach dem Hard-Reset in der Einwegkopie, dass das Gerät das getan hat, was in der Lektion steht?

    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

Führen Sie die drei Rücklesungen in jeder Kopie durch und füllen Sie eine Tabelle: Wohin führt die Verzweigung, was enthält der Index, was enthält die Datei? Sagen Sie dann, welchen Modus Sie verwenden würden, um die Commit-Nachricht zu wiederholen, in welchem ​​Modus alles entladen und in welchem ​​Modus alles verworfen werden soll.

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

  • Soft bewegt nur den Zweig.
  • Mixed setzt auch den Index zurück.
  • Hard schreibt auch Ihre Dateien neu.

Glossarbegriffe eingeführt

Zurücksetzen – إعادة تعيين; weich – ناعمة; gemischt – مختلطة; hart – كاملة; Rettungszweig – فرع حفظ.

Videotranskript

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

Zeigen Sie das Transkript
  1. Verschieben Sie einen Zweig nach hinten und wählen Sie aus, um wie viel sonst ändert sich.
  2. Soft bewegt den Zweig. Gemischt fügt das hinzu Index. Hard fügt Ihre Dateien hinzu.
  3. Der Unterschied ist also inszeniert, nicht inszeniert oder weg.
  4. Bauen Sie einen Anfang auf: ein Commit, eine Rettung Zweig, eine nicht gespeicherte Bearbeitung und eine Notiz.
  5. Machen Sie drei identische Kopien und schreiben Sie notieren Sie die ID von M.
  6. Die Bearbeitung wurde nie festgeschrieben. Behalten Sie eine Kopie außerhalb von Git.
  7. Die Grafik zeigt M, dann C und die Rettung Zweig auf C.
  8. Klicken Sie mit der rechten Maustaste auf M, öffnen Sie das Untermenü „Zurücksetzen“ und Wählen Sie Weich.
  9. Der Dialog besagt, dass jede Änderung inszeniert bleibt, und keine Dateiänderungen.
  10. Die Filiale befindet sich jetzt auf M. C ist immer noch dabei Rettungszweig.
  11. Die bereitgestellte Liste hat den alten Commit. Die Die nicht bereitgestellte Liste enthält Ihre Bearbeitung.
  12. Die Datei auf der Festplatte enthält noch Ihre Bearbeitung.
  13. Gemischte Kopie: Wählen Sie im gleichen Menü „Gemischt“.
  14. In diesem Dialog wird angezeigt, dass die Änderungen bestehen bleiben. uninszeniert.
  15. Jetzt ist index.html nur noch nicht bereitgestellt.
  16. Ihre Bearbeitung befindet sich noch in der Datei.
  17. Speichern Sie vor dem Festlegen die Bearbeitung und die Notiz woanders.
  18. Hardcopy: Wählen Sie Hard, mit den Punkten bedeuten eine Warnung.
  19. Der Dialog listet auf, was entfernt wurde, und sagt es wird zunächst gespeichert. Abbrechen ist die Standardeinstellung.
  20. Wählen Sie „Verwerfen und Zurücksetzen“.
  21. Nur die Notiz ist übrig. Die Seite ist M's wieder.
  22. Im Terminal ist der erste Lesevorgang der begehen. Alle drei sind M.
  23. git show mit einem Doppelpunkt liest den Index. Soft behält die alte Seite.
  24. Der Status ist in jeder Kopie unterschiedlich.
  25. Der Rettungszweig ist noch älter begehen.
  26. Und die Datei auf der Festplatte: Sie haben sie zweimal bearbeitet, M's einmal Überschrift.
  27. Ändern Sie die Eingabe: keine externe Kopie und hart im Terminal.
  28. Das Reflog listet Commits auf. Die nicht gespeicherte Bearbeitung ist nirgendwo drin.
  29. Und überschreibt eine nicht verfolgte Datei hart, wenn Das Ziel hat dort eines.
  30. Weich und gemischt verlieren nichts. Hart im Die App wird zuerst gespeichert.
  31. Übung: Füllen Sie eine Tabelle mit Verzweigungen und Indizes und Datei für jeden Modus.
  32. Machen Sie als Nächstes ein gemeinsames Commit ohne rückgängig Geschichte neu schreiben, mit Zurücksetzen.