Login
Newsletter
Werbung

Do, 29. Januar 2015, 15:00

Git-Tutorium – Teil 2

Der Befehl git status gibt bei fehlgeschlagenen automatischen Merges immer die Information aus, dass Dateien vorhanden sind, die noch zusammengeführt werden müssen.

Schaut man sich nun die Datei index.html an, dann findet man dort folgende Zeilen:

<<<<<<< HEAD
    <h1>Hallo!</h1>
=======
    <h1>Hallo Merge-Konflikt!</h1>
>>>>>>> titel

Der Merge-Konflikt wird direkt in der Quell-Datei eingefügt. Git nutzt Marker, um aufzuzeigen, welcher Teil des Codes aus welchem Branch bzw. Commit kommt. In der ersten Zeile des Konflikt ist der Marker folgender: <<<<<<< HEAD. HEAD ist ein Zeiger auf den aktuellen Commit auf dem Branch, auf dem man sich vor dem Merge befand. HEAD gibt es nicht nur bei Merge-Konflikten, sondern auch an allen anderen Stellen in einem Git-Repository. In diesem Fall ist das der letzte Commit im Branch master. Getrennt wird dies durch den weiteren Marker =======. Alles was zwischen <<<<<<< HEAD und ======= befindet, stammt vom aktuellen Branch ab. Der zweite Teil nutzt ebenfalls ======= als Trennzeichen und endet mit >>>>>>> titel. In diesem Teil sind alle Änderungen aus dem Branch titel enthalten.

Der Konflikt kann nun relativ einfach aufgelöst werden. Es müssen alle Marker entfernt und nur der gewünschte Teil eingefügt werden. In diesem Falle ist gewollt die Änderungen aus dem HEAD beizubehalten, weshalb man Zeile 1 und Zeile 3-5 löschen kann. Im Anschluss muss man index.html wieder dem Index hinzufügen.

$ git add index.html

Wenn man nun erneut git status ausführt, dann meldet Git, dass die Konflikte behoben worden sind.

$ git status
Auf Branch master
Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge.
  (benutzen Sie "git commit" um den Merge abzuschließen)

nichts zu committen, Arbeitsverzeichnis unverändert

Beim Ausführen von git commit öffnet sich der Editor mit folgender Commit-Nachricht:

$ git commit
Merge branch 'titel'

Conflicts:
        index.html
#
# Es sieht so aus, als committen Sie einen Merge.
# Falls das nicht korrekt ist, löschen Sie bitte die Datei
#       .git/MERGE_HEAD
# und versuchen Sie es erneut.

# Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,
# die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung
# bricht den Commit ab.
# Auf Branch master
# Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge.

Der Graph nach dem letzten Merge

Sujeevan Vijayakumaran

Der Graph nach dem letzten Merge

Hier kann man die Commit-Nachricht verändern. Dann ist der Merge-Konflikt erfolgreich behoben.

Zum Schluss können nicht mehr benötigten Branches aufgeräumt werden. Der Befehl git branch kennt hierfür den Parameter -d für »delete«:

$ git branch -d titel
Branch titel entfernt (war 420e0ae).

Ausblick

Der nächste Teil rundet den Einstieg in Git ab. Thematisiert wird zum einen, wie man mit Remote-Repositories arbeitet und zum anderen wie man Branches »rebased«.

Autoreninfo

Sujeevan Vijayakumaran (Webseite) setzt seit drei Jahren Git zur Versionsverwaltung ein. Dabei nutzt er es nicht nur zur Software-Entwicklung, sondern auch für das Schreiben von Artikeln.

Dieser Artikel ist in freiesMagazin 01/2015 (ISSN 1867-7991) erschienen. Veröffentlichung mit freundlicher Genehmigung.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung