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.
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.