Skip to main content

Verwalten von gestapelten Pullanforderungen

Restrukturieren Sie gestapelte Pullanforderungen, ordnen Sie ihre Verzweigungen neu an, und nehmen Sie Änderungen an niedrigeren Ebenen mithilfe von GitHub CLI.

Hinweis

Dieses Feature befindet sich in der öffentlichen Vorschau und kann geändert werden.

Während Sie auf einem Stapel durchlaufen, müssen Sie häufig Änderungen in einer unteren Ebene vornehmen, die Basis ändern, um eine lineare Geschichte beizubehalten oder ihre Verzweigungen neu zu strukturieren. Die gh stack Erweiterung in GitHub CLI behandelt diese Aufgaben mit kaskadierenden Vorgängen, die alle betroffenen Verzweigungen aktualisieren. Siehe Gestapelte Pullanforderungen CLI-Befehle.

Vornehmen von Änderungen an einer niedrigeren Ebene

Wenn Sie an der obersten Ebene arbeiten und etwas niedriger im Stapel ändern müssen, nehmen Sie die Änderung in der Verzweigung vor, in der sie gehört, und ändern Sie sie neu, anstatt sie auf der aktuellen Ebene zu umgehen.

  1. Navigieren Sie zu der Verzweigung, die die Änderung benötigt.

    Shell
    gh stack down
    

    Sie können auch eine bestimmte Verzweigung mit gh stack checkout BRANCH-NAME.

  2. Nehmen Sie die Änderung vor, und übernehmen Sie ihn.

    Shell
    git add .
    git commit -m "helpful-commit-message"
    
  3. Rebase the branches above to pick up the change.

    Shell
    gh stack rebase --upstack
    
  4. Pushen Sie die aktualisierten Verzweigungen, und kehren Sie an die Stelle zurück, an der Sie gearbeitet haben.

    Shell
    gh stack push
    gh stack top
    

Neubasieren des Stapels

Ein Stapel muss einen linearen Verlauf zwischen seinen Verzweigungen aufweisen, bevor er zusammenführen kann. Beim Ausführen gh stack rebase wird eine kaskadierende Neubasis ausgeführt, auf der jede Verzweigung basierend auf der darunter liegenden Verzweigung neu basiert main, sodass jede Verzweigung die neuesten Änderungen aller unteren Ebenen einnimmt.

  1. Rebase the stack. Standardmäßig basiert dies auf jeder Verzweigung von unten nach oben.

    Shell
    gh stack rebase
    

    Um die Basis einzuschränken, verwenden Sie --downstack die Basis, um von der niedrigsten Ebene bis zur aktuellen Verzweigung zu rebasen, oder --upstack um die Basis von der aktuellen Verzweigung bis zum oberen Rand zu rebasen.

  2. Pushen Sie die aktualisierten Verzweigungen. Dies wird verwendet --force-with-lease , um die neu basierten Verzweigungen sicher zu aktualisieren.

    Shell
    gh stack push
    

Wenn bei einer Basis ein Konflikt auftritt, gh stack rebase werden die konfliktbasierten Dateien beendet und aufgelistet.

  • Lösen Sie die Markierungen in den betroffenen Dateien auf, stufen Sie sie mit git add, und führen Sie dann aus gh stack rebase --continue.
  • Führen Sie zunächst eine Ausführung gh stack rebase --abort aus, um alle Verzweigungen in ihrem vorkonfigurierten Zustand wiederherzustellen.

Hinweis

Sie können auch eine serverseitige Neubasis aus der Pullanforderung auslösen, aber diese Commits sind nicht signiert. Wenn Für Ihr Repository signierte Commits erforderlich sind, verwenden Sie die Basis GitHub CLI , damit die Commits Ihrer lokalen Git Commit-Signaturkonfiguration folgen.

Neubasieren von der GitHub Website

