Login
Newsletter
Werbung

Do, 29. Januar 2015, 15:00

Git-Tutorium – Teil 2

Merge-Konflikte

Mergen von Branches ist nicht immer ganz einfach. Git selbst verfolgt verschiedenen Strategien, um Branches zu mergen. Das klappt bei einigen kleineren Änderungen zwar ohne Probleme. Wenn allerdings größere Änderungen in den Branches stattgefunden haben, passiert es häufig, dass dann Merge-Konflikte auftreten. Merge-Konflikte sind Probleme, die auftreten, wenn der gleiche Code-Abschnitt von beiden Branches verändert wurde. Darunter fällt auch, wenn Zeilen auf einem Branch gelöscht worden sind, aber auf dem anderen noch vorhanden sind.

Das Verhalten lässt sich auch ganz einfach nachbilden. Zunächst wechselt man zurück auf den Branch master, falls man sich noch nicht drauf befindet.

$ git checkout master
Bereits auf 'master'

Anschließend erzeugt man einen neuen Branch:

$ git checkout -b titel

Auf diesem Branch ändert man anschließend den Titel in der <h1>-Überschrift von »Hallo Git!« in »Hallo Merge-Konflikt!«. Nach dem Abspeichern kann man die Datei wieder wie gewohnt zum Index hinzufügen und schlussendlich committen:

$ git add index.html
$ git commit -m "Titel für den Merge-Konflikt"
[titel 420e0ae] Titel für den Merge-Konflikt
 1 file changed, 1 insertion(+), 1 deletion(-)

Anschließend geht es zurück auf master.

$ git checkout master

Dort ändert man den Titel in der <h1>-Überschrift von »Hallo Git!« auf »Hallo!«. Auch hier überträgt man die Änderungen.

$ git add index.html
$ git commit -m "Neuer Titel"
[master 9cb085b] Neuer Titel
 1 file changed, 1 insertion(+), 1 deletion(-)

Die Voraussetzung für einen simplen Merge-Konflikt wurden somit geschaffen. Wenn man nun die beiden Branches master und titel mergen möchte, geschieht folgendes:

$ git merge titel
automatischer Merge von index.html
KONFLIKT (Inhalt): Merge-Konflikt in index.html
Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen Sie dann das Ergebnis.

Wie gewünscht trat der Merge-Konflikt auf. Bevor man hingeht und versucht den Konflikt zu beheben, lohnt sich ein Blick auf die Ausgabe von git status:

$ git status
Auf Branch master
Sie haben nicht zusammengeführte Pfade.
 (beheben Sie die Konflikte und führen Sie "git commit" aus)

Nicht zusammengeführte Pfade:
  (benutzen Sie "git add/rm <Datei>..." um die Auflösung zu markieren)

        von beiden geändert:    index.html

keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung