Files

116 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ⚡ 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)