Files

159 lines
3.3 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.
# ✅ Lösung Aufgabe 04: Merge & Konflikte
> Schau dir diese Lösung erst an, nachdem du die Aufgabe selbst versucht hast!
---
## Schritt-für-Schritt-Lösung
### 1. Ausgangssituation
```bash
mkdir konflikt-uebung
cd konflikt-uebung
git init
cp ../04-merge-und-konflikte/konflikt-vorlage.txt .
git add konflikt-vorlage.txt
git commit -m "chore: Vorlage hinzugefügt"
```
### 2. Ersten Feature-Branch erstellen und ändern
```bash
git switch -c feature/version-a
```
Öffne `konflikt-vorlage.txt` und ändere Zeile 3 zu:
```text
Zeile 3: Dies ist Version A geändert von Branch feature/version-a.
```
```bash
git add konflikt-vorlage.txt
git commit -m "feat: Version A in Zeile 3 eingetragen"
```
### 3. Fast-Forward-Merge
```bash
git switch main
git merge feature/version-a
```
```text
Updating a1b2c3d..b2c3d4e
Fast-forward
konflikt-vorlage.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
```
Kein Merge-Commit! `main` wurde einfach vorgespult.
### 4. Zweiten Feature-Branch erstellen
```bash
git switch -c feature/version-b
```
Öffne `konflikt-vorlage.txt` und ändere Zeile 3 zu:
```text
Zeile 3: Dies ist Version B geändert von Branch feature/version-b.
```
```bash
git add konflikt-vorlage.txt
git commit -m "feat: Version B in Zeile 3 eingetragen"
```
### 5. main auch ändern (Konflikt vorbereiten)
```bash
git switch main
```
Öffne `konflikt-vorlage.txt` und ändere Zeile 3 zu:
```text
Zeile 3: Dies ist die main-Version direkt auf main geändert.
```
```bash
git add konflikt-vorlage.txt
git commit -m "fix: Zeile 3 auf main angepasst"
```
### 6. Konflikt provozieren
```bash
git merge feature/version-b
```
```text
Auto-merging konflikt-vorlage.txt
CONFLICT (content): Merge conflict in konflikt-vorlage.txt
Automatic merge failed; fix conflicts and then commit the result.
```
### 7. Konflikt ansehen
Öffne `konflikt-vorlage.txt`. Du siehst:
```text
Zeile 1: Diese Zeile wird nicht verändert.
Zeile 2: Diese Zeile wird auch nicht verändert.
<<<<<<< HEAD
Zeile 3: Dies ist die main-Version direkt auf main geändert.
=======
Zeile 3: Dies ist Version B geändert von Branch feature/version-b.
>>>>>>> feature/version-b
Zeile 4: Diese Zeile bleibt wieder gleich.
Zeile 5: Ende der Vorlage.
```
### 8. Konflikt auflösen
Entscheide dich für eine Lösung zum Beispiel eine Kombination:
```text
Zeile 1: Diese Zeile wird nicht verändert.
Zeile 2: Diese Zeile wird auch nicht verändert.
Zeile 3: Finale Version kombiniert aus main und feature/version-b.
Zeile 4: Diese Zeile bleibt wieder gleich.
Zeile 5: Ende der Vorlage.
```
Alle Konfliktmarker entfernen, dann:
```bash
git add konflikt-vorlage.txt
git commit -m "fix: Merge-Konflikt in konflikt-vorlage.txt aufgelöst"
```
```text
[main f6g7h8i] fix: Merge-Konflikt in konflikt-vorlage.txt aufgelöst
```
### 9. Abschlusszustand
```bash
git log --oneline --graph
```
```text
* f6g7h8i (HEAD -> main) fix: Merge-Konflikt aufgelöst
|\
| * e5f6g7h (feature/version-b) feat: Version B in Zeile 3 eingetragen
* | d4e5f6g fix: Zeile 3 auf main angepasst
|/
* b2c3d4e feat: Version A in Zeile 3 eingetragen
* a1b2c3d chore: Vorlage hinzugefügt
```
Der Merge-Commit `f6g7h8i` hat zwei Eltern-Commits (`d4e5f6g` und `e5f6g7h`).
---
*Zurück zur [Aufgabe](../04-merge-und-konflikte/aufgabe.md)*