Skip to content

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?

VorteilErklärung
ParallelentwicklungMehrere Entwickler arbeiten gleichzeitig an verschiedenen Features
IsolationFehler in einem Branch beeinflussen andere Branches nicht
ExperimenteProbieren Sie neue Ideen aus, ohne die Hauptleitung zu gefährden
Code-ReviewJeder 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-login

Methode 2: git switch (Modern, empfohlen)

bash
# Zum main-Branch wechseln
git switch main

# Neuen Branch erstellen UND wechseln
git switch -c feature-login

Unterschied:

  • git checkout ist ein "Schweizer Taschenmesser" (kann vieles, ist aber verwirrend)
  • git switch ist 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

BefehlErklärung
git branchBranches 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 --- D

Nach dem Merge:

main:      A --- B --- C --- D

Befehl:

bash
# Auf main wechseln
git switch main

# feature-login mergen
git merge feature-login

# Branch löschen (nach erfolgreichem Merge)
git branch -d feature-login

Szenario 2: 3-Way Merge (Komplexer)

Wenn beide Branches neue Commits haben:

main:      A --- B --- E
                     \
feature:             C --- D

Nach dem Merge:

main:      A --- B --- E --- F (Merge-Commit)
                     \       /
                      C --- D

Befehl:

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:

OptionErklärung
--no-ffErzwingt einen Merge-Commit (auch bei Fast-Forward)
--ff-onlyLehnt Merge ab, wenn kein Fast-Forward möglich ist
--abortMerge 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-login

Erklä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.html

Schritt 3: Merge abschließen

bash
git commit -m "Merge: feature-login in main (Konflikt gelöst)"

🔹 4. Konflikt vermeiden (Best Practices)

TippErklärung
Häufig pullenHalten Sie Ihren Branch aktuell (git pull origin main)
Kleine CommitsJe kleiner der Commit, desto geringer die Konfliktgefahr
KommunikationKoordinieren Sie sich mit Teammitgliedern
.gitattributesKonfliktlösungsregeln definieren

🔹 5. Merge abbrechen

bash
# Merge abbrechen (wenn Sie den Konflikt nicht lösen möchten)
git merge --abort

5.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-TypBenennungBeispiel
Featurefeature/<name>feature/login
Bugfixbugfix/<beschreibung>bugfix/header-alignment
Hotfixhotfix/<beschreibung>hotfix/critical-security-fix
Releaserelease/<version>release/v1.2.0
Documentationdocs/<thema>docs/api-update

🔹 Best Practices

  1. Hauptbranch schützen:

    • ❌ Nicht direkt auf main oder develop committen
    • ✅ Immer über Pull Requests (PR) mergen
  2. Kurzlebige Branches:

    • ✅ Branches sollten kurzlebig sein (Tage, nicht Wochen)
    • ✅ Nach dem Merge löschen
  3. Aktuell halten:

    • ✅ Regelmäßig git pull origin main ausführen
  4. 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 main

Schritt 2: Neuen Feature-Branch erstellen

bash
git switch -c feature/login

Schritt 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/login

Schritt 5: Zurück zu main wechseln

bash
git switch main

Schritt 6: Feature-Branch mergen

bash
git merge feature/login

Schritt 7: Branch löschen

bash
git branch -d feature/login

Schritt 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).



Copyright © 2024 Git-Tutorial für Anfänger

Frei für alle Anfänger