Appearance
Kapitel 5: Branching & Merging
5.1 Branching-Kernkonzepte
📖 Was ist ein Branch?
Ein Branch ist ein unabhängiger Entwicklungszweig.
Einfaches Beispiel:
main (Hauptleitung)
├── feature-login (Branch für Login-Feature)
├── feature-payment (Branch für Zahlungs-Feature)
└── bugfix-header (Branch für Bugfix)🎯 Warum Branches?
| Vorteil | Erklärung |
|---|---|
| Parallelentwicklung | Mehrere Entwickler arbeiten gleichzeitig an verschiedenen Features |
| Isolation | Fehler in einem Branch beeinflussen andere Branches nicht |
| Experimente | Probieren Sie neue Ideen aus, ohne die Hauptleitung zu gefährden |
| Code-Review | Jeder Branch kann separat überprüft werden |
📊 Visualisierung
main: A --- B --- C
\
feature: D --- E- main: Stabiler Produktionscode
- feature: Experimentelles Feature (isoliert von main)
5.2 Branch-Grundbefehle
🔹 1. git branch (Branches verwalten)
bash
# Alle lokalen Branches anzeigen
git branch
# Neuen Branch erstellen (nicht wechseln!)
git branch feature-login
# Branch löschen
git branch -d feature-login # Sicher (nur wenn gemergt)
git branch -D feature-login # Erzwungen (auch wenn nicht gemergt)
# Branch umbenennen
git branch -m alter-name neuer-name🔹 2. git checkout / git switch (Branch wechseln)
Methode 1: git checkout (Traditionell)
bash
# Zum main-Branch wechseln
git checkout main
# Neuen Branch erstellen UND wechseln
git checkout -b feature-loginMethode 2: git switch (Modern, empfohlen)
bash
# Zum main-Branch wechseln
git switch main
# Neuen Branch erstellen UND wechseln
git switch -c feature-loginUnterschied:
git checkoutist ein "Schweizer Taschenmesser" (kann vieles, ist aber verwirrend)git switchist spezialisiert auf das Wechseln von Branches
🔹 3. git checkout -b (Erstellen + Wechseln)
bash
# Kombiniert zwei Schritte in einem:
git branch feature-login # Schritt 1: Erstellen
git checkout feature-login # Schritt 2: Wechseln
# Kurzform:
git checkout -b feature-login
# Modern (Git 2.23+):
git switch -c feature-login📊 Branch-Befehle Zusammenfassung
| Befehl | Erklärung |
|---|---|
git branch | Branches auflisten |
git branch <name> | Neuen Branch erstellen |
git checkout <name> | Branch wechseln |
git switch <name> | Branch wechseln (modern) |
git checkout -b <name> | Erstellen + Wechseln |
git switch -c <name> | Erstellen + Wechseln (modern) |
git branch -d <name> | Branch löschen (sicher) |
git branch -D <name> | Branch löschen (erzwungen) |
5.3 Branch-Merge (Zusammenführen)
📖 Was ist Merging?
Beim Merging werden Änderungen aus einem Branch in einen anderen integriert.
🔹 Merge-Szenarien
Szenario 1: Fast-Forward Merge (Einfach)
Wenn der Ziel-Branch keine neuen Commits hat:
main: A --- B
\
feature: C --- DNach dem Merge:
main: A --- B --- C --- DBefehl:
bash
# Auf main wechseln
git switch main
# feature-login mergen
git merge feature-login
# Branch löschen (nach erfolgreichem Merge)
git branch -d feature-loginSzenario 2: 3-Way Merge (Komplexer)
Wenn beide Branches neue Commits haben:
main: A --- B --- E
\
feature: C --- DNach dem Merge:
main: A --- B --- E --- F (Merge-Commit)
\ /
C --- DBefehl:
bash
# Auf main wechseln
git switch main
# feature-login mergen
git merge feature-login
# Bei Konflikten: Siehe Abschnitt 5.4🔹 Merge-Befehle
bash
# Branch in aktuellen Branch mergen
git merge <branch-name>
# Merge mit spezifischer Commit-Nachricht
git merge --no-ff feature-login -m "Merge: feature-login in main"Optionen:
| Option | Erklärung |
|---|---|
--no-ff | Erzwingt einen Merge-Commit (auch bei Fast-Forward) |
--ff-only | Lehnt Merge ab, wenn kein Fast-Forward möglich ist |
--abort | Merge abbrechen (bei Konflikten) |
5.4 Merge-Konflikte lösen (Conflict Resolution)
📖 Was ist ein Merge-Konflikt?
Ein Merge-Konflikt tritt auf, wenn:
- ✅ Zwei Branches dieselbe Zeile in einer Datei geändert haben
- ✅ Git nicht automatisch entscheiden kann, welche Version korrekt ist
🔹 1. Konflikt erkennen
bash
# Merge starten
git merge feature-login
# Ausgabe bei Konflikt:
# Auto-merging index.html
# CONFLICT (content): Merge conflict in index.html
# Automatic merge failed; fix conflicts and then commit the result.🔹 2. Konfliktdatei untersuchen
Öffnen Sie die Datei mit Konflikt. Sie sieht so aus:
html
<<<<<<< HEAD (main)
<h1>Willkommen auf meiner Website</h1>
=======
<h1>Willkommen zu meinem Blog</h1>
>>>>>>> feature-loginErklärung:
<<<<<<< HEAD: Beginn des Konflikts (Ihre Version)=======: Trennung zwischen den Versionen>>>>>>> feature-login: Ende des Konflikts (Andere Version)
🔹 3. Konflikt lösen
Schritt 1: Datei bearbeiten und Konfliktmarkierungen entfernen
html
<!-- Lösung: Beide Versionen kombinieren -->
<h1>Willkommen zu meinem Blog</h1>
<p>Eine Website für meine Artikel</p>Schritt 2: Datei zur Staging Area hinzufügen
bash
git add index.htmlSchritt 3: Merge abschließen
bash
git commit -m "Merge: feature-login in main (Konflikt gelöst)"🔹 4. Konflikt vermeiden (Best Practices)
| Tipp | Erklärung |
|---|---|
| Häufig pullen | Halten Sie Ihren Branch aktuell (git pull origin main) |
| Kleine Commits | Je kleiner der Commit, desto geringer die Konfliktgefahr |
| Kommunikation | Koordinieren Sie sich mit Teammitgliedern |
.gitattributes | Konfliktlösungsregeln definieren |
🔹 5. Merge abbrechen
bash
# Merge abbrechen (wenn Sie den Konflikt nicht lösen möchten)
git merge --abort5.5 Branch-Management-Richtlinien
📋 Empfohlene Branch-Strategie
main (Produktion)
├── develop (Entwicklungs-Branch)
│ ├── feature/login (Feature-Branches)
│ ├── feature/payment
│ └── feature/profile
├── release/v1.0 (Release-Vorbereitung)
└── hotfix/bug-123 (Schnelle Bugfixes für Produktion)🔹 Branch-Benennungskonventionen
| Branch-Typ | Benennung | Beispiel |
|---|---|---|
| Feature | feature/<name> | feature/login |
| Bugfix | bugfix/<beschreibung> | bugfix/header-alignment |
| Hotfix | hotfix/<beschreibung> | hotfix/critical-security-fix |
| Release | release/<version> | release/v1.2.0 |
| Documentation | docs/<thema> | docs/api-update |
🔹 Best Practices
Hauptbranch schützen:
- ❌ Nicht direkt auf
mainoderdevelopcommitten - ✅ Immer über Pull Requests (PR) mergen
- ❌ Nicht direkt auf
Kurzlebige Branches:
- ✅ Branches sollten kurzlebig sein (Tage, nicht Wochen)
- ✅ Nach dem Merge löschen
Aktuell halten:
- ✅ Regelmäßig
git pull origin mainausführen
- ✅ Regelmäßig
Beschreibende Namen:
- ✅
feature/user-authentication(gut) - ❌
branch1(schlecht)
- ✅
5.6 Branch-Praxisbeispiel (Hands-on)
📝 Szenario: Feature-Branch erstellen, entwickeln, mergen
Schritt 1: Auf main wechseln und aktualisieren
bash
git switch main
git pull origin mainSchritt 2: Neuen Feature-Branch erstellen
bash
git switch -c feature/loginSchritt 3: Änderungen vornehmen und committen
bash
# Datei erstellen/ändern
echo "<form>Login</form>" > login.html
# Committen
git add login.html
git commit -m "Feature: Login-Formular hinzugefügt"Schritt 4: Branch pushen (Optional, für Teamarbeit)
bash
git push origin feature/loginSchritt 5: Zurück zu main wechseln
bash
git switch mainSchritt 6: Feature-Branch mergen
bash
git merge feature/loginSchritt 7: Branch löschen
bash
git branch -d feature/loginSchritt 8: Änderungen pushen
bash
git push origin main📝 Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅ Was Branches sind und warum sie wichtig sind
- ✅ Branch-Befehle (
branch,checkout,switch) - ✅ Merging (Fast-Forward & 3-Way Merge)
- ✅ Merge-Konflikte lösen (Schritt-für-Schritt-Anleitung)
- ✅ Branch-Management-Richtlinien (Benennung, Best Practices)
- ✅ Praxisbeispiel (Feature-Branch Workflow)
Nächstes Kapitel: Wir werden Remote-Repositories behandeln (GitHub/GitLab, git clone, git push, git pull).
🔗 Weiterführende Links
Copyright © 2024 Git-Tutorial für Anfänger
