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.
-
Navigieren Sie zu der Verzweigung, die die Änderung benötigt.
Shell gh stack down
gh stack downSie können auch eine bestimmte Verzweigung mit
gh stack checkout BRANCH-NAME. -
Nehmen Sie die Änderung vor, und übernehmen Sie ihn.
Shell git add . git commit -m "helpful-commit-message"
git add . git commit -m "helpful-commit-message" -
Rebase the branches above to pick up the change.
Shell gh stack rebase --upstack
gh stack rebase --upstack -
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
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.
-
Rebase the stack. Standardmäßig basiert dies auf jeder Verzweigung von unten nach oben.
Shell gh stack rebase
gh stack rebaseUm die Basis einzuschränken, verwenden Sie
--downstackdie Basis, um von der niedrigsten Ebene bis zur aktuellen Verzweigung zu rebasen, oder--upstackum die Basis von der aktuellen Verzweigung bis zum oberen Rand zu rebasen. -
Pushen Sie die aktualisierten Verzweigungen. Dies wird verwendet
--force-with-lease, um die neu basierten Verzweigungen sicher zu aktualisieren.Shell gh stack push
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 ausgh stack rebase --continue. - Führen Sie zunächst eine Ausführung
gh stack rebase --abortaus, 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:
- Basiert auf dem gesamten Stapel über dem neuesten Trunk, z
main. B. . - Basiert auf jeder nicht zusammengeführten Verzweigung oben auf der Basisverzweigung, die vom unteren Rand des Stapels nach oben funktioniert.
- 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.
-
Öffnen Sie die Terminal-UI ändern.
Shell gh stack modify
gh stack modify -
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 ablegend— Falten Sie den Verzweigung in die darunter liegende Verzweigung.u— Falten Sie den Verzweigung oben in das verzweigtei/I— Einfügen einer neuen Verzweigung unterhalb oder oberhalb des Cursorsr— Umbenennen einer Verzweigung- Umschalt+^ / Umschalt+— Neuanordnen einer Verzweigung
z— Rückgängigmachen der letzten mehrstufigen Aktion
-
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 --continueausgh stack modify --abort, um den Zustand vor dem Ändern wiederherzustellen. -
Pushen Sie die aktualisierten Verzweigungen, und erstellen Sie den Stapel auf GitHub.
Shell gh stack submit
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.
gh stack sync --prune
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 diegh stack modifyAusfü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.