Zum Inhalt springen
GitTree

Lektion 12 · Alltagsarbeit

Ziehen Sie mit Fast-Forward, Merge oder Rebase

Wählen Sie nach der Prüfung der Divergenz eine explizite Pull-Richtlinie. Vergleichen Sie Fast-Forward-Only-Ablehnung, Merge und Private Rebase mit drei Kopien und einem isolierten lokalen Server.

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

  • Separate Fetch- und Pull-Integration.
  • Vergleichen Sie drei explizite Richtlinienoptionen.
  • Erkennen Sie die FF-only-Ablehnung als politisches Ergebnis an.
  • Überprüfen Sie die Richtlinieneinstellungen für Upstream- und dauerhafte Apps.

Bevor Sie beginnen

Beginnen Sie mit dem Kursprojekt, wie es in Lektion 11 verlassen wurde, mit main, das zu Leos abgerufenem Commit führt; Nennen Sie diesen Commit M. Sie haben dann drei gewöhnliche Kopien einer Divergenz: ein privates Topic mit einem Commit S und einen Serverzweig „update-main“ mit einem anderen Commit N, beide auf M. Das private Topic ist aktuell und sauber. Jeder verweist origin nur auf einen neuen Bare-Server, der „updated-main/N“ enthält, und verfolgt origin/updated-main; Alte veröffentlichte Preise/Hauptfernbedienung werden nicht geändert.

Das Video wurde mit Git 2.52.0 und GitTree 2.0 auf Ubuntu 24.04 aufgenommen: Die Divergenz, der Rettungszweig und der neue Server wurden im Terminal erstellt; Die drei Pulls, die Ergebnisansichten, die Richtliniendatei und die Pull-Modus-Wiederherstellung wurden in der App durchgeführt. Die Ergebnisse wurden im Terminal überprüft. Auf macOS oder Windows wurde nichts ausgeführt, und Ubuntu ist das einzige aufgezeichnete Linux-System. Die Quell-Git-Ebene von GitTree ist 2.39.0.

GitTree fordert Sie auf, sich anzumelden; Der Free-Plan deckt hier dann jeden Schritt ab. Es ist kein Anbieterkonto, Pro-/Testversion, API-Anmeldeinformationen oder Internetdienst erforderlich. Ein lokaler nackter Ursprung ist nicht GitLab oder CI. Alle Identitäten verwenden example.com; Führen Sie diese Lektion niemals innerhalb einer Quellprüfung durch.

Nehmen Sie Mutationen entweder über GitTree oder den nativen Pfad an identischen Eingaben vor, nicht beide nacheinander. In beiden Fällen kann eine schreibgeschützte Überprüfung erfolgen. Jede als Terminalarbeit beschriebene Vorbereitung wird als native Vorbereitung bezeichnet und niemals als erfundene App-Funktion.

Konzept und Zustandswirkungen

Pull ist ein Abruf, gefolgt von der ausgewählten Integrationsrichtlinie. Es ist kein Synonym für Aktualisierung. Eine Abrufphase kann Tracking-Referenzen aktualisieren, selbst wenn ff-only sich später weigert, den lokalen Zweig zu verschieben.

Bei divergierter privater S/N lehnt ff-only ab, Merge behält beide Pfade bei und Rebase spielt den privaten Commit auf der abgerufenen Basis erneut ab. Ändern Sie nicht stillschweigend den Modus, um eine Ablehnung verschwinden zu lassen.

Die Paletten-Pull-Modus-Befehle aktualisieren general.pullMode, eine app-weite Einstellung, kein einmaliges Git-Flag. Nehmen Sie die vorherige Einstellung in der Aufnahme-App auf bzw. stellen Sie sie wieder her. Die folgenden nativen expliziten Pull-Flags ändern diese App-Einstellung nicht.

Jeder Pull ruft seinen Sandbox-Ursprung ab. FF-only lässt Thema/Index/Werk bei S; Merge und Rebase aktualisieren nur ihr eigenes Thema und ihre eigenen Dateien. Es wird kein Serverzweig gepusht. Wenn Sie die Palettenrichtlinie auswählen, ändert sich auch die App-weite Einstellung, bis sie wiederhergestellt wird.

Bereiten Sie den genauen Projektstand vor

