Änderungen eines Zweiges in ein Anderes übernehmen
Nach getaner Arbeit sollen die unterschiedlichen Stände der Arbeit wieder zusammengeführt werden. Dabei kann es zu 3 Konstellationen kommen:
- Fast-Merge: Es wurden nur Änderungen auf neuen Branch gemacht, aber nicht auf
main. Damit kann git einfach den Zeiger fürmainBranch auf den neuen Stand setzen. In diesem Fall spricht man von “Fast Merge”. Es wird dabei kein extra Commit erzeugt. - Merge: Beim Zusammenführen sind keine Probleme augetreten. In diesem Fall wir ein sogenannter “Merge”-Commit erstellt. Im Gegensatz zu einem normalen Commit, hat dieser Informationen zu den beiden Branches, statt nur einen.
- Conflict: Beim Zusammenführen kommt es zu einem Konflikt, den git nicht selbst lösen kann. Wir müssen alle Konflikte beseitigen und das Zusammenführen abzuschließen.
Wir werden hier alle 3 Möglichkeiten durchspielen.
Fast Merge1
Wechseln Sie zuerst auf den main-Branch, wenn noch nicht geschehen. Erstellen Sie einen neuen Branch feat_kap_4 und wechseln Sie zu diesem.
Da man meistens beim Erzeugen eines neuen Branches auch gleich zu diesem wechseln möchte, gibt es eine Abkürzung. Statt git branch <neuer_branch_name> und git checkout <neuer_branch_name> eingeben zu müssen, kann man auch kürzer den -b Flag nutzen: git checkout -b <neuer_branch_name> eingeben.
repo_1$ git checkout main
Already on 'main'
repo_1$ git checkout -b feat_kap_4
Switched to a new branch 'feat_kap_4'
Nun legen wir eine neue Datei an, mit Inhalt, den wir auch mehrere Commits verteilen.
# Kapitel 4
Im vierten Jahr stand der Weizen ...
Darauf folgte eine dreijährige Düre...
Am Ende sollte die Historie wie folgt aussehen:
repo_1$ git pl
* 10eabc1 (HEAD -> feat_kap_4) Die Düre-Jahre
* 054db53 Vierter Kapitel über...
* 663ea5a (main) Versenkung
* 63bb3f0 Kapitel 3 plot
| * aac4d8b (develop) Nachtszene
| * e6b896a Ideen zum zweiten Kapitel
|/
* 027c2f3 Korrekturen am Kapitel 1
* e4c2672 Treffen nach 20 Jahren
* bd4b2df Fortsetzung in vielen Jahren
* e47bbe0 Kapitel 1 der Geschichte starten
* c3b4e8b Add repo ignore file for temp files
* e12fb6d feat: Start des ersten Kapitels
Wenn man den Pfad folgt, sieht man hier sehr gut, dass main eigentlich auf demselben Pfad liegt, wie unser neuer Branch feat_kap_4. Das ist die Voraussetzung für einen “Fast-Merge”.
Wechseln wir nun zurück zu main. Anschließen führen wir die Beiden Zweige zusammen. Dazu muss man immer auf dem Branch drauf sein, in dem man den anderen Zweig integrieren will. Die Integration wird mit git merge <branch_name> durchgeführt. In der Ausgabe sollte nun sichtbar sein, dass ein “Fast-Merge” durchgeführt wurde.
repo_1$ git checkout main
Switched to branch 'main'
repo_1$ git merge feat_kap_4
Updating 663ea5a..10eabc1
Fast-forward
kapitel_4.txt | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 kapitel_4.txt
Auch an dem Log ist es sichtbar, dass ein “Fast-Merge” erstellt wurde:
- Es sind genauso viele Commits da, wie vorher.
- Letzter Commit hat denselben Hash. D.h. dieser wurde nicht geändert.
- Beide Branches,
mainundfeat_kap_4zeigen auf denselben Commit.
repo_1$ git pl
* 10eabc1 (HEAD -> main, feat_kap_4) Die Düre-Jahre
* 054db53 Vierter Kapitel über...
* 663ea5a Versenkung
* 63bb3f0 Kapitel 3 plot
| * aac4d8b (develop) Nachtszene
| * e6b896a Ideen zum zweiten Kapitel
|/
* 027c2f3 Korrekturen am Kapitel 1
* e4c2672 Treffen nach 20 Jahren
* bd4b2df Fortsetzung in vielen Jahren
* e47bbe0 Kapitel 1 der Geschichte starten
* c3b4e8b Add repo ignore file for temp files
* e12fb6d feat: Start des ersten Kapitels
Da die Zusammenführung erfolgreich war, können wir den nicht mehr benötigten Branch feat_kap_4 mit git branch -d <branch_name> löschen.
repo_1$ git branch -d feat_kap_4
Deleted branch feat_kap_4 (was 10eabc1).
Merge2
Für eine “normale” Zusammenführung haben wir auch bereits alles vorbereitet. Wir haben zwei Branches, auf denen parallel gearbeitet wurde, main und develop. Nun können wir wieder auf main wechsel, falls noch nicht der Fall ist, und develop integrieren.
repo_1$ git checkout main
Already on 'main'
repo_1$ git merge develop
Merge made by the 'ort' strategy.
kapitel_2.txt | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 kapitel_2.txt
repo_1$ git pl
* e779542 (HEAD -> main) Merge branch 'develop'
|\
| * aac4d8b (develop) Nachtszene
| * e6b896a Ideen zum zweiten Kapitel
* | 10eabc1 Die Düre-Jahre
* | 054db53 Vierter Kapitel über...
* | 663ea5a Versenkung
* | 63bb3f0 Kapitel 3 plot
|/
* 027c2f3 Korrekturen am Kapitel 1
* e4c2672 Treffen nach 20 Jahren
* bd4b2df Fortsetzung in vielen Jahren
* e47bbe0 Kapitel 1 der Geschichte starten
* c3b4e8b Add repo ignore file for temp files
* e12fb6d feat: Start des ersten Kapitels
An dem Log können wir sehr gut sehen, dass es dieses Mal ein neuer Commit (e779542) erzeugt wurde, der mit zwei anderen Commits (aac4d8b und 10eabc1) verbunden ist.