Skip to main content

Informationen zu gestapelten Pullanforderungen

Unterteilen Sie große Codeänderungen in eine Kette kleinerer, abhängiger Pullanforderungen, die Sie unabhängig überprüfen und zusammenführen können.

Hinweis

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

Informationen zu gestapelten Pullanforderungen

Gestapelte Pullanforderungen sind zwei oder mehr Pullanforderungen im selben Repository, wobei:

  • Der erste bzw. unterste Pull Request richtet sich an den Trunk des Stacks — in der Regel an den Standard-Branch Ihres Repositorys, z. B. main, es kann jedoch auch ein beliebiger anderer Branch sein, etwa ein Release-Branch.
  • Jede nachfolgende Pullanforderung zielt auf den Zweig der Pullanforderung darunter ab.
   ┌── feat/frontend     → PR #3 (base: feat/api-endpoints)  ← top
  ┌── feat/api-endpoints → PR #2 (base: feat/auth-layer)
 ┌── feat/auth-layer     → PR #1 (base: main)               ← bottom
main (default base branch)

Gestapelte Verzweigungen bilden eine Abhängigkeitskette, wobei jede Verzweigung auf der darunter liegenden Verzweigung aufbaut. Grundlegende Änderungen wie freigegebene Typen und Datenbankschemas gehen in niedrigere Verzweigungen und Code, der von ihnen abhängig ist, z. B. API-Routen und UI-Komponenten, in höhere Verzweigungen.

Jede Pullanforderung in einem Stapel stellt eine diskrete, bearbeitbare Änderung eines oder mehrerer Commits dar. Sie können jede Pull Request unabhängig prüfen und überarbeiten, und jede zeigt nur das Diff ihrer Ebene sowie die Änderungen zwischen ihrem Branch und dem darunterliegenden Branch an.

Das Schlüsselprinzip: Wenn Code in einer Ebene von Code in einer anderen Ebene abhängt, muss sich die Abhängigkeit in derselben Verzweigung oder einer niedrigeren Verzweigung befinden. Erstellen Sie einen neuen Branch, wenn Sie mit einem separaten Arbeitszweig beginnen, der auf dem aufbaut, was Sie bisher erstellt haben. Wenn Sie beispielsweise von Backend- zu Frontend-Arbeit wechseln, von der Kernlogik zu Tests übergehen oder wenn der aktuelle Branch bereits groß genug für ein Review ist.

Gründe für die Verwendung GitHub von gestapelten Pullanforderungen

Schließen Sie eine Änderung ab und gehen Sie direkt zur nächsten über.

Gestapelte Pull Requests ermöglichen es Ihnen, einen neuen Pull Request auf einem anderen zu eröffnen, der noch offen ist. Während eines umfangreichen Projekts hängt Ihre nächste Änderung möglicherweise von der Arbeit ab, die noch nicht zusammengeführt wurde. Anstatt auf die Zusammenführung zu warten, können Sie mit einem Stapel weiter aufbauen.

Bei jeder Pullanforderung in einem Stapel mit einer fokussierten Änderung sehen Prüfer einen kleinen Diff für jede Ebene anstelle der großen Pullanforderung. Kleinere Pull Requests lassen sich schneller prüfen, werden seltener nur überflogen und veralten seltener oder führen zu Merge-Konflikten.

Für die Entwicklung in großem Umfang geeignet

Wenn Sie viel Code auf einmal generieren, oft mit KI-Agenten, gibt ein Stack jeder Änderung einen Platz. Ein Agent führt eine Aufgabe aus und startet dann die nächste Aufgabe, die darauf basiert. Diese Sequenz wird direkt einem Stapel zugeordnet: eine Pullanforderung pro Aufgabe, die jeweils auf der nachstehenden Abfolge basiert. Mithilfe von Stapeln können Sie diese Abhängigkeiten explizit aufzeichnen, anstatt nicht verknüpfte Änderungen in einer einzelnen Verzweigung zu kombinieren.

Vorteile der Verwendung von gestapelten Pullanforderungen in GitHub

Ohne gestapelte Pull-Requests verursacht das Aufteilen einer großen Änderung in kleinere, voneinander abhängige Pull-Requests zusätzlichen Aufwand:

  • Zweigverwaltung. Das Rebasen und Synchronisieren von Branches bei abhängigen Pull Requests ist mühsam und fehleranfällig.
  • Regeln und CI. Branch-Schutzregeln und CI-Prüfungen werden oft nur für den untersten Pull Request in der Kette ausgelöst, wodurch sich der tatsächliche Status der übrigen nur schwer erkennen lässt.
  • Überprüfen Sie den Kontext. Die Begutachtung einer einzelnen Änderung losgelöst vom Rest des Stapels kann die Qualität der Begutachtung verringern.

Gestapelte Pullanforderungen beheben diese Probleme, indem die Kette der Pullanforderungen als verbundene Einheit behandelt wird, wobei jede Ebene klein und fokussiert bleibt.

Rebasing

Die Neubasierung ist der schwierigste Teil der Arbeit mit Stapeln und GitHub behandelt sie automatisch. Sie können im Pull Request eine serverseitige kaskadierende Rebase auslösen oder mit der gh stack-Erweiterung in GitHub CLI eine lokale kaskadierende Rebase ausführen. Wenn Sie einen Pull Request ganz unten im Stack zusammenführen, werden die verbleibenden Branches automatisch rebaset, sodass der nächste Pull Request den standardmäßigen Basis-Branch als Ziel hat.

