IDE
{ }
PhpStorm · Git · Version Control · PHP
Git in PhpStorm: Branches, Rebase, Stash
und Partial Commits sauber nutzen

Wer Git nur über das Terminal bedient, verzichtet auf die leistungsfähigsten Werkzeuge, die PhpStorm für visuelle Konfliktlösung, interaktiven Rebase und präzise Commit-Auswahl bietet. Diese Anleitung zeigt, wie der gesamte Git-Workflow — von Feature-Branches bis zu sauber geteilten Commits — direkt in der IDE abläuft.

12 Min. Lesezeit Branches · Rebase · Stash · Partial Commits · Merge-Konflikte PhpStorm 2024.x · Git 2.x · PHP 8.x

1. Warum Git in der IDE statt nur im Terminal?

Das Terminal ist mächtig, aber es zeigt immer nur einen eindimensionalen Blickwinkel auf den Zustand des Repositories. PhpStorm hingegen stellt den vollständigen Kontext dar: Welche Dateien sind geändert, welche Zeilen unterscheiden sich zum letzten Commit, welcher Branch enthält welche Commits, und wo genau liegt ein Merge-Konflikt. Diese visuelle Übersicht ist kein Komfort-Feature — sie verhindert Fehler, die im Terminal durch übersehene Zeilen oder falsches Staging entstehen.

Besonders bei größeren PHP-Projekten wie Magento 2 mit Hunderten von Modulen und Dateien ist der Überblick über den aktuellen Arbeitszustand entscheidend. Eine nicht-committtete Konfigurationsdatei, eine vergessene Debug-Anweisung oder ein falsch gestagtes Migration-Skript können den gesamten Deploy beeinflussen. Die Git-Integration in PhpStorm zeigt alle diese Zustände auf einen Blick und ermöglicht präzises Handeln — ohne die IDE zu verlassen oder zwischen mehreren Terminalfenstern zu wechseln.

Ein weiterer Vorteil: PhpStorm versteht die Semantik von PHP-Dateien. Git Blame zeigt nicht nur Autor und Datum, sondern PhpStorm verknüpft den Blame mit der Typ-Inferenz, der Methodensignatur und der Klassenstruktur. Wer auf eine Zeile in der Blame-Ansicht klickt, landet direkt in der vollständigen Commit-Ansicht mit Diff aller betroffenen Dateien — und kann von dort aus direkt zum ursprünglichen Code-Review springen.

2. Branches anlegen, wechseln und verwalten

In PhpStorm öffnet Strg+Umschalt+` (macOS: Ctrl+Shift+`) das Branch-Widget in der rechten unteren Ecke — alternativ über das Git-Menü oder den Status-Bar-Klick. Von dort lassen sich Branches erstellen, auschecken, umbenennen, zusammenführen und löschen. Beim Anlegen eines neuen Feature-Branch tippt man den Namen, PhpStorm fragt direkt, ob der Branch von der aktuellen Position oder von einem Remote-Branch abgezweigt werden soll.

Der Branch-Vergleich ist eine Funktion, die im Terminal umständlich ist, in PhpStorm aber intuitiv funktioniert: Rechtsklick auf einen Branch, dann "Compare with Current" zeigt alle Commits, die in einem Branch vorhanden sind, im anderen aber nicht — inklusive vollständigem Diff. Besonders nützlich vor einem Merge oder Rebase, um genau zu verstehen, was zusammengeführt wird. Remote-Branches werden direkt im selben Dialog verwaltet; Fetch, Pull und Push sind über dedizierte Buttons erreichbar.

3. Selective Staging: nur die richtigen Änderungen committen

Die Commit-Ansicht in PhpStorm (Strg+K) zeigt alle geänderten Dateien und ermöglicht, einzelne Dateien ein- oder auszuschließen. Aber die eigentliche Stärke liegt eine Ebene tiefer: Die Checkbox vor jeder Datei ist nicht alles — mit einem Rechtsklick auf eine Datei im Commit-Dialog lässt sich "Show Diff" öffnen, und in diesem Diff können einzelne Änderungsblöcke (Hunks) individuell ausgewählt werden. Das ermöglicht atomare Commits, selbst wenn mehrere unzusammenhängende Änderungen in derselben Datei vorgenommen wurden.

In der Praxis bedeutet das: Man arbeitet an einem Feature und bemerkt dabei einen Bug in einer benachbarten Methode, den man sofort behebt. Statt beide Änderungen in einem Commit zu vermischen, selektiert man in PhpStorm nur die Bug-Fix-Zeilen für den ersten Commit, committet diese, und dann die Feature-Zeilen separat. Das Ergebnis ist eine lesbare, bisektierbare Git-Historie, die für Code-Reviews und späteres Debugging erheblich wertvoller ist als ein "Fixed stuff"-Commit mit 20 unterschiedlichen Änderungen.

4. Partial Commits: Hunk-Auswahl in PhpStorm

Partial Commits — das Committen einzelner Zeilen oder Hunks einer Datei — sind in PhpStorm über den Gutter der Diff-Ansicht möglich. Im Commit-Dialog wählt man eine Datei aus und öffnet ihren Diff. In der linken Leiste (Gutter) erscheint für jede Änderungsgruppe eine Checkbox. Einzelne Zeilen lassen sich über Rechtsklick und "Include Line in Commit" gezielt auswählen. PhpStorm merkt sich die Auswahl, bis der Commit abgeschlossen ist.

Dieses Feature ist besonders wertvoll bei lang laufenden Entwicklungen, bei denen mehrere konzeptionell unterschiedliche Änderungen über viele Stunden in denselben Dateien entstanden sind. Statt git add -p im Terminal mit Patch-Auswahl zu verwenden, bietet PhpStorm einen visuellen Hunk-Editor, der keine Erfahrung mit dem Patch-Format voraussetzt. Die fertige Staging-Area wird vor dem Commit noch einmal in der Vorschau gezeigt — so sieht man genau, was tatsächlich committet wird.


<?php
declare(strict_types=1);

namespace Mironsoft\Catalog\Model;

use Magento\Framework\Model\AbstractModel;

/**
 * Example model demonstrating a typical change scenario
 * where partial commits are useful: bug fix mixed with feature work
 */
class ProductMetadata extends AbstractModel
{
    /**
     * Bug fix: correct null check (this goes into commit #1)
     *
     * @param int $productId
     * @return string|null
     */
    public function getEnhancedSku(int $productId): ?string
    {
        $product = $this->productRepository->getById($productId);
        // Fixed: was returning '' instead of null for missing SKU
        return $product->getSku() ?: null;
    }

    /**
     * New feature: enriched metadata (this goes into commit #2)
     *
     * @param int $productId
     * @return array<string, mixed>
     */
    public function getMetadataBundle(int $productId): array
    {
        return [
            'sku'  => $this->getEnhancedSku($productId),
            'type' => $this->typeResolver->getType($productId),
        ];
    }
}

5. Stash und Shelf: Work-in-Progress sichern

Wenn mitten in der Arbeit ein dringender Hotfix ansteht, braucht man eine Möglichkeit, die aktuellen, nicht committreifen Änderungen beiseite zu legen. PhpStorm bietet dafür zwei Konzepte: Git Stash (der Standard-Git-Mechanismus) und den PhpStorm-eigenen Shelf. Der Unterschied ist entscheidend: Git Stash ist portabel und repositoryseitig — andere Tools sehen ihn. Der Shelf ist PhpStorm-intern und bleibt erhalten, auch wenn Stashes durch Rebase oder Branch-Operationen verloren gehen würden.

Den Stash-Dialog öffnet man über Git → Stash Changes. PhpStorm erlaubt es, einen aussagekräftigen Namen zu vergeben und gestashte Änderungen later über Git → Unstash Changes wieder anzuwenden — mit einer Vorschau, welche Dateien betroffen sind, bevor die Änderungen tatsächlich zurückgespielt werden. Für den Shelf gilt Ähnliches: VCS → Shelve Changes speichert die aktuelle Änderungsmenge mit Name und Timestamp. Shelves können partiell angewendet werden, was Stashes nicht ermöglichen.

