IDE
{ }
PhpStorm · Git · Merge-Konflikte · Rebase · PHP-Teams
Merge-Konflikte in PhpStorm
effizient lösen mit dem 3-Wege-Merge-Tool

Merge-Konflikte im Terminal zu lösen bedeutet, Konflikt-Markierungen manuell in der Datei zu suchen, zu verstehen und zu entscheiden – ohne visuellen Kontext. Das 3-Wege-Merge-Tool in PhpStorm zeigt gleichzeitig die eigene Version, die fremde Version und den gemeinsamen Ancestor, was die Entscheidung erheblich erleichtert und Fehler bei der Konfliktlösung reduziert.

15 Min. Lesezeit 3-Wege-Merge · Accept Left/Right · Rebase · Magento · composer.lock PhpStorm 2024.x · 2025.x · Git 2.x

1. Merge-Konflikte verstehen: Wie Git Konflikte markiert

Ein Git-Merge-Konflikt entsteht, wenn zwei Branches dieselbe Datei an derselben Stelle unterschiedlich verändert haben und Git nicht automatisch entscheiden kann, welche Änderung korrekt ist. Git markiert den Konfliktbereich mit drei Trennzeichen: <<<<<<< HEAD beginnt die eigene Version (der aktuelle Branch), ======= trennt die beiden Versionen, und >>>>>>> feature-branch schließt die fremde Version ab. Dazwischen stehen jeweils die widersprüchlichen Codeblöcke.

Das Problem beim manuellen Lösen im Editor: Die Markierungen zeigen nur die zwei widersprüchlichen Versionen, aber nicht den gemeinsamen Ausgangspunkt (Ancestor). Ohne den Ancestor ist unklar, wer welche Änderung vorgenommen hat und warum. Ein Entwickler, der nur die beiden Seiten sieht, muss aus dem Kontext erraten, welche Änderungen inhaltlich zusammengehören und welche wirklich in Konflikt stehen. Das führt häufig dazu, dass eine der Änderungen versehentlich verworfen wird – ein Bug, der erst später bemerkt wird, wenn das Feature fehlt oder eine Regression auftritt.

2. Das 3-Wege-Merge-Tool in PhpStorm öffnen

PhpStorm öffnet das Merge-Tool nach einem fehlgeschlagenen Merge oder Rebase automatisch im Git-Fenster (View → Tool Windows → Git). Im Reiter Local Changes oder im Conflicts-Tab werden Dateien mit Konflikten mit einem roten Konflikt-Symbol markiert. Ein Doppelklick oder Rechtsklick → Resolve Conflicts öffnet den Dialog mit der Liste aller Konfliktdateien. Für jede Datei kann das 3-Wege-Merge-Tool mit Merge geöffnet werden.

Das Tool zeigt drei Panels nebeneinander: Links die eigene Version (der aktuelle Branch, Local), rechts die fremde Version (der zu mergende Branch, Changes from Server oder Branch-Name), und in der Mitte das Ergebnis-Panel, das anfangs leer ist. Über dem mittleren Panel werden die Unterschiede farblich markiert: Grün für Änderungen, die nur auf einer Seite existieren und konfliktfrei übernommen werden können, Blau für Teile, die im Ancestor vorhanden waren, und Rot für echte Konflikte, die manuell aufgelöst werden müssen.

3. Schritt-für-Schritt: Konflikt im Merge-Tool lösen

Der Workflow im PhpStorm 3-Wege-Merge-Tool ist systematisch: Zunächst alle nicht-konfliktierenden Änderungen per Accept Left oder Accept Right für die jeweiligen Seiten einspielen. PhpStorm erkennt, welche Änderungen auf nur einer Seite existieren und bietet sie als einzelne Blöcke an, die mit einem Klick auf den Pfeilbutton in das Ergebnis-Panel übernommen werden. Danach bleiben nur die echten Konflikte übrig – die roten Blöcke, die auf beiden Seiten unterschiedlich sind.

