# ⚡ 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. ```mermaid 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. ```mermaid 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. ```bash git merge feature/konflikt ``` ```text 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: ```text <<<<<<< 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 1. **Öffne die Datei** in einem Texteditor 2. **Entscheide**, welche Version du behalten willst (oder kombiniere beide) 3. **Entferne alle Konfliktmarker** (`<<<<<<<`, `=======`, `>>>>>>>`) 4. **Stage die Datei** und committe: ```bash 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: ```bash git merge --abort ``` Das setzt alles auf den Zustand vor dem Merge-Versuch zurück. --- ## 📝 Jetzt bist du dran! Weiter zur [Aufgabe](aufgabe.md). --- **Weiter geht's mit:** [05 – Remote & Pull Requests](../05-remote-und-pullrequests/README.md)