Git – Branches zusammenführen (mergen)
In Git ist das Mergen eine Methode, um die verzweigte History (Forked History) zu verbinden. Vereinfacht gesagt verbindet man bei einem "Merge" zwei oder mehr Branches miteinander.
Der git merge Befehl erleichtert es dir, die Daten, die vom Git-Branch erstellt wurden, in einen einzigen Branch zu integrieren. Git merge wird eine Reihe von Commits zu einer vereinheitlichten History zusammenfügen. Der Befehl wird meist verwendet, um zwei Branches zu kombinieren, sie "verschmelzen" quasi zusammen.
Schaue dir dafür folgende Abbildung an, damit der Vorgang deutlich wird:
Merging wird benutzt, um verschiedene Entwicklungszweige aufrechtzuerhalten; irgendwann möchte man die Änderungen aus einem Branch zusammenführen. Es ist wichtig zu verstehen, wie das Merging in Git funktioniert.
In der obigen Abbildung gibt es zwei Branches, den "Master" und das "Feature". Wir können sehen, dass wir einige Commits sowohl im Funktionalitäts- als auch im Master-Zweig gemacht und diese zusammengeführt haben. Es funktioniert wie ein Pointer (Zeiger). Git wird einen gemeinsamen Basis-Commit zwischen den Branches finden. Sobald Git einen gemeinsamen Basis-Commit findet, wird es einen neuen "Merge Commit" erstellen. Es kombiniert die Änderungen jeder in der Warteschlange befindlichen Merge-Commit-Sequenz.
"git merge" Befehl
Mit dem git merge Befehl führen wir Branches zusammen (merge):
Syntax:
git merge <commit>
Der Befehl kann in verschiedenen Fällen verwendet werden z.B.
- um einen spezifischen Commit mit einem aktiven Branch zu mergen, oder
- einen Branch mit dem Master-Branch zu mergen oder
- um einen Branch mit einem anderen Branch zu mergen
Die Funktionsweise ist für die o.g. Fälle sehr ähnlich. Schauen wir uns das in der Praxis an.
Beispiel: Einen Commit auf den "Master-Branch" mergen
Benutze den unten stehenden Befehl, um den ausgewählten Commit in den Master-Branch einzubinden:
git merge <commit>
Der obige Befehl wird den angegebenen Commit in den gerade aktiven Branch zusammenführen. Du kannst den angegebenen Commit auch in einen bestimmten Branch einführen, indem du den Namen des Branches in die Option <commit> eingibst. Schauen wir uns an, wie man einen Merge in den aktiven Branch durchführt.
- Ich bin zunächst auf den feature1-Branch gewechselt. (git checkout feature1)
- Dort habe ich eine neue Datei namens feature1-neu.html angelegt und dem Branch hinzugefügt (git add feature1-neu.html)
- Im Anschluss habe ich diese Datei in den aktiven Branch committed. (git commit -m "feature1 neu hinzugefügt")
- Mit git log ermittle ich die eindeutige Commit-ID, die ich für meinen Merge benötige.
- Um den Commit auf dem "Master-Branch" zu mergen, müssen wir zunächst zurück auf den Master-Branch wechseln (git checkout master)
Lass uns nun den Merge durchführen:
git merge f4a1f49afc15159772ad0777dae25c323fd4b981
Super! Das hat geklappt. Hier der Output:
Updating c329b18..f4a1f49
Fast-forward
feature1-neu.html | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 feature1-neu.html
Und hier nochmal die gesamte Prozedur als Screenshot in Git Bash:
Der "Merge" in Git Bash:
Hier haben wir den vorherigen Commit in den aktiven Master-Branch gemerged.
Zusammenfassung
Du hast in dieser Lektion gelernt, wie du einen Merge durchführst. Mit einem Merge verbindest du zwei oder mehrere Branches miteinander. Das ist zum Beispiel der Fall, wenn du ein neues Feature programmiert hast und es jetzt wieder zum Master-Branch (Der Haupt-Entwicklungsumgebung) zuführen willst.
Merges können, je nach Größe des Projektes und der Anzahl der Team-Mitglieder sehr komplex werden. Zum jetzigen Zeitpunkt solltest du lediglich verstanden haben, was ein Merge ist und wofür du ihn benötigst. Erstelle selbst einen "Test-Branch" mit einer neuen Datei und merge diesen Branch dann mit dem Master-Branch, um etwas Übung zu bekommen.
Wenn du soweit bist, sehen wir uns in der nächsten Lektion zu "Git Diff" wieder.
Bildhinweise: "Git Merging" by Atlassian under CC BY 2.5 Australia; from Atlassian