Hinweis
Dieses Feature befindet sich in der öffentlichen Vorschau und kann geändert werden.
Die Erweiterung gh stack für GitHub CLI erstellt und verwaltet Stapel von Pull Requests aus Ihrem lokalen Repository. Eine Einführung in Stacks finden Sie unter Gestapelte Pullanforderungen.
Einrichtung
gh extension install github/gh-stack
Die Erweiterung erfordert GitHub CLI (gh) Version 2.0 oder höher.
Hinweis
Die gh stack Erweiterung verwendet Ihre GitHub CLI Authentifizierung. Wenn Sie sich noch nicht authentifiziert haben, führen Sie gh auth login aus.
Befehlszusammenfassung
| Befehl | Purpose |
|---|---|
gh stack init | Initialisieren Sie einen neuen Stapel im aktuellen Repository. |
gh stack add | Fügen Sie oberhalb des aktuellen Stacks einen neuen Branch hinzu. |
gh stack view | Aktuellen Stack anzeigen. |
gh stack checkout | Checken Sie einen Stack anhand der Stack-Nummer, der Pull-Request-Nummer, der Pull-Request-URL oder des Branch-Namens aus. |
gh stack modify | Restrukturieren Sie den aktuellen Stapel interaktiv neu. |
gh stack unstack | Entfernen Sie einen Stack aus der lokalen Verfolgung und lösen Sie ihn aus dem Stack auf GitHub. |
gh stack submit | Übertragen Sie alle Branches und erstellen oder aktualisieren Sie dann Pull Requests und den Stack auf GitHub. |
gh stack sync | Abrufen, rebasen, pushen und den Status der Pull Request mit einem einzigen Befehl synchronisieren. |
gh stack rebase | Pullen Sie vom Remote und führen Sie einen kaskadierenden Rebase über den gesamten Stack aus. |
gh stack push | Übertragen Sie die aktiven Branches im aktuellen Stack zum Remote-Repository. |
gh stack link | Pull Requests auf GitHub ohne lokales Tracking zu einem Stapel zusammenfassen. |
gh stack merge | Führen Sie einen oder mehrere gestapelte Pull Requests gleichzeitig zusammen. |
gh stack switch | Interaktiver Wechsel zu einer anderen Verzweigung im Stapel. |
gh stack up | Gehen Sie nach oben, in Richtung der Spitze des Stapels, weg vom Stamm. |
gh stack down | Gehen Sie nach unten zum unteren Ende des Stapels, Richtung Trunk. |
gh stack top | Springen Sie zum Anfang des Stapels. |
gh stack bottom | Springen Sie zum unteren Ende des Stapels. |
gh stack trunk | Springen Sie zum Trunkzweig. |
gh stack alias | Erstellen Sie einen kurzen Alias für einen Befehl, damit Sie weniger tippen müssen. |
gh stack feedback | Teilen Sie Feedback zur gh stack Erweiterung. |
Stapelverwaltung
gh stack init
Initialisieren Sie einen neuen Stapel im aktuellen Repository.
gh stack init [flags] [branches...]
Initialisiert lokal einen neuen Stack. Im interaktiven Modus (ohne Argumente) fordert der Befehl zur Eingabe eines Branch-Namens auf und bietet an, den aktuellen Branch als erste Ebene zu verwenden.
Wenn Sie explizite Branch-Namen angeben, werden vorhandene Branches automatisch verwendet und alle fehlenden Branches werden erstellt. Der Trunk ist standardmäßig auf die Standardverzweigung des Repositorys festgelegt, es sei denn, Sie überschreiben ihn mit --base.
Der Befehl aktiviert git rerere automatisch, sodass Konfliktlösungen über mehrere Rebase-Vorgänge hinweg gemerkt werden.
| Flag | Beschreibung |
|---|---|
-b, --base <branch> | Haupt-Branch für den Stack (standardmäßig der Standard-Branch des Repositorys) |
Beispiele:
# Interactive — prompts for branch names
gh stack init
# Non-interactive — specify first branch upfront
gh stack init feature-auth
# Use a different trunk branch
gh stack init --base develop feature-auth
# Adopt or create multiple branches at once
gh stack init feature-auth feature-api feature-ui
gh stack add
Fügen Sie oberhalb des aktuellen Stacks einen neuen Branch hinzu.
gh stack add [flags] [branch]
Erstellt für einen vorhandenen Stapel eine neue Verzweigung am aktuellen HEAD, fügt ihn zum Anfang des Stapels hinzu und checkt ihn aus. Sie müssen diesen Befehl ausführen, während Sie sich am oberen Rand eines Stapels befinden. Wenn Sie keinen Branch-Namen angeben, fordert der Befehl Sie zur Eingabe eines solchen auf.
Wenn Sie den Befehl interaktiv von einem Branch aus ausführen, der nicht Teil eines Stacks ist, bietet add stattdessen an, einen neuen Stack zu initialisieren. Der von Ihnen angegebene Branch-Name oder der automatisch generierte Name bildet die erste Ebene. Wenn Sie keinen Namen angeben, werden die Standardaufforderungen init verwendet.
Optional können Sie Änderungen stufen und einen Commit als Teil des add Flusses erstellen. Wenn Sie -m ohne expliziten Branch-Namen angeben, wird der Branch-Name automatisch im Datums- und Slug-Format generiert, z. B. 03-24-add_login.
| Flag | Beschreibung |
|---|---|
-A, --all | Alle Änderungen vormerken, einschließlich der nicht verfolgten Dateien. Erfordert -m. |
-u, --update | Stufen Sie Änderungen nur auf nachverfolgte Dateien. Erfordert -m. |
-m, --message <string> | Erstellen eines Commits mit dieser Nachricht vor dem Erstellen der Verzweigung |
Hinweis
-A und -u schließen sich gegenseitig aus.
Beispiele:
# Create a branch by name
gh stack add api-routes
# Prompt for a branch name interactively
gh stack add
# Stage all changes, commit, and auto-generate the branch name
gh stack add -Am "Add login endpoint"
# Stage only tracked files, commit, and auto-generate the branch name
gh stack add -um "Fix auth bug"
# Commit already-staged changes and auto-generate the branch name
gh stack add -m "Add user model"
# Stage all changes, commit, and use an explicit branch name
gh stack add -Am "Add tests" test-layer
# Stage only tracked files, commit, and use an explicit branch name
gh stack add -um "Update docs" docs-layer
gh stack view
Aktuellen Stack anzeigen.
gh stack view [flags]
Zeigt alle Branches im Stack, ihre Reihenfolge, Links zu Pull Requests und den neuesten Commit mit relativem Zeitstempel an. Standardmäßig öffnet der Befehl eine Vollbildansicht in einem interaktiven Terminal und druckt statische Ausgabe in einem nicht interaktiven Terminal. Die Flags --short und --json geben in beiden Umgebungen direkt auf der Standardausgabe aus.
| Flag | Beschreibung |
|---|---|
-s, --short | Kompakte Ausgabe mit einer Zeile pro Branch |
--json | Ausgabestapeldaten als JSON |
Beispiele:
gh stack view
gh stack view --short
gh stack view --json
gh stack view --short verwendet OSC-8-Hyperlinks für Pull-Request-Nummern, wenn das Terminal diese unterstützt. Andernfalls wird die vollständige URL zum Kopieren und Einfügen angezeigt. Legen Sie GH_STACK_HYPERLINKS=1 oder GH_STACK_HYPERLINKS=0 fest, um die Terminalerkennung zu überschreiben.
gh stack checkout
Checken Sie einen Stack anhand seiner Stack-Nummer, einer Pull-Request-Nummer, einer Pull-Request-URL oder eines Branch-Namens aus.
gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
Eine eigenständige Zahl wird zunächst als Stack- oder Pull-Request-Nummer interpretiert. Hierbei handelt es sich um repositorybezogene Bezeichner, die in der GitHub Benutzeroberfläche angezeigt werden. Falls nichts zur Nummer passt, wird sie als Branch-Name interpretiert.
Wenn Sie einen Remote-Stack referenzieren, ruft der Befehl den Stack auf GitHub ab, zieht die Branches und richtet den Stack lokal ein. Wenn der Stack bereits lokal vorhanden ist und damit übereinstimmt, wechselt der Befehl zum Branch. Wenn die lokalen und entfernten Stacks unterschiedlich zusammengesetzt sind, werden Sie aufgefordert, den Konflikt zu beheben.
Wenn Sie einen Branch-Namen angeben, prüft der Befehl zuerst die lokal verfolgten Stacks. Wenn der Branch nicht lokal verfolgt wird, sucht der Befehl auf Remote-Stacks nach dem Branch und lädt den entsprechenden Stack herunter. Wenn mehrere Stapel übereinstimmen, verwenden Sie eine Stapel- oder Pullanforderungsnummer, um eine explizit auszuwählen.
Wenn Sie den Befehl ohne Argumente in einem interaktiven Terminal ausführen, prüft er zunächst, ob der aktuelle Branch zu einem Stack auf dem Remote gehört, der lokal nicht nachverfolgt wird, und bietet an, ihn auszuchecken. Wenn es keine eindeutige Übereinstimmung gibt oder Sie dies ablehnen, wird eine durchsuchbare Auswahlliste geöffnet, in der alle für Sie verfügbaren Stacks aufgeführt sind – sowohl die lokal nachverfolgten Stacks als auch die Stacks, die nur auf GitHub vorhanden sind. Jede Zeile zeigt die Stapelnummer, deren untere und obere Verzweigung, Basiszweig, eine Statusleiste, die zusammenfasst, wie viele ihrer Pullanforderungen zusammengeführt, geöffnet, geschlossen oder noch nicht pusht werden und ob der Stapel lokal oder nur auf der Remoteseite verfügbar ist. Filtern Sie mit den Registerkarten "Alle", " Lokal" und " Remote ", oder geben Sie den Suchbegriff ein / . Vollständig zusammengeführte Stapel werden weggelassen. Wenn Sie einen ausschließlich remote vorhandenen Stack auswählen, wird er zunächst lokal geklont, bevor zu ihm gewechselt wird.
Beispiele:
# Check out a stack by its stack number
gh stack checkout 7
# Check out a stack by pull request number
gh stack checkout 42
# Check out a stack by pull request URL
gh stack checkout https://github.com/owner/repo/pull/42
# Check out a stack by branch name
gh stack checkout feature-auth
# Interactive — pick from all available stacks (local and remote)
gh stack checkout
gh stack modify
Restrukturieren Sie den aktuellen Stapel interaktiv neu.
gh stack modify [flags]
Öffnet eine interaktive Terminal-UI zur Umstrukturierung eines Stapels. Alle Änderungen werden auf der Benutzeroberfläche angeordnet und zusammen angewendet, wenn Sie STRG+S drücken. Verzweigungen von zusammengeführten Pullanforderungen können nicht geändert werden.
| Flag | Beschreibung |
|---|---|
--continue | Fortfahren nach dem Auflösen von Konflikten |
--abort | Abbrechen der Änderungssitzung und Wiederherstellen des Stapels in den Zustand, bevor Sie den Befehl ausgeführt haben |
Voraussetzungen
Der Befehl überprüft diese Bedingungen vor dem Öffnen der Schnittstelle:
- Sie müssen lokal einen aktiven Stack ausgecheckt haben.
- Ihre Arbeitsstruktur muss sauber sein, ohne dass keine nicht übernommenen Änderungen vorgenommen werden.
- Es wird keine Neubasis ausgeführt.
- Kein Pull Request im Stack ist zum Zusammenführen vorgemerkt.
- Der Commit-Verlauf muss linear sein, ohne Merge-Commits und ohne auseinandergelaufene Branches.
Operations
| Operation | Schlüssel | Effect |
|---|---|---|
| Entfernen | ||
| x | Entfernen Sie den Branch und seine Commits aus dem Stack. Der lokale Branch und der zugehörige Pull Request bleiben erhalten. | |
| Nach unten falten | ||
| d | Absorb setzt sich in die untere Verzweigung hin zum Trunk ein. Der gefaltete Zweig wird aus dem Stapel entfernt. | |
| Hochklappen | ||
| u | Commits in die darüberliegende Branch integrieren, weg vom Trunk. Der gefaltete Zweig wird aus dem Stapel entfernt. | |
| Unten einfügen | ||
| i | Fügen Sie unterhalb des Cursors, zum Stamm hin, einen neuen leeren Zweig ein. | |
| Oben einfügen | ||
| Ich | Fügen Sie oberhalb des Cursors, vom Trunk weg, einen neuen leeren Zweig ein. | |
| Nach unten | ||
| Umschalt+↓ | Verschieben Sie den Zweig nach unten, in Richtung des Stamms. | |
| Nach oben | ||
| UMSCHALT+↑ | Verschieben Sie den Ast nach oben, vom Stamm weg. | |
| Umbenennen | ||
| r | Benennen Sie die Verzweigung mithilfe einer Inlineaufforderung um. | |
| Undo | ||
| Z | Rückgängigmachen der letzten mehrstufigen Aktion. |
Anwendungsphase
Wenn Sie STRG+S drücken, werden die mehrstufigen Änderungen durch Umbenennen von Verzweigungen, Einfügen neuer Verzweigungen, Faltung oder Ablegen von Verzweigungen und Ausführen einer Cascading Rebase angewendet, um einen linearen Commitverlauf mit dem gewünschten Stapelzustand zu erstellen.
Wenn ein Rebase-Konflikt auftritt, können Sie eine der folgenden Aktionen ausführen:
- Lösen Sie die Konflikte, fügen Sie die Dateien zum Staging-Bereich hinzu und führen Sie anschließend
gh stack modify --continueaus. - Führen Sie die Ausführung
gh stack modify --abortaus, um den Vorgang abzubrechen und den Stapel in den vorherigen Zustand wiederherzustellen.
Nach dem Ändern
Wenn Sie bereits einen Stapel von Pull Requests auf GitHub erstellt haben, führen Sie gh stack submit aus, um die aktualisierten Branches hochzuladen und den Stapel neu zu erstellen. Der alte Stapel wird automatisch ersetzt.
Beispiele:
# Open the interactive modify interface
gh stack modify
# Continue after resolving a conflict
gh stack modify --continue
# Abort and restore to the previous state
gh stack modify --abort
gh stack unstack
Entfernen Sie einen Stack aus der lokalen Verfolgung und lösen Sie ihn aus dem Stack auf GitHub. Dieser Befehl ist auch als gh stack delete verfügbar.
gh stack unstack [<stack-number>] [flags]
Ohne Argument bezieht sich der Befehl auf den aktiven Stack, also den Stack, der den aktuell ausgecheckten Branch enthält. Der Stack auf GitHub wird aufgelöst und das lokale Tracking entfernt.
Geben Sie eine Stapelnummer an, den Bezeichner, der in der Stapelbenutzeroberfläche GitHubangezeigt wird, um einen bestimmten Stapel aufzuheben. Dies funktioniert von überall im Repository aus, unabhängig davon, ob der Stack lokal ausgecheckt ist oder nicht, da der Stack direkt über die GitHub API entstapelt wird. Wenn der Stack auch lokal verfügbar ist, wird auch seine lokale Verfolgung entfernt.
Pull Requests, die bereits zusammengeführt wurden, gerade zusammengeführt werden oder zum Zusammenführen in die Warteschlange eingereiht wurden, können auf GitHub nicht aus einem Stapel entfernt werden und bleiben Teil des Stapels. Wenn jede Pullanforderung entfernt wird, wird der Stapel aufgelöst, und jede lokale Nachverfolgung wird entfernt. Wenn einige Pull-Requests Teil eines Stacks bleiben, wird der Stack beibehalten, und die lokale Tracking-Konfiguration bleibt, sofern vorhanden, unverändert. Verwenden Sie --local, um die Remote-Operation zu überspringen und nur die lokale Tracking-Referenz zu entfernen.
Dieser Befehl ist nützlich, wenn Sie einen Stapel neu strukturieren müssen, indem Sie eine Verzweigung entfernen, eine Verzweigung einfügen, Verzweigungen neu anordnen, Verzweigungen umbenennen oder andere große Änderungen vornehmen. Verwenden Sie nach dem Entstapeln gh stack init, um den Stapel mit der gewünschten Struktur neu zu erstellen. Vorhandene Branches werden automatisch übernommen.
| Flag | Beschreibung |
|---|---|
--local | Entfernen Sie den Stack nur lokal und behalten Sie ihn auf GitHub bei. |
Beispiele:
# Unstack the current stack on GitHub and remove local tracking
gh stack unstack
# Unstack a specific stack by its number
gh stack unstack 7
# Only remove local tracking
gh stack unstack --local
Remotevorgänge
gh stack submit
Übertragen Sie alle Branches und erstellen oder aktualisieren Sie dann Pull Requests und den Stack auf GitHub.
gh stack submit [flags]
Erstellt eine Pullanforderung für jede Verzweigung im Stapel, wobei Verzweigungen an die Remoteseite verschoben werden. Nach dem Erstellen von Pullanforderungen erstellt submit automatisch auf GitHub einen Stapel, um die Pullanforderungen miteinander zu verknüpfen. Wenn der Stapel auf GitHub bereits vorhanden ist, z. B. aus einer vorherigen Übermittlung, werden neue Pull Requests dem vorhandenen Stapel hinzugefügt.
Wenn jede Pullanforderung im Stapel bereits zusammengeführt wurde, ist dieser Stapel abgeschlossen und kann nicht erweitert werden. In diesem Fall startet submit automatisch einen neuen Stapel, der für Ihre nicht zusammengeführten Branches im Trunk wurzelt, und erstellt ihn auf GitHub, sodass der bereits zusammengeführte Stapel unverändert bleibt.
In einem interaktiven Terminal öffnet submit einen bildschirmfüllenden Editor auf einem einzelnen Bildschirm.
- Linker Bereich. Jeder Branch ohne Pull Request ist standardmäßig eingeschlossen. Wählen Sie alle, die Sie nicht übermitteln möchten, mit STRG+X ab. Da jeder Pull Request auf dem darunterliegenden Branch aufbaut, werden beim Abwählen eines Branches auch die darüber gestapelten Branches abgewählt, und wenn ein Branch wieder einbezogen wird, werden auch die darunterliegenden Branches, von denen er abhängt, wieder einbezogen. Branches, für die bereits ein Pull Request existiert – ob offen, als Entwurf, in der Warteschlange oder zusammengeführt –, werden zur Orientierung angezeigt, sind jedoch gesperrt. Bearbeiten Sie diese im Web.
- Rechtes Panel. Entwerfen Sie für die fokussierte Verzweigung den Titel und die Beschreibung, und wählen Sie aus, ob die Pullanforderung zur Überprüfung oder als Entwurf geöffnet wird. Die Beschreibung wird anhand der Pull-Request-Vorlage Ihres Repositorys oder der Commits vorausgefüllt, einschließlich einer Markdown-Vorschau. Um die Beschreibung in einem externen Editor zu bearbeiten, drücken Sie STRG+E. Die Erweiterung verwendet den ersten nichtleeren Wert aus den Umgebungsvariablen
GH_EDITOR,VISUALundEDITORin dieser Reihenfolge. Wenn nichts festgelegt ist, wirdviverwendet, falls auf IhremPATHverfügbar. Wenn ein gesperrter Zweig fokussiert wird, wird eine schreibgeschützte Karte mit einem Link zum zugehörigen Pull Request angezeigt. Drücken Sie o , um sie im Browser zu öffnen.
Drücken Sie STRG+S , um alle enthaltenen Pullanforderungen gleichzeitig zu übermitteln. Der Editor unterstützt sowohl Tastatur- als auch Mauseingaben. Übergeben Sie --auto, oder führen Sie den Befehl in einem nicht-interaktiven Terminal, etwa in CI, aus, um den Editor zu überspringen und automatisch generierte Titel zu verwenden.
Wenn die Branches bereits offene Pull Requests haben, auf GitHub aber noch kein Stack vorhanden ist, haben Sie die Möglichkeit, die Pull Requests mit STRG+B zu einem Stack zu verknüpfen.
Im Editor sind neue Pull Requests standardmäßig als „bereit zur Überprüfung“ markiert. Sie können jeden Pull Request über die Umschaltfläche als Entwurf markieren. Mit --auto werden neue Pull Requests als Entwurf erstellt, es sei denn, Sie geben --open an.
| Flag | Beschreibung |
|---|---|
--auto | Überspringen des Editors und Verwenden automatisch generierter Pullanforderungstitel |
--open | Erstellen sie neue Pullanforderungen als bereit für die Überprüfung anstelle von Entwürfen, und markieren Sie vorhandene Pullanforderungen als bereit für die Überprüfung. |
--remote <name> | Remote, an die gepusht werden soll (standardmäßig die automatisch erkannte Remote) |
Beispiele:
gh stack submit
gh stack submit --auto
gh stack submit --open
gh stack sync
Abrufen, rebasen, pushen und den Status der Pull Request mit einem einzigen Befehl synchronisieren.
gh stack sync [flags]
Synchronisiert den gesamten Stack.
- Abrufen. Ruft die neuesten Änderungen von
originab. - Gleichen Sie den Remote-Stack ab. Spiegelt den Stack auf GitHub lokal wider. Wenn pull-Anforderungen dem Stapel GitHubhinzugefügt wurden, sodass die Remote vor dem lokalen Stapel liegt, werden ihre Verzweigungen automatisch nach unten gezogen und an den lokalen Stapel angefügt. Wenn die lokalen und Remotestapel wirklich voneinander abweichen, z. B. weil Sie eine Verzweigung lokal hinzugefügt haben, während dem Stapel GitHubverschiedene Pullanforderungen hinzugefügt wurden, werden Sie aufgefordert, den Unterschied zu beheben. Siehe "Diverged stacks". In einem nicht-interaktiven Terminal führt eine Divergenz zum Abbruch der Synchronisierung, und es wird weder etwas gepusht noch aktualisiert.
- Schnellvorlauf-Trunk. Leitet die Trunkverzweigung schnell weiter, um mit der Remote zu übereinstimmen. Dieser Schritt wird übersprungen, wenn die Branches divergiert sind.
- Kaskadierungs-Neubasis. Setzt alle Branches im Stapel auf ihre aktualisierten Eltern-Branches neu auf, aber nur, wenn trunk verschoben wurde. Wenn ein Konflikt erkannt wird, werden alle Branches in ihren ursprünglichen Zustand zurückversetzt, und Ihnen wird geraten,
gh stack rebaseauszuführen, um Konflikte interaktiv zu lösen. - Drücken. Pusht alle Branches unter Verwendung von
--force-with-lease, wenn ein Rebase durchgeführt wurde. - Synchronisieren von Pullanforderungen. Synchronisiert den Status von Pull Requests aus GitHub und meldet den Status jedes Pull Requests.
- Synchronisieren Sie den Stapel. Verknüpft die offenen Pull-Requests des Stacks zu einem Stack auf GitHub, erstellt das Remote-Stack-Objekt, falls es noch nicht vorhanden ist, oder aktualisiert es, wenn es nur teilweise erstellt wurde. Dies geschieht nur, wenn zwei oder mehr Pullanforderungen vorhanden sind. Die Synchronisierung öffnet nie Pullanforderungen. Verwenden Sie
gh stack submitdafür. - Pflaume. In interaktiven Terminals werden Sie dazu aufgefordert, lokale Branches für zusammengeführte Pull Requests zu löschen. Verwenden Sie
--prune, um automatisch zu bereinigen.
Ein sauberes Remote-Ahead-Update, bei dem Pull Requests oben auf Ihren lokalen Stack angewendet werden, wird automatisch heruntergeladen, ohne Rückfrage, sodass sync sicher in der Automatisierung ausgeführt werden kann. Synchronisieren Sie Aufforderungen nur, wenn die Stacks tatsächlich auseinandergelaufen sind.
Auseinandergelaufene Stapel
Wenn kein Stapel ein klares Präfix des anderen ist, z. B. weil Sie eine Verzweigung lokal hinzugefügt haben, während separate Pullanforderungen demselben Stapel GitHubhinzugefügt wurden, kann die Synchronisierung die beiden nicht automatisch zusammenführen. In einem interaktiven Terminal bietet es drei Auswahlmöglichkeiten.
- Verwenden Sie den Remote-Stack als maßgebliche Quelle. Ersetzt Ihre lokale Stack-Zusammensetzung durch die des Remotes, wobei alle fehlenden Branches heruntergezogen werden. Wenn Sie sich auf einem Branch befanden, den der Remote-Stack nicht mehr enthält, werden Sie zum nächstgelegenen verbleibenden Branch verschoben. Dies erfordert einen sauberen Arbeitszustand ohne nicht abgeschlossene Änderungen.
- Löschen Sie den Stapel in GitHub. Löscht das Stack-Objekt auf GitHub und beendet die Synchronisierung. Ihre Pull Requests und lokalen Branches bleiben unberührt, und nur der Stack auf GitHub wird entfernt. Erstellen Sie den Stack mit
gh stack submitneu; führen Sie zuerstgh stack modifyaus, wenn Sie seine Struktur ändern möchten. So sorgen Sie dafür, dass GitHub zu Ihrem lokalen Stack passt, dennsubmiterstellt im Gegensatz zusyncauch Pull-Requests für alle Branches, die Sie noch nicht eingereicht haben. - Abbrechen. Bricht die Synchronisierung ab, ohne Branches zu pushen oder Pull Requests zu aktualisieren.
In einem nicht interaktiven Terminal bricht eine Divergenz die Synchronisierung ab; das Programm wird erfolgreich beendet, ohne Branches zu pushen oder Pull Requests zu aktualisieren. Beheben Sie das Problem, indem Sie den Stack auflösen und neu erstellen.
| Flag | Beschreibung |
|---|---|
--remote <name> | Remote zum Abrufen von und Push an (Standardeinstellungen für die automatisch erkannte Remoteverbindung) |
--prune | Lokale Branches von zusammengeführten Pull Requests löschen |
Beispiele:
gh stack sync
# Sync and automatically prune merged branches
gh stack sync --prune
gh stack rebase
Pullen Sie vom Remote und führen Sie einen kaskadierenden Rebase über den gesamten Stack aus.
gh stack rebase [flags] [branch]
Ruft die neuesten Änderungen von origin ab und stellt dann sicher, dass jeder Branch im Stack den neuesten Commit der vorherigen Ebene in seiner Commit-Historie enthält. Branches werden der Reihe nach neu basiert, ausgehend vom Hauptzweig nach oben.
Wenn der Pull-Request eines Branches zusammengeführt wurde, wechselt der Rebase automatisch in den Modus --onto, um Commits korrekt auf dem Merge-Ziel erneut anzuwenden.
Wenn ein Rebase-Konflikt auftritt, wird der Vorgang angehalten und die konfliktierten Dateien mit Zeilennummern gedruckt. Beheben Sie die Konflikte, stagen Sie sie mit git add und fahren Sie dann mit --continue fort. Um den gesamten Rebase rückgängig zu machen, verwenden Sie --abort, um alle Branches auf ihren Zustand vor dem Rebase zurückzusetzen.
| Flag | Beschreibung |
|---|---|
--downstack | Nur Basisverzweigungen vom Trunk bis zur aktuellen Verzweigung |
--upstack | Nur Basisverzweigungen von der aktuellen Verzweigung bis zum oberen Rand |
--no-trunk | Überspringen Sie den Trunk. Stack-Branches nur aufeinander rebasen, ohne Fetch und ohne Trunk-Rebase. |
--continue | Fortsetzen der Neubasis nach dem Auflösen von Konflikten |
--abort | Rebase abbrechen und alle Branches in den Zustand vor dem Rebase zurückversetzen |
--remote <name> | Remote zum Abrufen von (Standardeinstellungen für die automatisch erkannte Remoteverbindung) |
--committer-date-is-author-date | Legen Sie das Committerdatum während der Neubasis auf das Erstellungsdatum fest. Alias: --preserve-dates. |
| Argument | Beschreibung |
|---|---|
[branch] | Zielzweig (standardmäßig der aktuelle Zweig) |
Beispiele:
# Rebase the entire stack
gh stack rebase
# Only rebase branches below the current one
gh stack rebase --downstack
# Only rebase branches above the current one
gh stack rebase --upstack
# Rebase stack branches without pulling from or rebasing with trunk
gh stack rebase --no-trunk
# After resolving a conflict
gh stack rebase --continue
# Abort rebase and restore everything
gh stack rebase --abort
# Rebase and preserve committer date as author date
gh stack rebase --committer-date-is-author-date
gh stack push
Übertragen Sie die aktiven Branches im aktuellen Stack zum Remote-Repository.
gh stack push [flags]
Pusht alle aktiven Branches, mit Ausnahme zusammengeführter und in die Warteschlange gestellter Branches, in einem einzigen git push, wobei eine explizite --force-with-lease-Prüfung für jeden Branch verwendet wird. Das Update ist nicht atomar. Branches, deren Leases gültig sind, können aktualisiert werden, selbst wenn eine andere Branch abgelehnt wird. Korrigieren Sie den abgelehnten Branch und führen Sie den Befehl erneut aus. Branches, die bereits aktualisiert wurden, bleiben unverändert. Mit diesem Befehl werden keine Pullanforderungen erstellt oder aktualisiert. Verwenden Sie gh stack submit dafür.
| Flag | Beschreibung |
|---|---|
--remote <name> | Remote, an die gepusht werden soll (standardmäßig die automatisch erkannte Remote) |
Beispiele:
gh stack push
gh stack push --remote upstream
gh stack link
Pull Requests auf GitHub ohne lokales Tracking zu einem Stapel zusammenfassen.
gh stack link [flags] <stack-number | branch-or-pr> <branch-or-pr> [...]
Erstellt oder aktualisiert einen Stack auf GitHub aus Branchnamen oder Pull-Request-Nummern und URLs. Dieser Befehl erstellt oder ändert keinen lokalen Nachverfolgungsstatus. Es wurde für Personen entwickelt, die Filialen mit anderen Tools lokal verwalten, z. B. Jujutsu, Sapling oder Git-Town, und möchten einen Stapel von Pullanforderungen öffnen. Siehe Verwenden anderer Tools mit gestapelten Pullanforderungen.
Sie stellen Argumente in Stapelreihenfolge von unten nach oben bereit. Branch-Argumente werden automatisch zum Remote-Repository übertragen, bevor Pull Requests erstellt oder gesucht werden. Für Branches, für die bereits offene Pull Requests vorhanden sind, werden diese verwendet. Für Branches ohne Pull Requests werden automatisch neue Pull Requests mit der korrekten Verkettung der Basis-Branches erstellt. Vorhandene Pullanforderungen, deren Basiszweig nicht mit der erwarteten Kette übereinstimmt, werden automatisch korrigiert.
Wenn sich die Pullanforderungen noch nicht in einem Stapel befinden, wird ein neuer Stapel erstellt. Wenn sich einige der Pullanforderungen bereits in einem Stapel befinden, wird der vorhandene Stapel aktualisiert, um die neuen Pullanforderungen einzuschließen. Vorhandene Pullanforderungen werden nie aus einem Stapel entfernt, da das Update nur additiv ist.
Um einen vorhandenen Stapel zu vergrößern, ohne seine Pullanforderungen erneut aufzulisten, übergeben Sie eine Stapelnummer, die in der Stapel-UI GitHubangezeigt wird, als erstes Argument. Die übrigen Argumente werden oben auf diesen Stapel angehängt. Argumente, die bereits im Stapel vorhanden sind, werden übersprungen, und Argumente, die zu einem anderen Stapel gehören, werden abgelehnt. Da Stapel- und Pullanforderungsnummern niemals überlappen, wird ein numerisches erstes Argument nur dann als Stapel behandelt, wenn es mit einem vorhandenen Stapel übereinstimmt. Andernfalls wird dies als Pull Request oder Branch behandelt.
| Flag | Beschreibung |
|---|---|
--base <branch> | Basis-Branch für das untere Ende des Stacks (standardmäßig der Standard-Branch des Repositorys). Dieses Flag wird ignoriert, wenn Sie etwas zu einem vorhandenen Stack hinzufügen. |
--open | Markieren neuer und vorhandener Pullanforderungen als bereit für die Überprüfung |
--remote <name> | Remote, an die gepusht werden soll (standardmäßig die automatisch erkannte Remote) |
Beispiele:
# Link branches into a stack (pushes, creates pull requests, creates stack)
gh stack link feature-auth feature-api feature-ui
# Link existing pull requests by number
gh stack link 10 20 30
# Link existing pull requests by URL
gh stack link https://github.com/owner/repo/pull/10 https://github.com/owner/repo/pull/20
# Add branches to an existing stack of pull requests
gh stack link 42 43 feature-auth feature-ui
# Append to the top of an existing stack by its stack number, with no need
# to list the pull requests already in stack 7 again
gh stack link 7 48 feature-ui
# Use a different base branch and mark pull requests as ready for review
gh stack link --base develop --open feat-a feat-b feat-c
gh stack merge
Führen Sie einen oder mehrere gestapelte Pull Requests gleichzeitig zusammen.
gh stack merge [<stack-number> | <pr-number>]
Führt alle Pull Requests im Stack bis einschließlich des von Ihnen ausgewählten Pull Requests in den Basis-Branch zusammen. Die Zusammenführung ist ein einzelner Alles-oder-nichts-Vorgang. Wenn eine Pullanforderung nicht zusammengeführt werden kann, werden sie nicht zusammengeführt.
Ohne Argument verwendet der Befehl den aktiven lokalen Stapel. Geben Sie eine Stack-Nummer an, um einen Stack zusammenzuführen, den Sie nicht lokal ausgecheckt haben, was ein rein remote ausgeführter Vorgang ist, oder geben Sie eine Pull-Request-Nummer an, um direkt bis zu diesem Pull-Request zusammenzuführen.
In einem interaktiven Terminal werden Sie aufgefordert, auszuwählen, welche Pullanforderungen zusammengeführt werden sollen, wählen Sie die Merge-Methode aus, und bestätigen Sie. In einem nicht interaktiven Terminal oder wenn Sie --yes verwenden, wird der gesamte Stapel bzw. alles bis zu dem von Ihnen angegebenen Pull-Request ohne Rückfrage zusammengeführt, und zwar mit der zuletzt verwendeten Merge-Methode, sofern Sie keine andere angeben.
Nur der grundlegende Pullanforderungsstatus wird vor dem Zusammenführen überprüft. Jede Pullanforderung muss geöffnet sein und darf kein Entwurf sein. GitHub wertet Branchschutz- und Repository-Regeln aus, wenn die Zusammenführung ausgeführt wird, und etwaige Fehler werden Ihnen gemeldet.
Hinweis
Sie können die Zusammenführungsanforderungen nicht umgehen, wenn Sie gestapelte Pullanforderungen zusammenführen.
Wenn der Basiszweig eine Merge-Warteschlange verwendet, wird der Stack zur Warteschlange hinzugefügt, anstatt direkt zusammengeführt zu werden. Die Warteschlange wählt die Methode zum Zusammenführen aus, sodass die Abfrage den Schritt zur Auswahl der Methode zum Zusammenführen überspringt und die Flags --merge-method, --squash, --rebase und --merge unter Ausgabe einer Warnung ignoriert werden. Die von Ihnen ausgewählten Pull Requests werden gemeinsam zur Warteschlange hinzugefügt, aber während die Warteschlange sie verarbeitet, werden sie nacheinander zusammengeführt, sodass sie statt alle auf einmal in separaten Gruppen übernommen werden können.
| Flag | Beschreibung |
|---|---|
--merge-method <method> | Zu verwendende Zusammenführungsmethode: merge, squash oder rebase |
--merge, --squash``--rebase | Kurzformen für die jeweilige Zusammenführungsmethode |
-y, --yes | Zusammenführen ohne Bestätigungsaufforderung |
Beispiele:
# Merge the current stack, choosing pull requests interactively
gh stack merge
# Merge a stack you do not have checked out, by stack number
gh stack merge 7
# Merge everything up to and including pull request 42
gh stack merge 42
# Merge the whole current stack without prompting, squashing commits
gh stack merge --yes --squash
Navigation
Navigationsbefehle führen Sie zwischen Branches im aktuellen Stack, ohne dass Sie sich Branch-Namen merken müssen. Die Unterseite des Stapels ist der Zweig, der dem Stamm am nächsten ist, und die Oberseite ist der Zweig, der am weitesten davon entfernt ist.
up bewegt sich vom Trunk weg, und down bewegt sich darauf zu.
Alle Navigationsbefehle sind auf die Grenzen des Stapels beschränkt. Wenn Sie sich am oberen Ende befinden und nach oben gehen oder sich am unteren Ende befinden und nach unten gehen, passiert nichts, und es wird eine Meldung angezeigt.
gh stack switch
Interaktiver Wechsel zu einer anderen Verzweigung im Stapel.
gh stack switch
Zeigt eine interaktive Auswahlliste mit allen Branches im aktuellen Stapel an, sortiert von oben – am weitesten vom Trunk entfernt – bis unten – dem Trunk am nächsten –, zusammen mit ihrer Positionsnummer. Wählen Sie eine Verzweigung aus, um sie auszuchecken.
Dieser Befehl erfordert ein interaktives Terminal.
Beispiele:
gh stack switch
# → Select a branch in the stack to switch to
# 5. frontend
# 4. api-endpoints
# 3. auth-layer
# 2. db-schema
# 1. config-setup
gh stack up
Gehen Sie nach oben, in Richtung der Spitze des Stapels, weg vom Stamm.
gh stack up [n]
Verschiebt Verzweigungen nach oben n , standardmäßig auf 1. Wenn Sie auf dem Trunk-Branch sind, wechselt up zur ersten Stack-Branch.
Beispiele:
# Move up one layer
gh stack up
# Move up three layers
gh stack up 3
gh stack down
Gehen Sie nach unten zum unteren Ende des Stapels, Richtung Trunk.
gh stack down [n]
Verschiebt n Verzweigungen nach unten, standardmäßig 1.
Beispiele:
# Move down one layer
gh stack down
# Move down two layers
gh stack down 2
gh stack top
Springen Sie zum Anfang des Stapels.
gh stack top
Checkt den vom Trunk am weitesten entfernten Branch aus.
gh stack bottom
Springen Sie zum unteren Ende des Stapels.
gh stack bottom
Checkt die Verzweigung aus, die dem Trunk am nächsten kommt.
gh stack trunk
Springen Sie zum Trunkzweig.
gh stack trunk
Checkt die Trunk-Branch des aktuellen Stacks aus, wie z. B. main. Sie müssen sich auf einem Branch befinden, der Teil eines Stacks ist.
Versorgungsdienste
gh stack alias
Erstellen Sie einen kurzen Alias für einen Befehl, damit Sie weniger tippen müssen.
gh stack alias [flags] [name]
Installiert ein kleines Wrapper-Skript in ~/.local/bin/, das alle Argumente an gh stack weiterleitet. Der Standardaliasname lautet gs, Aber Sie können einen beliebigen Namen auswählen, indem Sie ihn als Argument übergeben. Nach der Einrichtung können Sie gs push anstelle von gh stack push ausführen.
Bei Windows wird die automatische Aliaserstellung nicht unterstützt. Der Befehl druckt manuelle Anweisungen zum Erstellen einer Batchdatei oder PowerShell-Funktion.
| Flag | Beschreibung |
|---|---|
--remove | Entfernen eines zuvor erstellten Alias |
Beispiele:
# Create the default alias (gs), so that "gs push" and "gs view" both work
gh stack alias
# Create a custom alias
gh stack alias gst
# Remove an alias
gh stack alias --remove
gh stack alias --remove gst
gh stack feedback
Teilen Sie Feedback zur gh stack Erweiterung.
gh stack feedback [title]
Öffnet eine Diskussion im Gh-Stack-Repository , damit Sie Feedback übermitteln können. Optional können Sie einen Titel für den Diskussionsbeitrag angeben.
Beispiele:
gh stack feedback
gh stack feedback "Support for reordering branches"
Umgebungsvariablen
| Variable | Werte | Beschreibung |
|---|---|---|
GH_STACK_THEME | ||
auto (Standardwert), light, dark | Steuert die Farbpalette der interaktiven Oberflächen für submit, modify und view sowie die gesamte farbige Befehlsausgabe. Farben passen sich automatisch an den Terminalhintergrund an. Legen Sie diese Variable fest, um die helle oder dunkle Palette zu erzwingen, wenn ein Terminal seinen Hintergrund nicht meldet, was in einigen SSH- oder tmux Setups auftreten kann. | |
GH_STACK_HYPERLINKS | ||
0, 1 | Deaktiviert oder aktiviert OSC-8-Hyperlinks, wenn das Terminal falsch erkannt wird. Nicht unterstützte Terminals zeigen standardmäßig die vollständige URL an. |
# Force the light palette for one command
GH_STACK_THEME=light gh stack view
Exitcodes
| Code | Bedeutung |
|---|---|
| 0 | Success |
| 1 | Allgemeiner Fehler |
| 2 | Nicht in einem Stack oder Stack nicht gefunden |
| 3 | Rebase-Konflikt |
| 4 | |
| GitHub API-Fehler | |
| 5 | Ungültige Argumente oder Kennzeichnungen |
| 6 | Eindeutige Zuordnung erforderlich, da der Branch zu mehreren Stacks gehört |
| 7 | Rebase bereits im Gange |
| 8 | Stack ist von einem anderen Prozess gesperrt. |
| 9 | Gestapelte Pullanforderungen sind für dieses Repository nicht aktiviert. |
| 10 | Die Änderungssitzung wurde unterbrochen und muss wiederhergestellt werden. |