159 lines
3.3 KiB
Markdown
159 lines
3.3 KiB
Markdown
# ✅ 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)*
|