Zum Inhalt springen

Git-Merge-Konflikt: So lösen Sie ihn schnell und arbeiten weiter

Mittel 15 Min. Aktualisiert:

Kurze Antwort

Ein Git-Merge-Konflikt entsteht, wenn zwei Branches denselben Teil einer Datei ändern. Die Lösung: Öffnen Sie die Dateien mit Konfliktmarkierungen, wählen oder kombinieren Sie die Änderungen manuell, speichern Sie, führen Sie `git add` aus und schließen Sie mit `git commit` oder `git merge --continue` ab. Wenn Sie nicht weiterkommen, setzt `git merge --abort` alles auf den Zustand vor dem Merge zurück.

So erkennen Sie das Problem

  • Meldung `CONFLICT (content): Merge conflict in ...` im Terminal
  • Dateien enthalten Markierungen `<<<<<<<`, `=======`, `>>>>>>>`
  • `git status` zeigt Dateien unter "Unmerged paths"
  • Merge wurde begonnen, aber nicht abgeschlossen, `git log` zeigt keinen neuen Commit
  • Editor oder IDE zeigt rote Markierungen in den Zeilen mit Konflikt

Häufigste Ursachen

Änderungen am selben Teil einer Datei in zwei Branches

Zwei Branches haben dieselben Codezeilen oder denselben Textblock geändert, sodass Git nicht automatisch entscheiden kann, welche Version korrekt ist.

Löschen oder Verschieben einer Datei in einem Branch

Wenn eine Datei in einem Branch gelöscht und in einem anderen geändert wurde, meldet Git einen Modify/Delete-Konflikt.

Gleichzeitige Arbeit am selben Branch

Zwei Entwickler haben dieselbe Datei geändert, ohne die neuesten Änderungen zu pullen, sodass der Merge später eine Überschneidung feststellt.

Benutzerdefinierte Merge-Einstellungen

`.gitattributes` oder benutzerdefinierte Merge-Treiber können beeinflussen, wie Git Änderungen behandelt und wann ein Konflikt gemeldet wird.

Lösung Schritt für Schritt

  1. 1

    Repository-Status prüfen

    Führen Sie git status aus. Dateien mit Konflikten werden unter "Unmerged paths" aufgeführt. Notieren Sie sie oder öffnen Sie ein Terminal im Projektstamm. Brechen Sie den Merge nicht ab, bevor Sie entschieden haben, was Sie wollen.

  2. 2

    Datei mit Konflikt öffnen

    Öffnen Sie jede Datei aus der Liste im Editor. Suchen Sie nach den Markierungen <<<<<<< HEAD, ======= und >>>>>>> Branch-Name. Beim Standardstil ist der Teil zwischen <<<<<<< und ======= Ihr aktueller Branch, und der Teil zwischen ======= und >>>>>>> stammt aus dem Branch, der gemergt wird. Wenn Sie den diff3-Stil verwenden, gibt es auch einen Teil mit dem gemeinsamen Vorfahren zwischen ||||||| und =======.

  3. 3

    Änderungen manuell zusammenführen

    Löschen Sie alle Konfliktmarkierungen und lassen Sie nur den gewünschten Code stehen. Sie können eine Seite, die andere oder beide kombinieren. Achten Sie auf Klammern, Kommas und Einrückung. Wenn Sie unsicher sind, öffnen Sie die Dateihistorie (git log -- Datei), um zu sehen, wer was geändert hat.

  4. 4

    Editor oder IDE zur Vorschau nutzen

    VS Code bietet die Optionen "Accept Current Change", "Accept Incoming Change" und "Accept Both Changes"; ähnliche Optionen haben andere Editoren. Das ist schneller, aber prüfen Sie immer das Ergebnis. Akzeptieren Sie nicht blind beide Seiten, wenn sich die Codelogik überschneidet.

  5. 5

    Speichern und als gelöst markieren

    Wenn Sie mit der Datei fertig sind, speichern Sie sie und führen Sie git add Dateiname aus. Wiederholen Sie dies für alle Dateien aus der Liste. git status sollte nun "All conflicts fixed but you are still merging" anzeigen.

  6. 6

    Merge abschließen

    Führen Sie git commit aus (ohne -m, wenn Sie die Nachricht bearbeiten möchten) oder git merge --continue. Dadurch wird ein Merge-Commit erstellt. Prüfen Sie mit git log --oneline -3, ob der Merge aufgezeichnet wurde.

  7. 7

    Vor dem Push testen

    Führen Sie Build und Tests aus (npm test, mvn test oder was das Projekt verwendet). Ein Konflikt kann einen Fehler verbergen, der erst bei der Ausführung sichtbar wird. Erst wenn die Tests bestehen, führen Sie git push aus.

  8. 8

    Wenn Sie abbrechen möchten

    Der Befehl git merge --abort setzt das Arbeitsverzeichnis auf den Zustand vor Beginn des Merges zurück. Verwenden Sie ihn, wenn Sie der Meinung sind, dass es besser ist, zuerst Änderungen zu pullen oder einen Kollegen zu konsultieren. Verwenden Sie nicht git reset --hard, wenn Sie ungespeicherte Änderungen haben.