Beginnen Sie mit einer separaten, normalen Kopie des sauberen Kursprojekts, wie es in Lektion 11 hinterlassen wurde. Die ursprünglichen Gittree-Funktionen bleiben erhalten; Führen Sie dieses Szenario nicht im Original- oder Quell-Checkout aus. (Ein früherer Kursplan begann diese Lektion mit dem Ergebnis einer späteren Zusammenführungslektion; diese Lektion wurde noch nicht aufgezeichnet, daher verwendet das Video das Projekt von Lektion 11 und dieselben Schritte.) Führen Sie dann die genaue Vorbereitung unten durch. Die Repo-lokale Demo-Signierung ist deaktiviert und GitTree Demo <demo@example.com> ist die Identität, es sei denn, ein Teamkollege wird ausdrücklich benannt.

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 – ANMELDEN

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>
    <section aria-labelledby="signup-title">
      <h2 id="signup-title">Try the demo form</h2>
      <form id="signup-form" novalidate>
        <label for="demo-email">Demo email</label>
        <input id="demo-email" name="email" type="email" autocomplete="off" aria-describedby="signup-hint">
        <p id="signup-hint">Use a fictional example.com address. Nothing is sent.</p>
        <button type="submit">Check the address locally</button>
        <p id="signup-result" role="status"></p>
      </form>
    </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/integration-note.md – DOC_MERGE

Ausgabe
# Integration review

This note was written on main while signup work was private.

docs/pull-policy.md – DOC_PULL

Ausgabe
# Pull policy

Fetch first and inspect ancestry.
Use fast-forward only when no integration decision is needed.
Merge preserves existing commit identities; rebase recreates private commits.
Never rewrite someone else's published work without coordination.

In GitTree

Palette: Befehl+Umschalt+P (Strg+Umschalt+P bei Ubuntu); Geben Sie den genau benannten Befehl ein und wählen Sie ihn aus. Benannte Ref-Aktionen verwenden das Kontextmenü dieser Zeile und keine argumentfreie Palettenverknüpfung.

  1. Bereiten Sie unten die drei tatsächlichen isolierten Kopien und ihren eigenen Server/Upstream vor; Notieren Sie den vorherigen general.pullMode, bevor Sie eine Richtlinie auswählen.
  2. Beim FF-Kopieren Palette Pull: Nur Schnellvorlauf, dann die Symbolleistenschaltfläche Pull; Warten Sie auf die echte Divergenzverweigerung. Der Hinweis der App lautet: „Feature/Signup-Form kann nicht schnell vorgespult werden“, es heißt, beide Seiten hätten sich verpflichtet, die andere nicht, dass nichts geändert wurde, und bietet Resolve… zum Zusammenführen, Rebasieren oder Zurücksetzen an. Es bleibt bestehen, bis Sie es verwerfen. Verwerfen Sie es also vor der nächsten Kopie.
  3. Untersuchen Sie den Thementipp/die Arbeit unverändert, obwohl der abgerufene Ursprung/aktualisierte Hauptinhalt aktuell ist; Drücken Sie nicht Force Push….
  4. Wählen Sie in der unberührten Zusammenführungskopie „Ziehen: Schneller Vorlauf, wenn möglich, sonst Zusammenführen“ und dann die Schaltfläche „Ziehen“ in der Symbolleiste. Überprüfen Sie das tatsächliche Ergebnis der beiden Eltern.
  5. Wählen Sie in der unberührten Rebase-Kopie „Pull: Rebase“ und dann „Pull“. Das aktuelle Thema ist privat, kein Autostash erforderlich.
  6. Überprüfen Sie das neu erstellte S′ auf N, führen Sie die Eltern zusammen und gleichen Sie die vollständigen Bäume aus. Bewahren Sie jedes Ergebnis unabhängig auf.
  7. Speichern Sie den vollständigen DOC_PULL erst dann als docs/pull-policy.md in einer Übungskopie, nachdem Sie die verglichenen Snapshots beibehalten haben. Lassen Sie es hier unverbindlich.
  8. Stellen Sie den vorherigen Pull-Modus der Aufnahme-App explizit wieder her. Stellen Sie sicher, dass kein automatischer Push oder kein Original-Haupt-Wechsel stattgefunden hat.

