Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Lösen von Merge-Konflikten | Arbeiten mit Branches in Git
Git-Grundlagen

Lösen von Merge-Konflikten

Swipe um das Menü anzuzeigen

Beheben von Konflikten

Im vorherigen Kapitel ist ein Merge-Konflikt aufgetreten, daher ist es jetzt an der Zeit, diesen zu beheben. Öffne zunächst die Datei branch_learning.txt im Vim-Editor mit folgendem Befehl:

vim branch_learning.txt
Vim öffnen

Falls Vim nicht installiert ist, kann auch ein anderer Texteditor wie nano oder atom verwendet werden, indem vim im obigen Befehl durch den Namen des Editors ersetzt wird.
Es wird jedoch empfohlen, Vim zu verwenden, um die Schritte hier leichter nachvollziehen zu können.

Hier ist die Datei im Vim-Editor geöffnet:

Datei mit Konflikten in Vim geöffnet

Nun sind die Konfliktmarkierungen sichtbar, die die konfliktbehafteten Abschnitte kennzeichnen.
Diese Markierungen verwenden Pfeile und Sondersymbole, um Unterschiede zwischen den Branches hervorzuheben:

  • <<<<<<< HEAD: kennzeichnet den Beginn der Änderungen aus dem aktuellen Branch (master);
  • =======: trennt die Änderungen des aktuellen Branches (HEAD) von denen des zu merge-enden Branches;
  • >>>>>>> feature/new-feature: kennzeichnet das Ende der Änderungen aus dem zu merge-enden Branch.

Zur Behebung des Konflikts eine der folgenden Optionen wählen:

  • Änderungen aus dem aktuellen Branch (master) übernehmen;
  • Änderungen aus dem gemergten Branch (feature/new-feature) übernehmen;
  • Manuelle Bearbeitung des Inhalts.

Die Datei manuell bearbeiten, indem die Änderungen beider Branches wie folgt kombiniert werden:

1. In den Bearbeitungsmodus wechseln

Zuerst in den Einfügemodus von Vim wechseln, indem i gedrückt wird. Dadurch kann der Text bearbeitet werden.

2. Den konfliktbehafteten Abschnitt bearbeiten

Anschließend die Zeilen beider Branches nacheinander kombinieren. Der resultierende Inhalt der Datei sollte wie folgt aussehen:

New branch
New line from the master branch
New line from the feature branch
Konfliktlösung

3. Bearbeitungsmodus verlassen, speichern und beenden

Die Escape-Taste drücken, um den Einfügemodus zu verlassen. Dann :wq eingeben und Enter drücken, um die Änderungen zu speichern und Vim zu beenden:

Vim beenden

Datei committen

Da die Konflikte gelöst wurden, die Datei branch_learning.txt zum Staging-Bereich hinzufügen und den Status überprüfen:

git add branch_learning.txt
git status
Hinzugefügte, gelöste Datei

Die Datei wurde geändert und erfolgreich zum Staging-Bereich hinzugefügt. Nun mit commit fortfahren:

git commit
Datei wird committet

Wieder wird der Standard-Texteditor geöffnet (Vim in meinem Fall) mit der Standard-Commit-Nachricht zum Merge:

Standard-Commit-Nachricht

In Vim den Insert-Modus durch Drücken von i aktivieren und die Nachricht anpassen, indem die Zeile Kept lines from both branches hinzugefügt wird, um zu beschreiben, wie die Konflikte gelöst wurden.

Hier die vollständige Commit-Nachricht:

Merge branch 'feature/new-feature'

Kept lines from both branches

Um den Einfügemodus zu verlassen, die Änderungen zu speichern und Vim zu schließen, die Escape-Taste drücken, dann :wq eingeben und Enter drücken.

Speichern der geänderten Nachricht und Beenden von Vim

Der Commit war erfolgreich und der Merge-Konflikt ist nun gelöst.

Dreifacher Merge

Werfen wir nun einen Blick auf unseren Commit-Verlauf als Graph (--graph-Flag) mit einer Zeile pro Commit (--oneline-Flag):

git log --graph --oneline
Commit-Verlaufsdiagramm

Hier siehst du den neuesten Merge-Commit zusammen mit der charakteristischen Struktur eines Three-Way-Merge.

question mark

Was ist die empfohlene Methode, um einen Merge-Konflikt in Git zu lösen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 6
some-alt