Wenn ein Stapel nicht linear ist, wird im Seriendruckfeld eine Schaltfläche für den Basisstapel angezeigt. Wenn Sie es auswählen, wird eine serverseitige Cascading-Neubasis ausgelöst, die:

  1. Basiert auf dem gesamten Stapel über dem neuesten Trunk, z main. B. .
  2. Basiert auf jeder nicht zusammengeführten Verzweigung oben auf der Basisverzweigung, die vom unteren Rand des Stapels nach oben funktioniert.
  3. Erzwingt das Pushen der einzelnen neu basierten Verzweigung, um die Remoteversion zu aktualisieren.

Nach Abschluss der Rebase spiegelt jede Pullanforderung die aktualisierten Verzweigungen wider, und CI-Prüfungen werden erneut ausgelöst.

Hinweis

Commits, die von einer serverseitigen Neubasis erstellt wurden, sind nicht signiert. Wenn Für Ihr Repository signierte Commits erforderlich sind, verwenden Sie die Basis GitHub CLIgh stack rebase , damit die Commits Ihrer lokalen Git Commit-Signaturkonfiguration folgen, und pushen Sie dann mit gh stack push.

Umstrukturierung eines Stapels

Möglicherweise möchten Sie die Zusammensetzung eines Stapels ändern. Wenn Sie beispielsweise eine Verzweigung ablegen, Verzweigungen kombinieren, eine Verzweigung einfügen, neu anordnen oder umbenennen müssen, verwenden Sie den interaktiven Befehl gh stack modify.

Stellen Sie vor der Ausführung gh stack modifyFolgendes sicher:

  • Sie haben einen aktiven Stapel ausgecheckt.
  • Ihre Arbeitsstruktur ist sauber.
  • Es wird keine Neubasis ausgeführt.
  • Zum Zusammenführen wird keine Pullanforderung in die Warteschlange gestellt.
  • Der Commitverlauf ist linear.
  1. Öffnen Sie die Terminal-UI ändern.

    Shell
    gh stack modify
    
  2. Wählen Sie eine Verzweigung und stufen Sie einen Vorgang aus. Neuanordnung und strukturelle Änderungen (Ablegen, Falten, Einfügen, Umbenennen) können in derselben Sitzung nicht gemischt werden.

    • x — Verzweigung und zugehörigen Commits ablegen
    • d — Falten Sie den Verzweigung in die darunter liegende Verzweigung.
    • u — Falten Sie den Verzweigung oben in das verzweigte
    • i / I — Einfügen einer neuen Verzweigung unterhalb oder oberhalb des Cursors
    • r — Umbenennen einer Verzweigung
    • Umschalt+^ / Umschalt+ Neuanordnen einer Verzweigung
    • z — Rückgängigmachen der letzten mehrstufigen Aktion
  3. Wenden Sie ihre mehrstufigen Änderungen durch Speichern an. Bis zum Speichern wird nichts geändert.

    Verwenden Sie STRG/cmd+s.

    Wenn beim Anwenden ein Konflikt auftritt, lösen Sie ihn, und führen Sie ihn aus, oder führen Sie gh stack modify --continueaus gh stack modify --abort , um den Zustand vor dem Ändern wiederherzustellen.

  4. Pushen Sie die aktualisierten Verzweigungen, und erstellen Sie den Stapel auf GitHub.

    Shell
    gh stack submit
    

Aufstapelung von der GitHub Website

Um einen Stapel von der Website aufzulösen, z. B. um ihn neu anzuordnen oder neu zu organisieren, verwenden Sie die Option " Stapel aufheben" auf dem Stapel.

Durch das Entstapeln werden die geöffneten, entwurfs- und geschlossenen Pullanforderungen aus dem Stapel entfernt. Jeder behält seine aktuelle Basisverzweigung bei, ist aber nicht mehr mit den anderen verknüpft, und die Stapelzuordnungs- und Stapelzusammenführungsanforderungen verschwinden von ihnen.

