Hinweis
Dieses Feature befindet sich in der öffentlichen Vorschau und kann geändert werden.
Ein Stapel ist eine Reihe von Pullanforderungen im selben Repository, in dem jede Pullanforderung auf die Verzweigung der Pullanforderung darunter ausgerichtet ist und eine geordnete Kette bildet, die in einer einzelnen Verzweigung landet, in der Regel Ihre Hauptzweige. Anstelle einer großen Pullanforderung erhalten Sie eine Reihe kleinerer Pullanforderungen. Da jede Pullanforderung über einen eigenen diff mit Relevanz verfügt, können Teamkollegen jede Ebene unabhängig überprüfen und genehmigen.
Jede Pullanforderung in einem Stapel wird anhand von Regeln für die Basis des Stapels ausgewertet – in der Regel main – unabhängig davon, auf welche Verzweigung sie direkt ausgerichtet ist. Dies bedeutet, dass Mid-Stack-Pullanforderungen an den gleichen Standard wie die untere Pullanforderung gehalten werden.
Hinweis
- Gestapelte Pullanforderungen erfordern, dass sich alle Verzweigungen im selben Repository befinden. Kreuzverzweigungsstapel werden nicht unterstützt.
- Gestapelte Pullanforderungen werden in GitHub Desktop.
Verfügbarkeit gestapelter Pullanforderungen
Die gh stackGitHub CLI Erweiterung behandelt den lokalen Entwicklungsworkflow. Es erstellt und verfolgt Verzweigungen in der richtigen Abhängigkeitsreihenfolge, hält Verzweigungen neu geordnet, pusht Verzweigungen, erstellt und verknüpft Pullanforderungen und navigiert zwischen Ebenen.
GitHub CLI ist nicht erforderlich. Die zugrunde liegenden Git-Vorgänge sind standard, und Sie können stattdessen Stapel von der GitHub Website erstellen.
Wenn Sie andere Tools wie Jujutsu oder Sapling verwenden, um Ihre lokalen Filialen zu verwalten und zu pushen, können Sie weiterhin oder die GitHub CLI Website verwendenGitHub, um einen Stapel von Pullanforderungen aus diesen Filialen zu öffnen. Siehe Verwenden anderer Tools mit gestapelten Pullanforderungen.
Trunks für gestapelte Pullanforderungen
Der Trunk eines Stapels ist der Basiszweig der unteren Pullanforderung. Jede andere Pullanforderung im Stapel basiert darauf. Der Trunk ist standardmäßig auf die Standardverzweigung Ihres Repositorys festgelegt, z main. B. eine beliebige Verzweigung, z. B. eine Release-Verzweigung oder eine langlebige Featureverzweigung.
So legen Sie den Trunk fest:
- Von GitHub CLI übergeben Sie die
--base BRANCHOption an dengh stack initBefehl (z. Bgh stack init --base release auth-layer. ). - Erstellen Sie auf der GitHub Website die untere Pullanforderung für die gewünschte Verzweigung als Trunk. Der Rest des Stapels baut darauf auf.
Verzweigungsschutzregeln, erforderliche Prüfungen und CI werden alle anhand des Trunks ausgewertet, der vom Stapel ausgerichtet ist, nicht nur für Ihren Standardzweig.
Branch-Schutz und erforderliche Prüfungen
Im Folgenden werden alle ausgewertet, als ob jede Pullanforderung auf die Stapelbasis ausgerichtet ist, nicht die Verzweigung direkt darunter:
| Regel | Wie sie ausgewertet wird |
|---|---|
| Erforderliche Überprüfungen | Ausgewertet für die Stapelbasis. |
| Erforderliche Statusüberprüfungen | Ausgewertet für die Stapelbasis. |
| CODEOWNERS | Aus der Stapelbasis ausgewertet. |
CODEOWNERS Änderungen an einer niedrigeren Pullanforderung, wirken sich jedoch nicht auf Pullanforderungen darüber aus. | |
| Codescanworkflows | Ausgewertet für die Stapelbasis. |
GitHub Actions
GitHub Aktionsworkflows lösen aus, als ob jede Pullanforderung im Stapel auf die Basis des Stapels ausgerichtet ist. Ein Workflow, der für die Ausführung für pull_request Ereignisse main konfiguriert ist, die für jede Pullanforderung im Stapel ausgeführt werden, nicht nur die untere, sodass keine Workflowänderungen erforderlich sind.
Stapelmetadaten, z. B. die Basis-Verzweigung des Stapels, stehen in Workflowausdrücken über github.event.pull_request.stack. Diese Eigenschaft ist nur vorhanden, wenn die Pullanforderung zu einem Stapel gehört.
Den vollständigen Satz von Metadatenfeldern und -mustern zur Reduzierung der redundanten CI-Verwendung finden Sie unter Optimieren von CI für gestapelte Pullanforderungen.
Merge-Anforderungen
Bevor eine Pullanforderung in einem Stapel zusammengeführt werden kann, muss folgendes erfüllt sein:
- Die Pullanforderung erfüllt jede Anforderung zum Verzweigungsschutz für die Stapelbasis, einschließlich erforderlicher Überprüfungen, erforderlicher Statusprüfungen und CODEOWNER-Genehmigungen.
- Alle Pullanforderungen darunter im Stapel erfüllen auch diese Anforderungen.
- Der Stapel weist einen vollständig linearen Verlauf zwischen seinen Verzweigungen auf.
Im Stapel main ← PR1 ← PR2 ← PR3erfordert das Zusammenführen von PR #3 z. B. PR #1 und PR #2 auch Überprüfungen, erforderliche Überprüfungen und erfüllen alle Branch-Schutzregeln.
Zusammenführen von Methoden
Stapel unterstützen alle drei Zusammenführungsmethoden. In jedem Fall landen die Pull-Anforderungen als einzelne atome Operation:
- Merge commit erstellt einen Zusammenführungs-Commit für die gesamte Gruppe von Pullanforderungen, die zusammengeführt werden, wobei der vollständige Commitverlauf jeder Pullanforderung beibehalten wird.
- Einen sauberen, aufgeräumten Commit pro Pull-Anforderung schafft Clean. Durch das Zusammenführen von
nPullanforderungen werden verworrene Commits für den Basiszweig erstelltn. - Rebase gibt die Commits von jeder Pullanforderung auf der Basisverzweigung wieder, wodurch ein linearer Verlauf ohne Zusammenführungs-Commits erstellt wird.
Zusammenführen über eine Seriendruckwarteschlange
Stapel unterstützen Seriendruckwarteschlangen vollständig. Alle Pullanforderungen im Stapel werden der Warteschlange in der richtigen Reihenfolge hinzugefügt. Wenn eine Pullanforderung aus der Warteschlange entfernt oder ausgeworfen wird, werden auch alle Pullanforderungen darüber im Stapel entfernt.
Hinweis
Um einen Stapel zusammenzuhalten, ermöglicht die Zusammenführungswarteschlange der Zusammenführungsgruppe, ihre konfigurierte maximale Größe um bis zu 50 Prozent zu überschreiten. Wenn der Stapel zu groß ist, um in diesen Puffer zu passen, wird er automatisch in aufeinander folgende Zusammenführungsgruppen aufgeteilt.
Lineare Geschichte
Ein vollständig linearer Verlauf zwischen jeder Verzweigung im Stapel ist eine strenge Anforderung für die Zusammenführung. Ein Stapel kann seinen linearen Verlauf verlieren, wenn Änderungen an eine untere Verzweigung verschoben werden oder wenn der Trunk voranschreitet.
Führen Sie zum Wiederherstellen eines linearen Verlaufs eine kaskadierende Neubasis aus:
- Führen Sie
gh stack rebasevon der CLI aus , und drücken Sie dann mitgh stack push. - Klicken Sie auf der GitHub Website auf "Basisstapel" im Seriendruckfeld, um eine serverseitige Cascading-Neubasis auszulösen.
Anweisungen findest du unter Verwalten von gestapelten Pullanforderungen.