134 lines
2.8 KiB
Markdown
134 lines
2.8 KiB
Markdown
# 📝 Aufgabe 04 – Merge & Konflikte
|
||
|
||
In dieser Aufgabe provozierst du absichtlich einen Merge-Konflikt und löst ihn auf. Das ist der beste Weg, um Konflikte zu verstehen – bevor sie im echten Projekt auftreten!
|
||
|
||
---
|
||
|
||
## Ausgangssituation
|
||
|
||
Lege ein neues Repo an:
|
||
|
||
```bash
|
||
mkdir konflikt-uebung
|
||
cd konflikt-uebung
|
||
git init
|
||
```
|
||
|
||
Kopiere die Datei [konflikt-vorlage.txt](konflikt-vorlage.txt) in den Ordner (oder erstelle sie neu):
|
||
|
||
```bash
|
||
cp ../04-merge-und-konflikte/konflikt-vorlage.txt .
|
||
git add konflikt-vorlage.txt
|
||
git commit -m "chore: Vorlage hinzugefügt"
|
||
```
|
||
|
||
---
|
||
|
||
## Aufgabe
|
||
|
||
### 1. Ersten Feature-Branch anlegen
|
||
|
||
```bash
|
||
git switch -c feature/version-a
|
||
```
|
||
|
||
Öffne `konflikt-vorlage.txt` und ändere Zeile 3 (`[HIER ÄNDERN]`) zu:
|
||
|
||
```text
|
||
Dies ist Version A – geändert von Branch feature/version-a.
|
||
```
|
||
|
||
Committe die Änderung:
|
||
|
||
```bash
|
||
git add konflikt-vorlage.txt
|
||
git commit -m "feat: Version A in Zeile 3 eingetragen"
|
||
```
|
||
|
||
### 2. Ersten Branch in main mergen (Fast-Forward)
|
||
|
||
```bash
|
||
git switch main
|
||
git merge feature/version-a
|
||
```
|
||
|
||
Da `main` sich nicht verändert hat, ist das ein **Fast-Forward-Merge** – kein Konflikt.
|
||
|
||
### 3. Zweiten Feature-Branch anlegen
|
||
|
||
Erstelle vom aktuellen Stand von `main` einen zweiten Branch:
|
||
|
||
```bash
|
||
git switch -c feature/version-b
|
||
```
|
||
|
||
Öffne `konflikt-vorlage.txt` und ändere dieselbe Zeile 3 zu:
|
||
|
||
```text
|
||
Dies ist Version B – geändert von Branch feature/version-b.
|
||
```
|
||
|
||
Committe die Änderung:
|
||
|
||
```bash
|
||
git add konflikt-vorlage.txt
|
||
git commit -m "feat: Version B in Zeile 3 eingetragen"
|
||
```
|
||
|
||
### 4. Auch main verändern (Konflikt vorbereiten)
|
||
|
||
```bash
|
||
git switch main
|
||
```
|
||
|
||
Öffne `konflikt-vorlage.txt` und ändere Zeile 3 **nochmals** zu:
|
||
|
||
```text
|
||
Dies ist die main-Version – direkt auf main geändert.
|
||
```
|
||
|
||
Committe:
|
||
|
||
```bash
|
||
git add konflikt-vorlage.txt
|
||
git commit -m "fix: Zeile 3 auf main angepasst"
|
||
```
|
||
|
||
### 5. Konflikt provozieren
|
||
|
||
Merge `feature/version-b` in `main`:
|
||
|
||
```bash
|
||
git merge feature/version-b
|
||
```
|
||
|
||
Git meldet einen Konflikt. Öffne `konflikt-vorlage.txt` und schau dir die Konfliktmarker an.
|
||
|
||
### 6. Konflikt auflösen
|
||
|
||
Entscheide dich für eine Version (oder kombiniere beide) und entferne alle Konfliktmarker. Dann:
|
||
|
||
```bash
|
||
git add konflikt-vorlage.txt
|
||
git commit -m "fix: Merge-Konflikt in konflikt-vorlage.txt aufgelöst"
|
||
```
|
||
|
||
### 7. Ergebnis prüfen
|
||
|
||
```bash
|
||
git log --oneline --graph
|
||
```
|
||
|
||
Du solltest einen Merge-Commit mit zwei Eltern-Commits sehen.
|
||
|
||
---
|
||
|
||
## ✅ Erfolgskriterien
|
||
|
||
- [ ] Der Fast-Forward-Merge (Schritt 2) hat keinen Merge-Commit erstellt
|
||
- [ ] `git merge feature/version-b` hat einen Konflikt gemeldet
|
||
- [ ] Du hast die Konfliktmarker in der Datei gesehen (`<<<<<<<`, `=======`, `>>>>>>>`)
|
||
- [ ] Der Konflikt ist aufgelöst und committed
|
||
- [ ] `git log --oneline --graph` zeigt einen Merge-Commit mit zwei Linien
|
||
- [ ] `git status` zeigt `nothing to commit, working tree clean`
|