Für jeden echten Konflikt gibt es drei Optionen: Accept Left übernimmt die eigene Version komplett, Accept Right übernimmt die fremde Version komplett, oder man editiert das Ergebnis-Panel manuell für eine kombinierte Lösung. Das manuelle Editieren ist der mächtigste Modus: Man sieht links und rechts den Kontext und kann im mittleren Panel genau das eintippen, was der korrekte zusammengeführte Code sein soll. Nach Auflösung aller Konflikte wird das Ergebnis-Panel gespeichert und die Datei als aufgelöst markiert (Apply oder Save and Finish).


<?php
// Typischer Merge-Konflikt in einer Magento Service-Klasse
// Links (Local/HEAD): Feature-Branch hat eine neue Methode hinzugefügt
// Rechts (Remote): Bugfix-Branch hat den Konstruktor geändert

// KONFLIKT START — so sieht es im Editor ohne 3-Wege-Tool aus:
<<<<<<< HEAD
    public function __construct(
        private readonly ProductRepositoryInterface $productRepository,
        private readonly StockRegistryInterface $stockRegistry,
        private readonly LoggerInterface $logger,
    ) {
    }

    public function getAvailableProducts(int $categoryId): array
    {
        return $this->productRepository->getList(
            $this->buildSearchCriteria($categoryId)
        )->getItems();
    }
=======
    public function __construct(
        private readonly ProductRepositoryInterface $productRepository,
        private readonly PriceCurrencyInterface $priceCurrency,
        private readonly LoggerInterface $logger,
    ) {
    }
>>>>>>> bugfix/price-currency-fix

// RICHTIGE LÖSUNG im 3-Wege-Merge-Tool (Mitte-Panel):
// Beide Seiten haben den Konstruktor verändert — kombinieren:
    public function __construct(
        private readonly ProductRepositoryInterface $productRepository,
        private readonly StockRegistryInterface $stockRegistry,    // aus Local
        private readonly PriceCurrencyInterface $priceCurrency,    // aus Remote
        private readonly LoggerInterface $logger,
    ) {
    }

    // Neue Methode aus Local übernehmen (kein Konflikt im Remote):
    public function getAvailableProducts(int $categoryId): array
    {
        return $this->productRepository->getList(
            $this->buildSearchCriteria($categoryId)
        )->getItems();
    }

4. Magic Resolve: Automatisch lösbare Konflikte

PhpStorm bietet die Funktion Resolve Simple Conflicts (auch als "Magic Resolve" bezeichnet), die im Konflikte-Dialog per Klick auf den entsprechenden Button aktiviert werden kann. Das Tool analysiert alle markierten Konfliktdateien und löst automatisch Konflikte, bei denen die beiden Seiten nicht überlappende Änderungen an verschiedenen Stellen der Datei vorgenommen haben. Wenn Local eine Methode am Anfang der Klasse hinzugefügt hat und Remote eine Methode am Ende der Klasse, ist das kein echter Konflikt – Git hat ihn trotzdem markiert, weil beide Branches dieselbe Datei verändert haben.

Magic Resolve kann einen erheblichen Anteil der Konflikte automatisch auflösen, sodass der Entwickler sich nur um die verbleibenden echten Konflikte kümmern muss. Wichtig: immer das Ergebnis von Magic Resolve im 3-Wege-Tool oder im Diff-Viewer prüfen, bevor der Merge abgeschlossen wird. Die automatische Auflösung kann in seltenen Fällen semantisch falsch sein, auch wenn sie syntaktisch korrekt ist.

5. Rebase-Workflow: Konflikte Commit für Commit

