chore: initial training material setup

This commit is contained in:
2026-05-12 20:34:39 +02:00
commit 2314a14916
20 changed files with 1865 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
# ⚡ 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)