In Magento-Projekten ist der Shelf besonders nützlich, wenn man an Theme-Änderungen arbeitet und parallel eine Datenbankmigrationsklasse testen muss. Statt einen unfertigen Commit zu erstellen, wird die Theme-Arbeit geshelved, die Migrationsdatei getestet und committet, und danach der Shelf wieder angewendet. Der Workflow bleibt sauber, ohne dass halbfertige Commits in der Historie landen.

6. Merge-Konflikte visuell lösen

Der eingebaute drei-seitige Merge-Editor von PhpStorm ist einer der produktivsten Wege, Merge-Konflikte zu lösen. Beim Auftreten eines Konflikts öffnet PhpStorm automatisch einen Dialog mit drei Panels: links der eigene Branch, rechts der fremde Branch, und in der Mitte das Ergebnis. Konfliktmarkierungen werden farblich hervorgehoben, und für jeden Konfliktblock gibt es Buttons, um die linke oder rechte Version zu übernehmen — oder beide zu kombinieren.

Was das Terminal nicht bieten kann: PhpStorm versteht die PHP-Syntax im Ergebnis-Panel. Es markiert Syntaxfehler sofort, prüft fehlende Import-Statements und zeigt Typinkompatibilitäten an, die durch das Zusammenführen entstanden sind. So erkennt man sofort, wenn das Ergebnis des Merges einen Compilerfehler enthält, noch bevor der Merge abgeschlossen ist. Das spart einen kompletten Zyklus aus Committen, Testen, Fehlerfinden und erneutem Committen.


<?php
declare(strict_types=1);

namespace Mironsoft\Customer\Plugin;

use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Api\Data\CustomerInterface;

/**
 * Plugin demonstrating a typical merge conflict scenario:
 * two developers added different validation logic to the same method.
 * PhpStorm's three-way merge resolves this with syntax awareness.
 */
class CustomerValidationPlugin
{
    /**
     * Combined result after merge conflict resolution in PhpStorm:
     * Both validation rules preserved, syntax checked by IDE.
     *
     * @param CustomerRepositoryInterface $subject
     * @param CustomerInterface $customer
     * @return array<int, CustomerInterface>
     */
    public function beforeSave(
        CustomerRepositoryInterface $subject,
        CustomerInterface $customer
    ): array {
        // Branch A: email domain validation (developer 1)
        $this->emailDomainValidator->validate($customer->getEmail());
        // Branch B: VAT number check (developer 2)
        $this->vatValidator->validate($customer->getTaxvat());

        return [$customer];
    }
}

7. Interaktiver Rebase in PhpStorm

Interaktiver Rebase ist das mächtigste Werkzeug für eine saubere Commit-Historie, aber im Terminal mit git rebase -i HEAD~5 und dem Vim-Editor eine fehleranfällige Angelegenheit. PhpStorm bietet seit Version 2022.1 einen grafischen interaktiven Rebase-Dialog: Git → Rebase öffnet einen Assistenten, in dem die Commits der aktuellen Branch-History als Karten dargestellt werden. Per Drag-and-drop lassen sich Commits umordnen, per Dropdown lassen sich Aktionen zuweisen: pick (behalten), squash (mit vorherigem zusammenführen), fixup (squash ohne Commit-Message), reword (Nachricht ändern), drop (entfernen).

Die visuelle Darstellung macht sofort deutlich, welche Commits zusammengefasst werden und was das Ergebnis sein wird — bevor der Rebase startet. Beim Squash öffnet PhpStorm automatisch einen Editor für die kombinierte Commit-Message, in dem alle Original-Messages zur Auswahl stehen. Falls der Rebase auf Konflikte stößt, wechselt PhpStorm nahtlos in den Merge-Konflikt-Dialog. Nach der Auflösung wird der Rebase über einen Knopfdruck fortgesetzt — das manuelle git rebase --continue entfällt.