Beim Rebase werden Commits des eigenen Branches einzeln auf den Ziel-Branch angewendet. Wenn ein Commit einen Konflikt erzeugt, hält der Rebase-Prozess an und PhpStorm zeigt das Konflikte-Panel. Nachdem der Konflikt gelöst wurde, setzt man den Rebase fort. Im Vergleich zum Merge hat der Rebase den Vorteil, dass Konflikte in kleineren, verständlicheren Einheiten aufgelöst werden – pro Commit statt für alle Änderungen auf einmal.

PhpStorm zeigt beim interaktiven Rebase (Git → Rebase) den aktuellen Zustand im Git-Fenster an: welcher Commit gerade angewendet wird, welche Konflikte aufgetreten sind und wie viele Commits noch ausstehen. Nach der Konfliktlösung kann der Rebase mit dem Continue-Button fortgesetzt werden, ohne die IDE zu verlassen. Das Git-Log-Panel zeigt den resultierenden Commit-Baum nach dem Rebase sofort aktualisiert an.


# Git-Rebase-Workflow mit PhpStorm-Integration
# Ziel: feature-branch auf main rebasen

# 1. Rebase starten (Git → Rebase in PhpStorm oder im Terminal)
git rebase main

# Bei Konflikt gibt PhpStorm automatisch den Konflikte-Dialog:
# CONFLICT (content): Merge conflict in app/code/Mironsoft/Catalog/Model/ProductImporter.php
# PhpStorm öffnet das Konflikte-Panel mit Resolve-Optionen

# 2. Nach Konfliktlösung im 3-Wege-Tool: Stage und Continue
git add app/code/Mironsoft/Catalog/Model/ProductImporter.php
git rebase --continue
# PhpStorm: Git → Continue Rebase (Button im Git-Tool-Window)

# 3. Falls der Rebase-Commit übersprungen werden soll (kein inhaltlicher Beitrag)
git rebase --skip
# PhpStorm: Git → Skip Commit in Rebase

# 4. Falls der Rebase abgebrochen werden soll (alles zurücksetzen)
git rebase --abort
# PhpStorm: Git → Abort Rebase

# Best Practice für Magento-Teams:
# feature-Branches regelmäßig auf main rebasen (täglich oder vor PR)
# composer.lock bei Konflikten neu generieren statt manuell mergen:
# bin/composer install  # nach composer.json-Konfliktlösung

6. Typische Magento-Konflikte: composer.lock, di.xml und Layout-XML

In Magento 2 Projekten entstehen Konflikte am häufigsten in drei Dateitypen. Die composer.lock ist die häufigste Konfliktquelle: Wenn zwei Entwickler unterschiedliche Packages installiert oder aktualisiert haben, enthält die Lock-Datei für jedes Package tausende geänderte Zeilen. Die korrekte Lösung ist nicht das manuelle Mergen der Lock-Datei, sondern das Akzeptieren einer Version und danach composer install auszuführen, um die Lock-Datei neu zu generieren. In PhpStorm: Accept Left oder Accept Right für die gesamte composer.lock, dann bin/composer install aus dem Terminal oder als Run Configuration.

Die di.xml enthält Plugin-, Preference- und Observer-Konfigurationen. Wenn zwei Branches gleichzeitig neue Plugins für denselben Typ eingetragen haben, entstehen Konflikte in der XML-Struktur. Hier ist das 3-Wege-Merge-Tool besonders wertvoll: Der Ancestor zeigt den Zustand vor beiden Änderungen, und es ist klar, dass beide neuen Einträge ins Ergebnis übernommen werden müssen. Layout-XML-Konflikte entstehen ähnlich, wenn zwei Branches gleichzeitig dasselbe Layout-Handle modifiziert haben – hier ist die Reihenfolge der XML-Nodes oft semantisch relevant und muss sorgfältig berücksichtigt werden.

7. Konflikte von vornherein vermeiden

