2.8 KiB
⚡ Modul 04 – Merge & Konflikte
Beim Mergen bringt Git Änderungen aus verschiedenen Branches zusammen. Das klappt meistens automatisch – aber manchmal muss du eingreifen.
Fast-Forward-Merge
Ein Fast-Forward-Merge ist der einfachste Fall: main hat sich nicht verändert, während du auf deinem Feature-Branch gearbeitet hast. Git „spult" main einfach vorwärts.
gitGraph
commit id: "A"
commit id: "B"
branch feature/schnell
checkout feature/schnell
commit id: "C"
commit id: "D"
checkout main
merge feature/schnell id: "Fast-Forward"
Kein echter Merge-Commit entsteht – main zeigt einfach auf D.
3-Way-Merge
Ein 3-Way-Merge passiert, wenn beide Branches seit dem letzten gemeinsamen Commit neue Commits haben. Git vergleicht den gemeinsamen Vorfahren mit beiden Spitzen und kombiniert die Änderungen.
gitGraph
commit id: "Basis"
commit id: "A"
branch feature/konflikt
checkout feature/konflikt
commit id: "F1 – auf feature"
checkout main
commit id: "M1 – auf main"
merge feature/konflikt id: "Merge Commit"
Git erstellt dabei einen Merge-Commit mit zwei Eltern-Commits.
Wenn ein Konflikt entsteht
Ein Konflikt tritt auf, wenn beide Branches dieselbe Zeile einer Datei unterschiedlich geändert haben. Git weiß nicht, welche Version "richtig" ist – du musst entscheiden.
git merge feature/konflikt
Auto-merging konflikt-vorlage.txt
CONFLICT (content): Merge conflict in konflikt-vorlage.txt
Automatic merge failed; fix conflicts and then commit the result.
Konfliktmarker verstehen
Git markiert den betroffenen Bereich in der Datei so:
<<<<<<< HEAD
Diese Zeile stammt vom main-Branch.
=======
Diese Zeile stammt vom feature-Branch.
>>>>>>> feature/konflikt
| Marker | Bedeutung |
|---|---|
<<<<<<< HEAD |
Beginn des Konfliktbereichs – deine aktuelle Version (main) |
======= |
Trennlinie zwischen den beiden Versionen |
>>>>>>> feature/konflikt |
Ende des Konfliktbereichs – die eingehende Version |
Konflikt auflösen
- Öffne die Datei in einem Texteditor
- Entscheide, welche Version du behalten willst (oder kombiniere beide)
- Entferne alle Konfliktmarker (
<<<<<<<,=======,>>>>>>>) - Stage die Datei und committe:
git add konflikt-vorlage.txt
git commit -m "fix: Merge-Konflikt aufgelöst"
Notausgang: Merge abbrechen
Wenn du den Überblick verlierst und von vorn anfangen willst:
git merge --abort
Das setzt alles auf den Zustand vor dem Merge-Versuch zurück.
📝 Jetzt bist du dran!
Weiter zur Aufgabe.
Weiter geht's mit: 05 – Remote & Pull Requests