Für jeden gewöhnlichen Commit: Zusammenfassung ist der angegebene Betreff; Beschreibung leer; Vorheriges Commit ändern, Hooks überspringen, „Signiert von“ und „Anderer Autor“ hinzufügen, „Nach Commit verschieben“ und „Leeres Commit deaktivieren“ zulassen; keine Co-Autoren. Stellen Sie nur die benannten Dateien bereit und übernehmen Sie dann die Änderungen einmal in N Dateien (Datei für eine) oder alternativ Befehl+Eingabetaste. Warten Sie auf das tatsächliche Ergebnis. Eine Lektion, die explizit Änderungen vornimmt, ändert nur die angegebene Option.

Im Terminal

Bringen Sie in einer separaten, sauberen Kopie des Projekts zuerst main zu Leos abgerufenem Commit (das ist M) und erstellen Sie dann das private Thema:

Command · bash
git merge --ff-only --quiet origin/main
git switch --create feature/signup-form

Platzieren Sie die gespeicherte SIGNUP-Datei über index.html (das Video speicherte die Dateien der Lektion in ~/Downloads und verwendet cp ~/Downloads/SIGNUP.html index.html), dann:

Command · bash
git add -- index.html
git commit --quiet -m "feat: add the local signup demonstration"
git branch rescue/signup-before-rebase
BASE_SHA="$(git rev-parse HEAD~1)"
git switch --quiet --create updated-main "$BASE_SHA"

Geben Sie auf „updates-main“ DOC_MERGE unter docs/integration-note.md (cp ~/Downloads/DOC_MERGE.md docs/integration-note.md) ein, dann:

Command · bash
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-form

BASE_SHA ist das gemessene M-Elternteil vor dem privaten Anmelde-Commit. Sowohl „Topic“ als auch „Updated-Main“ haben jetzt einen unabhängigen Commit; „rettung/signup-before-rebase“ behält das alte Thema bei. Zu diesem Thema wird nichts veröffentlicht.

Bereiten Sie aus dieser Pre-Rebase-Kopie einen new-Server vor, der nur N enthält:

Command · bash
git clone --quiet --bare --single-branch --branch updated-main --no-local . ../gittree-pull-origin.git

Erstellen Sie drei normale Kopien derselben Eingabe mit cp -R <source-demo-copy> <new-copy>, während kein Git-/App-Vorgang aktiv ist, oder gleichwertige verifizierte Dateisystemkopien unter Beibehaltung von .git. Ersetzen Sie in jeder Kopie den Ursprung durch die gemessene Datei-URL für diesen neuen Server, rufen Sie das Thema ab und legen Sie es im Upstream fest. Richten Sie das Original niemals erneut aus:

Command · bash
git remote set-url origin "<measured-file-url>"
git fetch --quiet --prune origin
git branch --set-upstream-to=origin/updated-main feature/signup-form

Verwenden Sie anstelle des Platzhalters die gemessene Datei-URL. In FF-Kopie:

Command · bash
git pull --quiet --ff-only origin updated-main

Gemessener Ausgang 128; Diagnoseauszug:

Ausgabe
hint: Diverging branches can't be fast-forwarded, you need to either:
hint:
hint: 	git merge --no-ff
hint:
hint: or:
hint:
hint: 	git rebase
hint:
hint: Disable this message with "git config set advice.diverging false"
fatal: Not possible to fast-forward, aborting.

In separater Zusammenführungskopie:

Command · bash
git pull --quiet --no-rebase --no-edit origin updated-main

In separater Rebase-Kopie:

Command · bash
git pull --quiet --rebase origin updated-main

Beides gelang; Tatsächliche endgültige Baum-IDs stimmten überein, die Zusammenführung hatte zwei Eltern und die Wiedergabe einen. Für jede Inspektion:

Command · bash
git rev-list --parents -n 1 HEAD
git rev-parse 'HEAD^{tree}'
git status --short

SHAs variieren; Die Status waren vor der optionalen Policy-File-Praxis sauber. Kein Befehl verschiebt einen Zweig.

Ergebnis

Where you end: Nur-FF-Kopie verbleibt bei S mit Ablehnung nach dem Abruf. Durch die Zusammenführungskopie wird eine Zwei-Eltern-Integration hinzugefügt. Rebase-Kopie erstellt S′ auf N. Merge/Rebase-Bäume stimmen zu; kein Anstoß. Behalten Sie die Richtliniendatei nur nach Vergleichen als nicht festgeschriebene Praxis bei.

Häufige Fehler

  • Angenommen, ein gerades Diagramm bedeutet, dass die alte Commit-ID erhalten geblieben ist.
  • Behandeln des alternativen Bereichs als ursprünglichen Prüfpunkt.
  • Wiederholen einer abgeschlossenen Mutation nach App-Erfolg.