8. Git Log und Blame produktiv einsetzen

Der Git Log in PhpStorm (Alt+9 für das Git-Fenster) zeigt nicht nur eine Commit-Liste, sondern filtert in Echtzeit nach Autor, Branch, Datum, Datei und Commit-Message. Das ermöglicht, innerhalb von Sekunden die Antwort auf Fragen zu finden wie: "Wann wurde diese Methode zuletzt geändert?", "Welche Commits hat Kollege X diese Woche auf dem main-Branch gemacht?", oder "Welcher Commit hat diese spezifische Konfigurationsdatei eingeführt?"

Git Blame (Alt+Umschalt+A auf einer Zeile im Editor) zeigt Autor, Datum und Commit-Hash direkt im Gutter des Editors. Ein Klick auf den Blame-Eintrag öffnet das vollständige Commit-Panel mit allen geänderten Dateien, der Commit-Message und einem direkten Link zu verknüpften Issues. Für Magento-Projekte ist das besonders wertvoll: Man kann direkt nachvollziehen, warum ein bestimmtes Layout-Handle oder ein Plugin zu einem bestimmten Zeitpunkt eingeführt wurde — mit dem vollständigen Diff ohne weitere Suche.

9. Terminal vs. IDE: Wann was?

Die Integration in PhpStorm ersetzt nicht das Terminal — aber sie verschiebt das Verhältnis erheblich. Komplexe Operationen wie interaktiver Rebase, Merge-Konfliktauflösung, selektives Staging und Branch-Vergleiche sind in der IDE produktiver. Einfache, schnelle Operationen wie git fetch, git pull --rebase, oder das Prüfen von Remote-Status sind im Terminal oft schneller, weil kein Mauswechsel nötig ist.

Operation Terminal PhpStorm IDE Empfehlung
Merge-Konflikt lösen Manuell in Texteditor 3-Way Merge mit Syntaxcheck IDE
Interaktiver Rebase git rebase -i + Vim Visuell mit Drag-and-Drop IDE
Partial Commit git add -p (Patch-Modus) Hunk-Checkboxen im Diff IDE
git fetch / pull Schneller im Terminal Geht auch, aber langsamer Terminal
Git Blame / Log-Suche git log --grep, git blame Echtzeit-Filter, verlinkt IDE

Das Ziel ist nicht, das Terminal zu vermeiden, sondern das richtige Werkzeug für die richtige Aufgabe zu wählen. PhpStorm-Kurzbefehl Alt+F12 öffnet das integrierte Terminal direkt im Projektkontext — so ist der Wechsel zwischen IDE-Git-UI und Terminal-Git-Befehlen mit einer Taste möglich, ohne den Editor zu verlassen oder den Arbeitskontext zu verlieren.

Mironsoft

PHP-Entwicklung, Magento 2 und DevOps-Beratung

Saubere Git-Historien für euer PHP-Team?

Wir richten Git-Workflows, Branch-Strategien und PhpStorm-Konfigurationen für PHP-Teams ein — für lesbare Historien, sichere Deploys und effiziente Code-Reviews ohne Merge-Chaos.

Branch-Strategie

GitFlow, Trunk-Based oder Feature-Flags — wir wählen das passende Modell für euren Release-Zyklus

PhpStorm-Setup

IDE-Konfiguration, Commit-Hooks, Code-Style und Git-Integration für das gesamte Entwicklerteam

CI/CD-Integration

Pre-Commit-Hooks, automatische Linting und PhpStan im Pull-Request-Workflow verankern

10. Zusammenfassung

Die Git-Integration in PhpStorm macht Branch-Management, selektives Staging, Stash-Workflows, Merge-Konfliktlösung und interaktiven Rebase produktiver als die Terminal-Alternativen — nicht durch Abstraktion, sondern durch Kontext. Die IDE versteht PHP-Syntax und kann deshalb beim Merge-Ergebnis sofort Syntaxfehler anzeigen, beim Blame die Methodensignatur verlinken und beim Log direkt in die betroffene Codezeile springen.

