Ein Merge führt zwei Stränge der Geschichte zu einem zusammen. Git sucht dafür den letzten gemeinsamen Punkt, vergleicht beide Seiten und setzt das Ergebnis in einen neuen Commit, der zwei Vorgänger hat.
- Merge
Das Zusammenführen zweier Stränge der Geschichte zu einem.
Beispiel: „Der Merge des Branches in den Hauptstand lief ohne Konflikt durch.“Auch: Zusammenführung. Der entstehende Commit heißt Merge-Commit und ist der einzige, der zwei Vorgänger hat.
Laufen die Änderungen in verschiedenen Dateien oder an verschiedenen Stellen, erledigt Git das allein. Treffen sie sich in derselben Zeile, entsteht ein Merge-Konflikt.
Was ein Merge in der Geschichte hinterlässt
Eine sichtbare Gabel. Man erkennt später, dass hier zwei Stränge nebeneinander liefen und wann sie wieder zusammenkamen. Das ist der Vorzug und zugleich der Vorwurf: Bei vielen kleinen Merges wird die Geschichte unübersichtlich.
Der Rebase ist die Gegenposition. Er erzeugt eine gerade Linie und gibt dafür die Information auf, dass parallel gearbeitet wurde.
Wann ein Merge ohne Merge-Commit auskommt
Wenn der Hauptstand sich seit der Abzweigung nicht bewegt hat. Dann reicht es, den Zeiger nach vorn zu schieben; es entsteht kein zusätzlicher Commit und keine Gabel. Dieser Fall heißt Fast-Forward.
Viele Projekte erzwingen dennoch einen Merge-Commit, damit im Nachhinein sichtbar bleibt, welche Commits zu welcher Aufgabe gehörten.
Was beim Merge schiefgehen kann
Das Offensichtliche sind Konflikte. Das Unangenehmere ist der Merge, der technisch sauber durchläuft und trotzdem kaputt ist: Zwei Änderungen berühren verschiedene Stellen, passen inhaltlich aber nicht zusammen. Git kann das nicht sehen, Tests schon.
Deshalb gehört zu jedem Merge in einen gemeinsamen Stand ein Durchlauf der Build-Pipeline und nicht nur ein Blick auf die Datei.