Wo können Sie gestapelte Pullanforderungen verwenden?

Gestapelte Pull Requests sind in den folgenden Bereichen verfügbar:

  • GitHub CLI
  • GitHub-Website
  • GitHub Mobile
  • Programmgesteuerte Unterstützung über Webhooks, REST-API und GraphQL
  • Für Agenten über den gh-stack Skill

Hinweis

  • Gestapelte Pullanforderungen erfordern, dass sich alle Verzweigungen im selben Repository befinden. Kreuzverzweigungsstapel werden nicht unterstützt.
  • Gestapelte Pullanforderungen werden in GitHub Desktop.

In GitHub CLI

Die Erweiterung gh stack in GitHub CLI übernimmt den lokalen Entwicklungsworkflow. Sie können Verzweigungen in der richtigen Abhängigkeitsreihenfolge erstellen und nachverfolgen, Verzweigungen neu geordnet, Push-Verzweigungen beibehalten, Pullanforderungen erstellen und verknüpfen und zwischen Ebenen navigieren. Siehe Gestapelte Pullanforderungen CLI-Befehle.

Auf der GitHub Webseite

Wenn eine Pullanforderung Teil eines Stapels ist, sehen Sie Folgendes:

  • Ein Stapelsymbol am oberen Rand der Pullanforderung mit einer Zahl, die angibt, welche Ebene Sie anzeigen.
  • Im Zusammenführungsfeld erscheint eine Stapelübersicht. Es zeigt jede Pullanforderung im Stapel und dessen Status an und ermöglicht es Ihnen, mit nur einem Klick zu einer beliebigen Ebene zu navigieren. Der Trunk (standardmäßiger Basis-Branch) liegt unten, wobei jeder Pull Request im Stack auf den Branch des darunterliegenden Pull Requests abzielt.

Programmgesteuerte Unterstützung über Webhooks, REST-API und GraphQL

Gestapelte Pullanforderungen sind programmgesteuert verfügbar, sodass Sie sie in Ihre eigenen Tools, Automatisierung und Dashboards integrieren können:

  • Webhooks enthalten ein stack-Objekt in pull_request-Ereignis-Payloads, sodass Ihre Automatisierung reagieren kann, wenn ein Pull Request einem Stapel beitritt, sich innerhalb eines Stapels bewegt oder einen Stapel verlässt.
  • Die REST-API liest die Stapelmitgliedschaft einer Pullanforderung und stellt Endpunkte zum Auflisten, Erstellen, Erweitern und Auflösen von Stapeln bereit.
  • Die GraphQL-API stellt für einen Pull Request schreibgeschützte stack Felder bereit, mit denen der Stack und die Position des Pull Requests darin abgefragt werden können.

Regeln, CI und Zusammenführen

Regeln und CI-Durchsetzung

Gestapelte Pullanforderungen unterstützen GitHub Actions Workflows.

Die Zusammenführungsanforderungen für jede Pullanforderung im Stapel werden durch den Basiszweig der unteren Pullanforderung bestimmt, in der Regel main.

  • Branch-Schutzregeln wie CODEOWNER-Genehmigungen werden für jeden Pull Request im Stack durchgesetzt, selbst für Pull Requests mitten im Stack, die nicht direkt auf Ihren Standard-Branch abzielen.
  • CI-Prüfungen, die durch Pull Requests auf Ihrem Standard-Branch ausgelöst werden, laufen für alle Pull Requests im Stack, nicht nur für den untersten.

Dadurch wird sichergestellt, dass jede Ebene des Stacks denselben Qualitätsstandard erfüllt, bevor sie gemergt werden kann.

Zusammenführen

Sie können den gesamten Stapel, eine einzelne Pullanforderung oder einen Teil des Stapels zusammenführen, der mehrere Pullanforderungen umfasst. Der gesamte Stapel muss nicht gleichzeitig zusammengeführt werden, aber Pullanforderungen müssen von unten nach oben zusammengeführt werden.

  • Führen Sie den gesamten Stapel gleichzeitig zusammen, indem Sie die obere Pullanforderung zusammenführen. Jeder Pull-Request darunter bringt es mit.
  • Führen Sie einen Teil des Stacks zusammen, indem Sie einen Pull Request in der Mitte des Stacks zusammenführen. Die Pull Requests darunter werden ebenfalls zusammengeführt, und die Pull Requests darüber bleiben offen und werden automatisch auf den Basis-Branch des Stacks umgestellt.

Stacks unterstützen Merge-Commit-, Squash- und Rebase-Merges und sind mit der Merge-Warteschlange kompatibel. Der resultierende Commit-Verlauf ist derselbe, als würde man jeden Pull Request einzeln zusammenführen, beginnend von unten.

Hinweis

Wenn Sie über die API zusammenführen und gestapelte Pullanforderungen verwenden möchten, müssen Sie aktualisieren, um die neue Zusammenführungs-API für Stapel zu verwenden. Siehe REST-API-Endpunkte für Pullanforderungen.

Nächste Schritte