Partial Commits — das gezielte Auswählen einzelner Zeilen oder Hunks für einen Commit — sind das Werkzeug für eine lesbare, bisektierbare Git-Historie in Teams. Der Shelf ergänzt den Stash um persistence über Rebase-Operationen hinaus. Interaktiver Rebase mit visueller Darstellung macht das Aufräumen der Branch-Historie zugänglich, ohne Vim-Kenntnisse vorauszusetzen. Alle diese Workflows lassen sich in PhpStorm mit weniger Fehlern und weniger kognitiver Last durchführen als im Terminal.

Git in PhpStorm — Das Wichtigste auf einen Blick

Partial Commits

Im Commit-Dialog Diff öffnen, einzelne Hunks per Checkbox auswählen. Atome Commits auch wenn mehrere Änderungen in einer Datei gemischt sind.

Shelf vs. Stash

Shelf ist PhpStorm-intern und überlebt Rebase-Operationen. Stash ist Git-nativ und portabel. Shelf erlaubt partielle Anwendung — Stash nicht.

Interaktiver Rebase

Git → Rebase öffnet visuellen Dialog: Commits umordnen, squash, reword, drop — ohne Vim. Konflikte werden nahtlos im 3-Way-Editor gelöst.

Merge-Konflikte

3-Way-Editor mit Syntaxcheck im Ergebnis-Panel. Syntaxfehler durch fehlerhaften Merge werden sofort angezeigt, bevor der Merge abgeschlossen ist.

11. FAQ: Git in PhpStorm

1Kann PhpStorm Git vollständig ersetzen?
Für den täglichen Workflow ja. Branches, Commits, Merge, Rebase, Log und Blame laufen vollständig in der IDE. Für seltene Spezialoperationen bleibt das integrierte Terminal (Alt+F12) verfügbar.
2Wie mache ich einen Partial Commit?
Im Commit-Dialog (Strg+K) Datei markieren, Diff öffnen. Im Gutter erscheinen Checkboxen pro Hunk. Einzelne Zeilen per Rechtsklick → Include Line in Commit auswählen.
3Stash vs. Shelf — was ist der Unterschied?
Stash ist Git-nativ und portabel. Shelf ist PhpStorm-intern, überlebt Rebases und erlaubt partielle Anwendung einzelner Dateien.
4Wie starte ich interaktiven Rebase?
Git → Rebase → Interaktiv. Commits als Karten mit Dropdown-Aktionen (pick, squash, reword, drop) und Drag-and-Drop für Reihenfolge.
5Wie löse ich Merge-Konflikte visuell?
PhpStorm öffnet automatisch den 3-Way-Editor. Links eigener Branch, rechts fremder Branch, Mitte das Ergebnis. Syntaxfehler im Ergebnis werden sofort angezeigt.
6Wie vergleiche ich zwei Branches?
Im Branch-Widget (Strg+Umschalt+`) Rechtsklick auf Branch → Compare with Current. Zeigt alle divergenten Commits mit vollständigem Diff.
7Git Blame auf einzelne Zeilen?
Rechtsklick auf Zeile → Git → Annotate with Git Blame. Gutter zeigt Autor, Datum, Hash. Klick öffnet vollständigen Commit mit Diff.
8Wie filtere ich den Git Log?
Im Git-Fenster (Alt+9) Filterfelder für Autor, Branch, Datum und Datei. Echtzeit-Filterung. Datei-Log: Rechtsklick → Git → Show History.
9Rebase trifft auf Konflikt — was passiert?
PhpStorm wechselt nahtlos in den Konflikt-Dialog. Nach Auflösung setzt ein Knopfdruck den Rebase fort. Kein manuelles 'git rebase --continue' nötig.
10Ist PhpStorm für große Repositories geeignet?
Ja — PhpStorm indiziert das Repository im Hintergrund. Log-Suche und Blame sind auch in Repositories mit tausenden Commits performant. Für Monorepos empfiehlt sich VCS-Root-Konfiguration.