Die beste Merge-Konflikt-Strategie ist die, die Konflikte gar nicht erst entstehen lässt. Kurze Feature-Branches mit wenigen Commits, die häufig auf main gerebased werden, haben weniger Konfliktpotenzial als lange, weit auseinander gedriftete Branches. Feature Flags ermöglichen es, Code zu mergen, der noch nicht aktiviert ist – so bleibt der Branch klein, ohne dass das Feature schon live geht. Für Magento gilt: Kein gemeinsames Bearbeiten von composer.json/composer.lock in parallel laufenden Branches – Paketinstallationen immer auf main oder einem dedizierten Dependency-Branch durchführen.

Klare Datei-Ownership innerhalb des Teams reduziert Konflikte erheblich: Wenn Team-Mitglied A für das Catalog-Modul zuständig ist und Team-Mitglied B für Checkout, entstehen Konflikte nur an den Schnittstellen (shared di.xml, Layout-XML). PhpStorm bietet unter Git → Annotate die Blame-Ansicht, die zeigt, wer welche Zeile wann zuletzt verändert hat – nützlich, um vor der Arbeit zu prüfen, ob jemand anderes gerade denselben Code bearbeitet.

Konflikt-Typ Häufigkeit Empfohlene Lösung PhpStorm-Tool
composer.lock Sehr häufig Accept one side + composer install Accept Left/Right, dann Run Config
PHP-Klassen Häufig 3-Wege-Merge, beide Seiten kombinieren 3-Wege-Merge-Tool
di.xml / layout.xml Häufig Beide XML-Blöcke kombinieren 3-Wege-Merge mit XML-Syntax-Highlight
Tailwind CSS Selten Magic Resolve meist ausreichend Resolve Simple Conflicts
JSON-Configs Mittel 3-Wege-Merge, JSON-Validierung danach Merge-Tool + IDE-Validierung

8. Merge-Strategien im Vergleich

Die Wahl zwischen Merge und Rebase beeinflusst, wie Konflikte auftreten und gelöst werden. Bei einem Merge werden alle Konflikte auf einmal angezeigt – bei einem Feature-Branch mit 20 Commits und vielen geänderten Dateien kann das überwältigend sein. Bei einem Rebase werden Konflikte Commit für Commit aufgelöst, was den Kontext für jeden Konflikt klar macht: Man weiß, welche konkrete Änderung den Konflikt verursacht hat. Der Nachteil: Rebase schreibt die Commit-Historie um und darf nicht auf öffentlichen Branches verwendet werden, die andere Entwickler bereits ausgecheckt haben.

Für Magento-Teams empfiehlt sich ein Workflow mit Feature Branches + Rebase auf main + Merge-Commit für den PR: Während der Entwicklung regelmäßig mit git rebase main synchronisieren (kleine Konflikte, klarer Kontext), und für den finalen Merge in main einen Merge-Commit erzeugen (erhält den Branch-Verlauf im Git-Log). PhpStorm unterstützt diesen Workflow vollständig: Rebase über Git → Rebase, Konflikte über das Merge-Tool, finaler Merge über Git → Merge mit aktiviertem --no-ff-Flag.

Mironsoft

Magento 2 Entwicklung, Git-Workflows und Team-Prozesse

Git-Workflow für euer Magento-Team optimieren?

Wir analysieren bestehende Branching-Strategien, richten Rebase-Workflows ein und schulen Teams in der effizienten Merge-Konflikt-Lösung mit PhpStorm – für weniger Merge-Stress und sauberere Commit-Historien.

Branch-Strategie

Feature-Branch-Workflow und Rebase-Konventionen für Magento-Teams einrichten

Konflikt-Prävention

Datei-Ownership und composer.lock-Workflows einrichten, die Konflikte minimieren

Team-Schulung

3-Wege-Merge-Tool und Rebase-Workflow praktisch üben mit echten Magento-Dateien

9. Zusammenfassung

