3.3 KiB
3.3 KiB
✅ 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
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
git switch -c feature/version-a
Öffne konflikt-vorlage.txt und ändere Zeile 3 zu:
Zeile 3: Dies ist Version A – geändert von Branch feature/version-a.
git add konflikt-vorlage.txt
git commit -m "feat: Version A in Zeile 3 eingetragen"
3. Fast-Forward-Merge
git switch main
git merge feature/version-a
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
git switch -c feature/version-b
Öffne konflikt-vorlage.txt und ändere Zeile 3 zu:
Zeile 3: Dies ist Version B – geändert von Branch feature/version-b.
git add konflikt-vorlage.txt
git commit -m "feat: Version B in Zeile 3 eingetragen"
5. main auch ändern (Konflikt vorbereiten)
git switch main
Öffne konflikt-vorlage.txt und ändere Zeile 3 zu:
Zeile 3: Dies ist die main-Version – direkt auf main geändert.
git add konflikt-vorlage.txt
git commit -m "fix: Zeile 3 auf main angepasst"
6. Konflikt provozieren
git merge feature/version-b
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:
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:
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:
git add konflikt-vorlage.txt
git commit -m "fix: Merge-Konflikt in konflikt-vorlage.txt aufgelöst"
[main f6g7h8i] fix: Merge-Konflikt in konflikt-vorlage.txt aufgelöst
9. Abschlusszustand
git log --oneline --graph
* 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