Ein großer Pull Request spart scheinbar Zeit, weil die gesamte Änderung nur einmal geprüft und zusammengeführt werden muss. In der Praxis verlagert sich die Arbeit jedoch ins Review: Die prüfende Person muss mehrere Entscheidungen gleichzeitig verstehen, Zusammenhänge rekonstruieren und fachliche Änderungen von beiläufigen Aufräumarbeiten trennen. Ein sinnvoll zugeschnittener Pull Request stellt daher genau eine prüfbare Entscheidung dar.
„Klein“ beschreibt dabei keine feste Zahl geänderter Zeilen. Ein automatisches Umbenennen kann viele Dateien betreffen und trotzdem leicht zu prüfen sein. Eine kurze Änderung an Berechtigungen, Preisberechnungen oder Statusübergängen kann dagegen erheblichen Prüfaufwand verursachen. Entscheidend ist der Verständnisaufwand für die prüfende Person, nicht die Statistik des Git-Anbieters.
Die passende Einheit ist eine prüfbare Entscheidung
Vor dem ersten Commit sollte klar sein, welche Frage das Review beantworten soll. Gute Review-Fragen lassen sich in einem Satz formulieren:
- Wird eine interne Bestellnotiz nur berechtigten Personen angezeigt?
- Bleibt das bisherige Verhalten nach der Umbenennung einer Schnittstelle unverändert?
- Wird ein fehlgeschlagener Import korrekt als unvollständig markiert?
Schwieriger wird es bei einer Beschreibung wie: „Neue Notizfunktion, Formular überarbeitet, Berechtigungen aufgeräumt und nebenbei alte Hilfsklassen entfernt.“ Jede Teiländerung verlangt einen anderen Prüfmodus. Bei der Notizfunktion geht es um das gewünschte Verhalten, bei den Berechtigungen um Sicherheitsregeln und beim Aufräumen um mögliche Regressionen. Zusammen entsteht eine Änderung, in der fachliche Fehler leicht zwischen kosmetischen Anpassungen übersehen werden.
Ein Pull Request ist gut zugeschnitten, wenn sein Zweck in einem Satz verständlich bleibt, seine Auswirkungen gezielt getestet werden können und ein späteres Zurücknehmen keine unabhängigen Funktionen beschädigt. Diese Kriterien sind belastbarer als eine pauschale Obergrenze für Dateien oder Zeilen.
Woran du einen zu breiten Pull Request erkennst
Der ungünstige Zuschnitt fällt häufig schon vor dem Review auf. Du musst dafür keine Kennzahl erfinden. Achte auf konkrete Reibung im Arbeitsablauf:
- Die Beschreibung enthält mehrere voneinander unabhängige Ziele.
- Zum Testen sind unterschiedliche fachliche Abläufe nötig, die keinen gemeinsamen Auslöser haben.
- Die Änderung mischt neues Verhalten mit umfangreicher Umbenennung oder Formatierung.
- Ein Teil könnte produktiv gehen, während ein anderer noch eine Entscheidung oder Freigabe benötigt.
- Ein Fehler würde dazu führen, dass du nur einen Teil der Änderung zurücknehmen möchtest.
- Die prüfende Person braucht für einzelne Bereiche jeweils anderen fachlichen Kontext.
Ein weiteres Warnsignal ist eine lange Liste vorweggenommener Erklärungen: „Diese Datei bitte ignorieren“, „Der Umbau ist nur Vorbereitung“ oder „Die eigentliche Funktion beginnt weiter unten“. Solche Hinweise können sinnvoll sein. Häufen sie sich, dokumentieren sie meist einen Zuschnitt, den die Änderungsansicht nicht mehr verständlich macht.
Trenne Vorbereitung und Verhaltensänderung
Besonders schwer prüfbar sind Änderungen, die bestehenden Code erst umbauen und anschließend sein Verhalten erweitern. In der Änderungsansicht ist dann kaum zu erkennen, welche Zeile nur verschoben wurde und welche Zeile eine neue Regel einführt.
Wenn eine vorbereitende Umbenennung oder Extraktion eigenständig möglich ist, gehört sie in einen separaten Pull Request. Dieser erste Schritt soll das beobachtbare Verhalten erhalten. Der folgende Pull Request zeigt dadurch deutlicher, welche fachliche Änderung tatsächlich hinzukommt.
Diese Trennung lohnt sich allerdings nur, wenn die Vorbereitung einen verständlichen Zustand erzeugt. Eine halb verschobene Klasse oder eine vorübergehend doppelte Implementierung macht das Review selten leichter. Vorbereitung ist kein Selbstzweck. Sie soll die folgende Änderung verständlicher machen. Das passt auch zu den Mythen über Entwickler-Produktivität, die Projekte langsamer machen: Viele Commits und parallele Branches sind kein Fortschritt, wenn sie mehr Abstimmung als Klarheit erzeugen.
Schneide nach nutzbarem Verhalten statt nach Dateityp
Eine Änderung ausschließlich nach technischen Schichten aufzuteilen, klingt zunächst ordentlich: ein Pull Request für die Datenbank, einer für die Programmlogik und einer für die Oberfläche. Für die Prüfung entstehen dadurch jedoch abhängige Fragmente. Die Datenbankänderung lässt sich fachlich noch nicht verwenden, die Oberfläche funktioniert erst nach zwei weiteren Zusammenführungen und jeder Zwischenstand braucht zusätzliche Erklärung.
Meist ist ein kleiner, durchgängiger Funktionsumfang besser. Angenommen, ein internes Bestellsystem soll eine optionale Bearbeitungsnotiz erhalten. Ein erster Pull Request kann das Feld speichern, die Berechtigung prüfen, es im vorhandenen Formular anbieten und an der vorgesehenen Stelle anzeigen. Damit gibt es einen vollständigen Ablauf, der gezielt geprüft und ausgeliefert werden kann.
Eine spätere Anzeige der Notiz in einem Export wäre eine eigene Änderung, sofern der Export nicht zwingend zum ursprünglichen Nutzen gehört. Eine notwendige Berechtigungsprüfung darf dagegen nicht auf einen späteren Pull Request verschoben werden. Der Schnitt folgt dem nutzbaren und sicheren Verhalten.
Ein praktischer Ablauf vor dem ersten Pull Request
- Formuliere das gewünschte Ergebnis. Schreibe einen Satz aus Sicht des Systems oder der nutzenden Person. Wenn du dafür mehrere unabhängige Nebensätze brauchst, prüfe, ob mehrere Änderungen vorliegen.
- Notiere die betroffenen Abläufe. Erfasse beispielsweise Eingabe, Speicherung, Berechtigung, Ausgabe und Fehlerfall. Diese Liste zeigt, was für einen vollständigen Zustand erforderlich ist.
- Markiere reine Vorarbeiten. Umbenennungen, Verschiebungen und allgemeine Aufräumarbeiten können vorab erfolgen, wenn sie das Verhalten unverändert lassen und die spätere Änderung deutlich vereinfachen.
- Suche den kleinsten auslieferbaren Zustand. Er muss fachlich sinnvoll, technisch funktionsfähig und sicher sein. „Der Code lässt sich zusammenführen“ reicht dafür nicht.
- Verschiebe echte Erweiterungen. Zusätzliche Filter, weitere Ausgabeformate oder Komfortfunktionen können eigene Pull Requests werden, wenn der erste Zustand ohne sie vollständig bleibt.
- Prüfe die Änderungsansicht selbst. Lies die Änderung in der Ansicht, die später auch für das Review verwendet wird. Dabei fallen beiläufige Formatierungen, vergessene Debug-Ausgaben und unverständliche Sprünge schneller auf als im Editor.
Dieser Ablauf braucht kein neues Tool und keine ausgefeilte Branch-Strategie. Er verlagert lediglich eine Entscheidung nach vorn, die sonst eine prüfende Person unter Zeitdruck treffen muss: Welche Änderung soll hier eigentlich beurteilt werden?
Die Beschreibung setzt die Grenze des Reviews
Auch eine sauber abgegrenzte Änderung braucht eine kurze Arbeitsanweisung. Eine brauchbare Pull-Request-Beschreibung sollte fünf Punkte abdecken:
- Zweck: Welches konkrete Verhalten wird ergänzt oder geändert?
- Prüfweg: Wie lässt sich der relevante Ablauf nachvollziehen?
- Risiko: Welche bestehende Funktion könnte unbeabsichtigt betroffen sein?
- Abhängigkeiten: Muss vorher eine andere Änderung zusammengeführt oder ausgerollt werden?
- Abgrenzung: Welche naheliegende Erweiterung ist bewusst nicht enthalten?
Die Abgrenzung verhindert typische Nebenfragen. Wenn der Export der neuen Bestellnotiz bewusst später folgt, sollte das ausdrücklich dort stehen. Die prüfende Person muss dann nicht raten, ob etwas vergessen wurde oder außerhalb des Auftrags liegt.
Vermeide dagegen eine Nacherzählung jeder geänderten Datei. Die Änderungsansicht zeigt bereits, dass eine Klasse angepasst wurde. Die Beschreibung soll erklären, warum die Anpassung nötig ist und welches Verhalten daraus folgt.
Abhängige Pull Requests brauchen eine sichtbare Reihenfolge
Manche Änderungen lassen sich sinnvoll trennen, können aber nicht unabhängig zusammengeführt werden. In diesem Fall darf die Abhängigkeit nicht nur im Kopf der entwickelnden Person existieren. Verlinke den vorausgehenden Pull Request, benenne die vorgesehene Reihenfolge der Zusammenführungen und erkläre, welcher Zwischenstand produktiv ausgeliefert werden kann.
Zu viele aufeinander aufbauende Branches verursachen allerdings Pflegearbeit. Ändert sich am Anfang der Kette etwas, müssen nachfolgende Änderungen aktualisiert und erneut geprüft werden. Zwei klar verbundene Pull Requests können ein komplexes Review erleichtern. Eine lange Kette erhöht dagegen den Abstimmungsaufwand.
Wenn mehrere Teile nur gemeinsam funktionieren, gemeinsam getestet werden müssen und keinen stabilen Zwischenstand ergeben, dürfen sie zusammenbleiben. Das Ziel ist Verständlichkeit, nicht die größtmögliche Anzahl einzelner Pull Requests.
Wann ein großer Pull Request vertretbar ist
Ein Pull Request kann viele Dateien enthalten und trotzdem gut prüfbar sein. Das gilt etwa für eine konsequente Umbenennung, eine isolierte Aktualisierung generierter Dateien oder eine mechanische Anpassung mit klar erkennbarem Muster. Entscheidend bleibt, dass keine versteckten fachlichen Änderungen dazukommen.
Bei großen, aber einheitlichen Änderungen hilft eine klare Trennung der Commit-Schritte. So kann die prüfende Person zunächst die mechanische Änderung und danach gezielte manuelle Anpassungen betrachten. Sind beide Arten im selben Commit vermischt, verliert diese Hilfe ihren Wert.
Auch ein größerer fachlicher Pull Request kann angemessen sein, wenn sich kein sicherer Zwischenzustand bilden lässt. Dann solltest du das Review vorbereiten: relevante Einstiegspunkte nennen, den Prüfweg dokumentieren und besonders riskante Stellen hervorheben. Künstliches Zerteilen würde die Prüfung nur auf mehrere Änderungen verteilen.
Eine einfache Teamregel ohne starres Zeilenlimit
Für kleine Teams und Agenturen genügt häufig eine kurze Vereinbarung: Jeder Pull Request beschreibt genau ein Ergebnis, nennt bewusst ausgeschlossene Erweiterungen und enthält einen nachvollziehbaren Prüfweg. Reine Vorarbeiten werden getrennt, wenn sie die fachliche Änderung erkennbar vereinfachen. Abhängige Änderungen werden sichtbar verknüpft.
Ein Zeilenlimit kann höchstens als Hinweis dienen. Als harte Regel fördert es Umgehungen: Änderungen werden willkürlich geschnitten, generierte Dateien verzerren die Zahl oder zusammengehörige Tests landen in einem späteren Pull Request. Eine Regel sollte bessere Entscheidungen begünstigen und keine Buchhaltung für Änderungen eröffnen.
Fazit
Pull Requests bleiben beherrschbar, wenn du sie um eine prüfbare Entscheidung herum zuschneidest. Trenne vorbereitende Umbauten von neuem Verhalten, bevorzuge vollständige kleine Abläufe und dokumentiere unvermeidbare Abhängigkeiten. Dabei zählt weder die Zahl der Dateien noch die Länge der Änderung allein.
Die passende Größe ist erreicht, wenn eine prüfende Person den Zweck versteht, das Verhalten gezielt nachvollziehen und die Änderung bei Bedarf eindeutig zurücknehmen kann. Kleiner darf der Pull Request sein. Kleinteilig um jeden Preis muss er nicht werden.
Häufige Fragen
Kurz beantwortet, damit du schneller einschätzen kannst, was für dein Projekt wichtig ist.
Wie groß sollte ein Pull Request maximal sein?
Eine allgemeingültige Zeilen- oder Dateigrenze gibt es nicht. Ein Pull Request ist passend zugeschnitten, wenn er genau eine verständliche Entscheidung enthält, gezielt geprüft werden kann und keine unabhängigen Änderungen vermischt.
Sollte ich Datenbank, Programmlogik und Oberfläche getrennt einreichen?
Nur wenn dabei jeweils ein stabiler und sinnvoll prüfbarer Zustand entsteht. Häufig ist ein kleiner, durchgängiger Funktionsumfang leichter zu beurteilen als mehrere technisch getrennte, aber voneinander abhängige Fragmente.
Wie gehe ich mit voneinander abhängigen Pull Requests um?
Verlinke die abhängigen Pull Requests, nenne die vorgesehene Merge-Reihenfolge und beschreibe, welche Zwischenstände auslieferbar sind. Vermeide lange Ketten, weil jede frühe Änderung zusätzliche Aktualisierungen und erneute Reviews auslösen kann.
Hilft ein Draft Pull Request bei großen Änderungen?
Ein Draft kann frühes Feedback zum Lösungsweg ermöglichen. Er ersetzt jedoch keinen sinnvollen Zuschnitt: Mehrere unabhängige Entscheidungen bleiben auch im Draft schwer prüfbar.