Wenn der Konflikt zu groß wird

Wenn eine Datei Dutzende Konfliktblöcke hat oder Sie den Code nicht verstehen, wählen Sie nicht zufällig Seiten. Wenn Sie den Zustand vor dem Merge speichern möchten, erstellen Sie vor Beginn des Merges einen Backup-Branch (git branch mein-backup); dieser speichert keine ungespeicherten Änderungen im Arbeitsverzeichnis. Wenn Sie den Merge von vorne beginnen, können Sie auf dem Zielbranch git merge --no-commit verwenden, um die Änderungen vor dem Commit zu prüfen. Bei großen Konflikten ist es hilfreich, git config merge.conflictstyle diff3 zu aktivieren, das auch den gemeinsamen Vorfahren anzeigt, was das Verständnis erleichtert. Wenn der Konflikt Binärdateien betrifft, kann Git sie nicht zusammenführen; dann müssen Sie manuell eine Version auswählen (git checkout --ours Datei oder --theirs), dann git add Datei ausführen.

So beugen Sie vor

  • Pullen Sie häufig Änderungen vom Hauptbranch (`git pull --rebase`), bevor Sie eine größere Aufgabe beginnen.
  • Halten Sie Änderungen klein und auf eine Aufgabe fokussiert; committen Sie häufiger.
  • Vereinbaren Sie im Team, wer welche Dateien und Codeteile ändert.
  • Aktivieren Sie `git config merge.conflictstyle diff3`, um Konflikte leichter zu verstehen.

Wann Sie einen Profi rufen sollten

Wenn der Konflikt Dutzende Dateien, Binärdateien umfasst oder Sie den Code nicht ausreichend verstehen, um die Änderungen sicher zusammenzuführen, rufen Sie den IT-Support oder einen erfahreneren Kollegen an, um den Konflikt gemeinsam zu lösen und die Historie zu bewahren.

Software- und Produktentwicklung · Individuelle Apps, SaaS und ein MVP in 4 bis 8 Wochen

Häufige Fragen

Was bedeuten die Markierungen `<<<<<<<`, `=======` und `>>>>>>>`?

`<<<<<<< HEAD` markiert den Beginn Ihres aktuellen Branches, `=======` trennt die beiden Versionen, und `>>>>>>> Branch-Name` markiert das Ende des Teils aus dem Branch, der gemergt wird. Alle Konfliktmarkierungen müssen entfernt werden, bevor Sie die Datei als gelöst markieren.

Kann ich den Merge rückgängig machen, wenn ich bereits `git add` ausgeführt habe?

Ja, `git merge --abort` funktioniert, solange Sie den Merge-Commit nicht abgeschlossen haben. Wenn Sie bereits einen Merge-Commit erstellt und nicht gepusht haben, können Sie ihn mit `git reset --hard HEAD~1` rückgängig machen, aber erstellen Sie vorher einen Backup-Branch oder eine Kopie des Repositories. Wenn der Commit bereits gepusht wurde, verwenden Sie `git revert -m 1 <hash>`.

Wie löse ich einen Konflikt in einer Binärdatei?

Git kann Binärdateien nicht automatisch zusammenführen. Entscheiden Sie, welche Version korrekt ist, und führen Sie `git checkout --ours Datei` (Ihr Branch) oder `git checkout --theirs Datei` (der andere Branch) aus, dann `git add Datei`.

Teilen
Keine Lösung gefunden?Der KI-IT-Assistent ist rund um die Uhr erreichbar. Beschreiben Sie das Problem oder senden Sie einen Screenshot und erhalten Sie eine Anleitung für Ihren Fall.KI-IT-Assistent fragen