Das 3-Wege-Merge-Tool in PhpStorm ist das effizienteste Werkzeug zur Konfliktlösung, weil es nicht nur die zwei widersprüchlichen Versionen zeigt, sondern auch den gemeinsamen Ausgangspunkt. Das ermöglicht fundierte Entscheidungen statt raten. Magic Resolve löst automatisch nicht-überlappende Konflikte und reduziert den manuellen Aufwand. Der Rebase-Workflow verteilt Konflikte auf kleinere, verständlichere Einheiten – Commit für Commit statt alles auf einmal.

Für Magento-Teams sind die häufigsten Konfliktquellen composer.lock (Lösung: Accept + neu generieren), di.xml und Layout-XML (Lösung: beide Blöcke kombinieren) und PHP-Klassen, bei denen beide Branches dieselbe Methode oder denselben Konstruktor verändert haben (Lösung: 3-Wege-Merge mit manueller Kombination). Konflikte frühzeitig zu verhindern durch kurze Branches und häufige Rebase-Synchronisation ist effektiver als sie nachträglich aufwändig zu lösen.

Merge-Konflikte in PhpStorm — Das Wichtigste auf einen Blick

3-Wege-Merge

Links = Local, Rechts = Remote, Mitte = Ergebnis. Ancestor-Kontext verhindert versehentliches Verwerfen von Änderungen. Öffnen über Git → Resolve Conflicts.

Magic Resolve

Resolve Simple Conflicts im Konflikte-Dialog löst nicht-überlappende Konflikte automatisch. Ergebnis immer im Diff prüfen bevor Merge abgeschlossen wird.

composer.lock

Nie manuell mergen. Accept Left oder Accept Right für die gesamte Datei, dann bin/composer install ausführen um die Lock-Datei neu zu generieren.

Rebase-Workflow

Feature-Branches täglich auf main rebasen. Konflikte Commit für Commit lösen. Kein Rebase auf öffentlichen Branches die andere ausgecheckt haben.

10. FAQ: Merge-Konflikte in PhpStorm

13-Wege-Merge-Tool in PhpStorm öffnen?
Git-Fenster → Conflicts-Tab → Rechtsklick → Resolve Conflicts → Merge. Öffnet das Tool mit Local/Remote/Ergebnis-Panels.
2Accept Left vs. Accept Right?
Accept Left = Local-Version (eigener Branch). Accept Right = Remote-Version (zu mergender Branch). Für jeden Konfliktblock separat entscheidbar.
3Was macht Magic Resolve?
Löst automatisch Konflikte, bei denen beide Seiten verschiedene, nicht überlappende Stellen geändert haben. Ergebnis immer im Diff prüfen.
4composer.lock-Konflikte lösen?
Nie manuell mergen. Accept Left oder Right für die ganze Datei, dann composer install ausführen um neu zu generieren.
5Rebase vollständig in PhpStorm?
Ja. Git → Rebase starten, Konflikte im Merge-Tool lösen, Git → Continue Rebase. Kein Terminal-Wechsel nötig.
6Was ist der Ancestor im Merge?
Der gemeinsame Vorfahren-Commit vor den divergierenden Änderungen. Das Merge-Tool nutzt ihn um zu bestimmen, welche Änderung von welcher Seite stammt.
7Merge oder Rebase — wann was?
Rebase für lokale Feature-Branches (noch nicht gepusht). Merge für den finalen PR-Merge in main mit --no-ff. Kein Rebase auf shared Branches.
8Konfliktdateien in PhpStorm erkennen?
Rotes Konflikt-Symbol im Git-Fenster und im Projektbaum. Nach Merge-Start erscheint automatisch der Konflikte-Dialog mit vollständiger Liste.
9Magento-Konflikte vermeiden?
Kurze Branches, regelmäßiger Rebase. Composer-Updates nur auf main. Klare Datei-Ownership. Git Annotate vor dem Bearbeiten prüfen.
10XML-Konflikte (di.xml) im Merge-Tool?
Ja, mit XML-Syntax-Highlighting im Merge-Tool. PhpStorm validiert die Wohlgeformtheit nach dem Merge automatisch.