Git Schnellstart – Merge-Konflikte beheben

In dieser Lektion lernst du das Wichtigste zu Merge Konflikten und wie du sie beheben kannst.

Was sind Merge Conflicts und wie entstehen sie?

Wenn zwei Branches versuchen zu mergen und beide zur gleichen Zeit und in der gleichen Datei bearbeitet werden, kann Git-Branches nicht erkennen, welche Version für die Änderung in Frage kommt.

Eine solche Situation wird als Merge Conflict bezeichnet. Wenn dir sowetwas passiert, wird der Merge Commit gestoppt, damit damit du die aufgetretenen Konflikte manuell lösen kannst.

Hier eine Abbildung zur Verdeutlichung des Konflikts:

Schauen wir uns ein Beispiel an. Angenommen, mein Remote-Repository wurde von zwei meiner Teammitglieder User1 und User2 geklont.

User1 hat in der landing-page.html meines Projekts folgende Änderungen vorgenommen:

Füge diese Datei dem Staging-Bereich zu. Benutze dafür den "git add" Befehl:

git add landing-page.html

Jetzt wird diese Änderung comitted. Im Anschluss wird die Änderung an mein Remote-Repository gepushed (Push):

git commit -m "Änderung an landing page"
git push origin master

Nun wird mein Remote-Repository so aussehen:

Es zeigt den Status der Datei an, wie sie von wem und wann bearbeitet wurde.

Gleichzeitig aktualisiert User2 nun auch die landing-page.html wie folgt:

User2 hat die Änderungen im lokalen Repository hinzugefügt und committed. Aber wenn er versucht, sie auf einen Remote-Server zu pushen, wird er einen Fehler erhalten.

Siehe Output:

! [rejected]
master -> (fetch first)
error: failed to push some refs to 'https://github.com/lerneprog/todo-liste'

In der obigen Ausgabe weiß der Server, dass die Datei bereits aktualisiert und nicht mit anderen Branches zusammengeführt wurde. Die Push-Anfrage wurde also vom Remote-Server abgelehnt. Er wird eine Fehlermeldung wie [rejected] failed to push some refs to <Remote URL> ausgeben. Die Fehlermeldung wird dir vorschlagen, zuerst das Repository zu pullen, bevor der Push ausgeführt wird.

Den Merge-Konflikt beheben

Um den Konflikt zu lösen, ist es notwendig zu wissen, ob der Konflikt auftritt und warum er auftritt. Der Befehl Git merge tool wird benutzt, um den Konflikt aufzulösen. Der Befehl merge wird wie folgt verwendet:

git mergetool

Durch das Aufrufen von "git mergtool" werden die vom Merge-Konflikt betroffenen Dateien in einem Editor angezeigt. Hier kannst du den Konflikt in Ruhe auflösen. Wenn du fertig bist gib in dem Texteditor folgenden Befehl ein:

git rebase --continue

Der Konflikt wurde aufgelöst und das lokale Repository wird mit deinem Remote-Repository synchronisiert.

Um zu sehen, was der erste editierte Text des Merge Conflicts in deiner Datei ist, suche die Datei, die mit der Markierung <<<<<<<< angehängt ist.

Du kannst die Änderungen aus dem HEAD oder Base Branch nach der Zeile <<<<<<<<<<< HEAD in deinem Texteditor sehen.

Als nächstes siehst du die Trennlinie wie =========. Sie trennt deine Änderungen von den Änderungen im anderen Branch, gefolgt von >>>>>>>> BRANCH-NAME.

  • Im obigen Beispiel schrieb User1 "<p>Das ist meine Website</p>" in den Basis- oder HEAD-Branch und
  • User2 schrieb "<p>Ich bin eine Landing Page</p>".

Entscheide dich, ob du nur die Änderungen deines Branches oder die Änderungen des anderen Branches behalten willst, oder ob du eine neue Änderung erstellen willst.

Lösche die Konfliktmarkierungen <<<<<<<<<<, =========, >>>>>>>>> und erstelle letzte Änderungen, die du zusammenführen möchtest.

Zusammenfassung zu Merge Conflicts

Nimm dir etwas Zeit die Merge Konflikte zu verstehen. Es ist nicht schlimm, wenn es bei diesem Thema nicht auf Anhieb "Klick" macht. Solange du verstanden hast, dass es Merge Konflikte gibt und wie diese zustandekommen, sowie die Möglichkeit diese mit dem "merge tool" wieder aufzulösen, hast du alles wichtige in dieser Lektion gelernt.