Wenn etwas schief geht

Eine FF-Ablehnung stellt keinen Datenverlust dar. Überprüfen Sie die abgerufenen/lokalen Referenzen und wählen Sie eine überprüfte Richtlinie für diese Kopie aus. Wenn das Zusammenführen/Neubasieren stoppt, lösen/fortfahren oder explizit abbrechen; Führen Sie keinen weiteren Pull über einen aktiven Vorgang aus.

Ü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 ist hier Pull?

    Wählen Sie eine Antwort.

  2. Frage 2 von 6

    Was kann bei einer FF-only-Ablehnung passieren?

    Wählen Sie jede zutreffende Antwort aus.

  3. Frage 3 von 6
    Erforderlich

    Private Wiedergabe auf N: resultierendes übergeordnetes Element?

    Wählen Sie eine Antwort.

  4. Frage 4 von 6
    Erforderlich

    Aktuelle Arbeit in veröffentlichtes gemeinsames Thema ändern: Rebase immer noch automatischer Hinweis?

    Wählen Sie eine Antwort.

  5. Frage 5 von 6

    Der Palettenrichtlinienbefehl ändert nur einen Pull?

    Wählen Sie eine Antwort.

  6. Frage 6 von 6
    Erforderlich

    Was beweist den Vergleich?

    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

Erklären Sie, welcher Status sich in der abgelehnten Kopie geändert hat, vergleichen Sie die beiden erfolgreichen Bäume und Eltern und schreiben Sie dann die vollständige DOC_PULL-Richtlinie. Überprüfen Sie, ob die Einstellungen der Aufnahme-App wiederhergestellt wurden.

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

  • Pull beinhaltet eine Integrationsrichtlinie.
  • Auf einen erfolgreichen Abruf kann eine Ablehnung folgen.
  • Die Persistenz von Richtlinien muss explizit überprüft werden.

Glossarbegriffe eingeführt

Rebase – إعادة تأسيس; Wiederholung – إعادة تطبيق; Rettungsreferent — مرجع حفظ.

Videotranskript

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

Zeigen Sie das Transkript
  1. Beginnen Sie am genauen Kontrollpunkt.
  2. Benennen Sie den Zweig und den Index und Arbeitsversion.
  3. Bereiten Sie nur die isolierte Kurskopie vor.
  4. Benennen Sie den Upstream und Behalten Sie alle drei Eingaben bei.
  5. Der schnelle Vorlauf verweigert diese Abweichung lediglich.
  6. Auf einen erfolgreichen Abruf kann eine Ablehnung folgen.
  7. Die Zusammenführungsrichtlinie behält beide Historien bei.
  8. Spielen Sie nur das private Thema ab.
  9. Vergleichen Sie Eltern und Komplette Bäume separat.
  10. Schreiben Sie anschließend die überprüfte Pull-Richtlinie.
  11. Stellen Sie die vorherige App-weite Richtlinie wieder her.
  12. Was ist hier Pull?
  13. Pull hat eine Transportphase und politisch gesteuerte lokale Phase.
  14. Was kann bei einer FF-only-Ablehnung passieren?
  15. Der Abruf kann früher abgeschlossen werden Integration lehnt Divergenz ab.
  16. Private Wiedergabe auf N: resultierendes übergeordnetes Element?
  17. Rebase erstellt S′ auf N, im Gegensatz zu Merge K.
  18. Ändern Sie die aktuelle Arbeit in eine veröffentlichte, freigegebene Arbeit Thema: Rebase immer noch automatischer Hinweis?
  19. Nur private Annahmen gelten nicht mehr.
  20. Befehl „Palettenrichtlinie“. ändert sich nur ein Zug?
  21. Die Quelle schreibt general.pullMode bis eine andere Wahl es wiederherstellt.
  22. Was beweist den Vergleich?
  23. Vergleichen Sie lieber den Ist-Zustand als Schweigen zu befehlen.
  24. Überprüfen Sie das tatsächliche Ergebnis, nicht nur eine Nachricht.
  25. Sagen Sie die geänderte Eingabe vorher, bevor Sie handeln.
  26. Bewahren Sie nützliche Arbeit vor der Wiederherstellung auf.
  27. Überprüfen Sie den Kontrollpunkt, bevor Sie fortfahren.
  28. Behalten Sie das überprüfte Ergebnis für den nächsten Schritt.