GrumPHP
GrumPHP 2.23 prüft PHP Code vor jedem Commit. Neu 2026: Mago Tasks in Rust, Symfony 8 und PHP 8.5 Support. Installation, Konfiguration und CI Integration.
Mehr erfahren
Git Interactive Rebase ist ein Werkzeug in Git, mit dem Entwickler die Commit Historie eines Branches gezielt umschreiben, bevor sie in einen geteilten Zweig wie main oder develop gelangt. Statt eine chaotische Abfolge von WIP Commits, Tippfehler Korrekturen und Zwischenständen zu mergen, lässt sich mit git rebase -i eine saubere, logisch nachvollziehbare Commit Kette formen.
Für PHP Entwickler ist Interactive Rebase vor allem in Feature Branches und bei grossen Refactorings relevant, wenn etwa mit Rector automatisierte Umbauten oder mit PHPStan Typsicherheits Verbesserungen durchgeführt werden. Ein klares Git Log ist die Basis für effizientes Code Review, schnelles Debugging mit git bisect und verlässliche Rollbacks.
Im Unterschied zum normalen git rebase, der Commits einfach automatisch auf einen neuen Basis Commit anwendet, öffnet der interaktive Modus einen Editor mit einer Todo Liste. Dort entscheidet der Entwickler Commit für Commit, was passieren soll: behalten, zusammenfassen, umbenennen, aufteilen oder verwerfen.
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
Ein Interactive Rebase startet mit der Angabe, wie viele Commits bearbeitet werden sollen. Üblich ist ein Bereich ab einem bestimmten Basis Commit oder eine feste Anzahl letzter Commits per HEAD Referenz.
# Die letzten fünf Commits interaktiv bearbeiten
git rebase -i HEAD~5
# Alle Commits seit dem Branch main interaktiv bearbeiten
git rebase -i main
# Ab einem bestimmten Commit Hash
git rebase -i abc1234
Git öffnet daraufhin den konfigurierten Editor mit einer Todo Liste. Jede Zeile entspricht einem Commit, beginnend mit dem ältesten. Vor jedem Commit steht ein Kommando, standardmässig pick.
pick m2n3o4p Initial feature implementation
pick i9j0k1l WIP start validation
pick e5f6g7h Add validation
pick a1b2c3d Fix tests
pick f7e8d9c WIP
# Rebase abc1234..HEAD onto main (5 commands)
Durch Ändern der Kommandos und der Reihenfolge der Zeilen steuert der Entwickler, was mit jedem Commit geschieht. Nach dem Speichern und Schliessen des Editors spielt Git die Commits Schritt für Schritt neu ab und wendet die Anweisungen an. Bei Konflikten pausiert der Rebase, bis manuelle Auflösung erfolgt.
Interactive Rebase kennt eine feste Anzahl an Kommandos, die jedes für sich ein mächtiges Werkzeug darstellen. Das Verständnis dieser sechs Commands deckt rund 95 Prozent aller Praxisfälle ab.
Alle Kommandos lassen sich in einer einzigen Todo Liste frei kombinieren. Zusätzlich existieren exec für das Ausführen beliebiger Shell Kommandos zwischen Commits, etwa für automatisierte Tests, sowie break für manuelle Pausen.
pick m2n3o4p Initial feature implementation
fixup f7e8d9c WIP
reword i9j0k1l WIP start validation
squash e5f6g7h Add validation
fixup a1b2c3d Fix tests
Interactive Rebase ist weit mehr als ein Aufräumwerkzeug vor dem Pull Request. In Symfony, Laravel und Sulu Projekten entstehen regelmässig Situationen, in denen eine saubere Commit Historie den Unterschied zwischen schnellem Code Review und stundenlanger Diskussion ausmacht.
Squashen von WIP Commits: Während der Feature Entwicklung sind kleine Zwischenstände hilfreich, im Pull Request aber störend. Per fixup lassen sich fünf oder zehn Zwischen Commits auf einen sauberen Feature Commit reduzieren, ohne dass der Code Reviewer durch Debug Logs und Rücksetzer navigieren muss.
Reordern von Commits: Ein Bug Fix, der während der Feature Arbeit auffällt und direkt committed wurde, gehört logisch vor den eigentlichen Feature Commit. Interactive Rebase erlaubt das einfache Vertauschen durch Umsortieren der Zeilen in der Todo Liste.
Splitten grosser Commits: Wenn ein Commit Refactoring, Bug Fix und neues Feature vermischt, leidet git blame und die Reviewbarkeit. Mit edit und git reset HEAD^ lässt sich ein solcher Commit in mehrere atomare Commits aufteilen.
Rewording von Commit Nachrichten: Commit Nachrichten während der Arbeit sind oft Notizen an das eigene Ich. Vor dem Pull Request lohnt sich der Aufwand, sie in aussagekräftige, issue referenzierte Nachrichten umzuschreiben. Das verbessert git log, git blame und spätere Bisect Suchen.
Entfernen unerwünschter Commits: Temporäre var_dump Aufrufe, auskommentierter Test Code oder versehentlich committete .env Dateien lassen sich per drop aus der Historie entfernen, bevor sie in das geteilte Repository gelangen.
Die wichtigste Regel im Umgang mit Interactive Rebase lautet: Nur private, noch nicht geteilte Commits umschreiben. Sobald ein Branch auf ein Remote gepusht wurde und andere Entwickler darauf aufgebaut haben, führt ein Rebase zu zerstörter Historie für das gesamte Team.
Der Grund: Interactive Rebase erzeugt neue Commit Hashes. Für Git sind die alten und neuen Commits zwei verschiedene Objekte, selbst wenn ihr Inhalt identisch ist. Wer auf Basis der alten Commits gearbeitet hat, bekommt beim nächsten Pull widersprüchliche Historien und muss manuell aufräumen.
Für Solo Feature Branches, die nur der eigenen Synchronisation mit dem Remote dienen, ist ein Rebase nach dem Push vertretbar. Entscheidend ist dann der Einsatz von force with lease statt force.
# UNSICHER, überschreibt blind
git push --force
# SICHER, bricht ab wenn jemand anderes gepusht hat
git push --force-with-lease origin feature
force with lease prüft vor dem Überschreiben, ob der Remote Branch noch auf dem Stand steht, den Git lokal erwartet. Hat ein Kollege zwischenzeitlich gepusht, schlägt der Push fehl und schützt die Arbeit des Kollegen.
The key rule is simple: only rebase commits that have not been pushed to shared branches.
In Legacy PHP Projekten sammeln sich über Jahre chaotische Commit Historien an. Ein Symfony 4 auf Symfony 7 Upgrade mit Rector, ein Austausch des Test Frameworks von PHPUnit zu Pest oder die Migration zu FrankenPHP erzeugen schnell Dutzende kleiner Commits, die ohne Rebase kaum nachvollziehbar sind.
NCA unterstützt PHP Teams dabei, Interactive Rebase als festen Bestandteil des Entwicklungsprozesses zu etablieren. Typische Beratungsschwerpunkte sind:
Wer seine PHP Entwicklung auf modernes Niveau heben will, profitiert von einer sauberen Git Historie als Fundament. Eine kostenlose Erstberatung zu Git Workflows und PHP Qualitätssicherung in Ihrem Team lässt sich direkt mit Roland Golla vereinbaren: roland@nevercodealone.de oder telefonisch unter +49 176 24747727.
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
Anfrage-Konfiguration
Wähle die Expertise, die dein Projekt jetzt am dringendsten benötigt.
Die folgenden Fragen fassen die häufigsten Stolpersteine rund um Interactive Rebase zusammen, die in PHP Teams regelmässig auftauchen. Vom Team Workflow über Konflikt Auflösung bis zur Integration in Continuous Integration bündelt dieser Abschnitt das Wissen, das im Alltag zählt.
Git Interactive Rebase ist der Modus des git rebase Befehls, der eine bearbeitbare Todo Liste mit allen betroffenen Commits öffnet. Entwickler entscheiden Commit für Commit, ob dieser behalten, zusammengefasst, umbenannt, aufgeteilt oder verworfen wird. Das Ergebnis ist eine saubere, logisch aufgebaute Commit Historie für den Pull Request.
Immer dann, wenn ein Feature Branch vor dem Merge in main oder develop aufgeräumt werden soll. Besonders sinnvoll nach Rector Refactorings, PHPStan Upgrades oder grösseren Symfony Migrationen, bei denen viele kleine Zwischen Commits entstehen. Für Solo Branches ohne geteilte Historie ist Rebase das Werkzeug der Wahl.
Squash fasst zwei Commits zusammen und öffnet einen Editor, um beide Commit Nachrichten zu einer neuen zu kombinieren. Fixup fasst ebenfalls zusammen, verwirft dabei aber die Commit Nachricht des gefolgerten Commits komplett. Fixup eignet sich perfekt für kleine Korrekturen wie Fix Typo oder WIP Commits.
Durch häufiges Rebasen des Feature Branches gegen die aktuelle main. Je kleiner die Distanz zwischen Branch und Basis, desto seltener und kleiner die Konflikte. Atomare Commits mit klar abgegrenzten Änderungen reduzieren zusätzlich die Konflikt Wahrscheinlichkeit. Tools wie git rerere merken sich einmal gelöste Konflikte und wenden sie automatisch wieder an.
Die sechs Kernkommandos sind pick, reword, edit, squash, fixup und drop. Ergänzt durch exec für Shell Kommandos zwischen Commits und break für manuelle Pausen. Pick übernimmt einen Commit unverändert, reword ändert nur die Nachricht, edit pausiert den Rebase für manuelle Eingriffe.
Interactive Rebase erzeugt neue Commit Hashes. Wer auf Basis der alten Commits gearbeitet hat, bekommt beim nächsten Pull zwei divergierende Historien. Das führt zu chaotischen Merge Konflikten und potenziell verlorenen Änderungen. Die goldene Regel: Nur private, noch nicht geteilte Commits mit Interactive Rebase umschreiben.
Mit git rebase --abort wird der Rebase gestoppt und der Branch auf den Ausgangszustand zurückgesetzt. Alle aufgelösten Konflikte gehen verloren, aber der Branch bleibt intakt. Bei laufendem Rebase gibt git status jederzeit Auskunft über den aktuellen Stand und die nächsten Schritte.
Force with lease ist eine sichere Variante von git push force. Sie überschreibt den Remote Branch nur, wenn er noch im erwarteten Zustand ist. Pusht ein Kollege zwischenzeitlich, schlägt der Push fehl. Nach einem Interactive Rebase auf einem gepushten Branch ist force with lease der Standard statt eines blinden force.
Im Interactive Rebase den Commit mit edit markieren. Sobald der Rebase pausiert, git reset HEAD^ ausführen, um die Änderungen zu entstagen. Dann einzelne Teile per git add und git commit erneut als separate Commits einchecken. Mit git rebase --continue wird der Rebase abgeschlossen.
Ja, über git reflog. Der Reflog protokolliert alle HEAD Bewegungen, auch solche, die durch Rebase entstehen. Mit git reset --hard HEAD@{N} lässt sich der Branch auf einen Zustand vor dem Rebase zurücksetzen. Der Reflog ist das wichtigste Sicherheitsnetz im Umgang mit Rebase.
Per git config --global core.editor wird der Standard Editor gesetzt. Empfehlenswert sind VS Code mit dem Wait Flag, Vim oder Nano. Der Wait Flag ist wichtig, damit Git auf das Speichern der Todo Liste wartet, bevor der Rebase startet. Ohne Wait Flag scheitert der Rebase mit einem Fehler zur fehlenden Todo Datei.
Mit git commit --fixup oder --squash und anschliessendem git rebase -i --autosquash ordnet Git automatisch Commits zu ihren Vorgängern zu. Das spart manuelles Sortieren der Todo Liste und ist perfekt für den Workflow, bei dem während der Entwicklung kleine Korrekturen gezielt als Fixup markiert werden.