Zusammengeführte und in die Warteschlange eingereihte Pullanforderungen bleiben im Stapel. Sobald eine Pullanforderung zusammengeführt wurde oder für die Zusammenführung als Teil eines Stapels in die Warteschlange gestellt wird, kann sie nicht mehr gestapelt werden. Ein Stapel wird vollständig aufgelöst, wenn keine der Pullanforderungen zusammengeführt wurde oder für die Zusammenführung in die Warteschlange gestellt wird. andernfalls bleibt sie bei diesen Pullanforderungen erhalten, die sich noch darin befinden.

Wenn Sie einen Stapel neu anordnen oder neu strukturieren möchten, ohne ihn aufzulösen, verwenden Sie stattdessen den gh stack modify Befehl. Siehe Umstrukturierung eines Stapels.

Synchronisieren Ihrer lokalen Umgebung nach dem Zusammenführen

Wenn eine Pullanforderung am unteren Rand des Stapels zusammengeführt wird, aktualisieren Sie den lokalen Zustand mit einem einzigen Synchronisierungsbefehl. Um lokale Verzweigungen automatisch für zusammengeführte Pullanforderungen gleichzeitig zu entfernen, fügen Sie die --prune Option hinzu.

Shell
gh stack sync --prune

Dadurch werden die neuesten Änderungen abgerufen, der Trunk schnell weitergeleitet, die verbleibenden Verzweigungen werden neu geschoben, die aktualisierten Verzweigungen verschoben und der Pullanforderungsstatus synchronisiert.GitHub

Pulling in Pull-Anforderungen, die dem Stapel hinzugefügt wurden GitHub

Wenn eine andere Person Pull-Anforderungen zum Stapel GitHubhinzufügt, gh stack sync ruft die neuen Verzweigungen ab und fügt sie an Ihren lokalen Stapel an, sodass sie die Remotespiegelung widerspiegelt. Ein sauberes Remote-Ahead-Update wird automatisch heruntergezogen, daher gh stack sync ist die Ausführung in der Automatisierung sicher.

Auflösen eines divergierten Stapels

Ihre lokalen und Remotestapel unterscheiden sich, wenn keines eine saubere Erweiterung des anderen ist, z. B. wenn Sie eine Verzweigung lokal hinzufügen, während verschiedene Pullanforderungen demselben Stapel GitHubhinzugefügt werden. In diesem Fall gh stack sync können die beiden nicht automatisch zusammengeführt werden. In einem interaktiven Terminal bietet es drei Optionen:

  • Verwenden Sie den Remotestapel als Wahrheitsquelle. Ersetzt ihre lokale Stapelkomposition durch die Remote-Elemente, wobei alle fehlenden Verzweigungen abgerufen werden. Wenn Sie sich auf einer Verzweigung befinden, die der Remotestapel nicht mehr enthält, werden Sie in die nächste überlebende Verzweigung verschoben. Dies erfordert eine saubere Arbeitsstruktur ohne nicht ausgelassene Änderungen.
  • Löschen Sie den Stapel auf GitHub. Löscht das Stapelobjekt an GitHub und beendet die Synchronisierung. Ihre Pullanforderungen und lokale Verzweigungen bleiben unberührt. Erstellen Sie den Stapel neu mit gh stack submit, der auch Pullanforderungen für alle Verzweigungen erstellt, die Sie noch nicht übermittelt haben. Führen Sie zuerst die gh stack modify Ausführung aus, wenn Sie die Struktur ändern möchten.
  • Abbrechen. Bricht die Synchronisierung ab, ohne Verzweigungen zu übertragen oder Pullanforderungen zu aktualisieren.

In einem nicht interaktiven Terminal, z. B. CI, wird die Synchronisierung abgebrochen, ohne Verzweigungen zu pushen oder Pullanforderungen zu aktualisieren. Lösen Sie sie durch Auflisten und Erneutes Erstellen des Stapels auf.

Nächste Schritte