Branches in Git erstellen und wechseln
Branching ist die Superkraft von Git: isolierte Entwicklungsstränge für Features, Fixes oder Experimente ohne die Stabilität von main zu gefährden. Das effiziente Erstellen und Wechseln von Branches ist grundlegend für jeden sauberen Workflow.
1. Mentales Modell
main repräsentiert den veröffentlichten, stabilen Verlauf. Ein Branch ist nur ein beweglicher Zeiger (Pointer) auf einen Commit. Beim Erstellen eines neuen Branches sagst du: „Ab diesem Punkt starte ich eine neue Arbeitslinie.“ Es wird nichts kopiert – nur eine leichte Referenz angelegt.
Kernideen:
- Ein Branch zeigt auf genau einen Commit.
HEADsagt dir, auf welchem Branch (oder Commit) du „stehst“.- Neue Commits bewegen den Branch-Zeiger nach vorn.
Weil Branches billig sind: nutze viele – Feature, Bugfix, Experiment.
2. Vorhandene Branches auflisten
Lokal:
$ git branchAktueller Branch hat *. Lokal + Remote:
$ git branch -aMit letztem Commit:
$ git branch -vStale Remote-Tracking-Branches entfernen:
$ git fetch --prune3. Neuen Branch erstellen
Aktualisiere Basis (oft main):
$ git checkout main
$ git pull origin mainNur erstellen:
$ git branch feature/login-formErstellen + direkt wechseln (empfohlen):
$ git switch -c feature/login-formÄltere Syntax:
$ git checkout -b feature/login-formNamenskonventionen:
feature/<name>neue Funktionbugfix/<ticket-id>Fehlerbehebunghotfix/<kritisch>dringender Produktionsfix- weitere:
refactor/,chore/,docs/etc.
Vermeide Leerzeichen, Großbuchstaben, vage Namen (new, temp).
4. Zwischen Branches wechseln
$ git switch feature/login-formAlt:
$ git checkout feature/login-formGit blockt bei uncommitteten, überschreibungsgefährdeten Änderungen. Optionen:
- Committen
- Stashen:
git stash push -m "WIP" - Verwerfen:
git restore .
Zurück zum vorherigen Branch:
$ git switch -Detached HEAD
Commit direkt auschecken:
$ git checkout 4f2a9c1Jetzt „detached HEAD“ – kannst testen, aber Commits ohne Branch sind schwer auffindbar. Bewahren:
$ git switch -c experiment/performance-tuning5. Branch aktuell halten
Während Featurearbeit wandert main weiter:
$ git switch feature/login-form
$ git fetch origin
$ git merge origin/mainLineare Historie (nur wenn allein):
$ git fetch origin
$ git rebase origin/mainNie gemeinsam genutzte Branches rebases, da Hashes sich ändern.
6. Branch pushen
Lokal existiert er nur bis zum Push:
$ git push -u origin feature/login-formTracking prüfen:
$ git branch -vv7. Branch umbenennen
Auf Branch selbst:
$ git branch -m feature/login-form feature/auth-uiRemote aktualisieren:
$ git push origin :feature/login-form
$ git push -u origin feature/auth-ui8. Branch löschen
Nach Merge und wenn sicher: Lokal:
$ git branch -d feature/login-formErzwingen (unmerged):
$ git branch -D feature/login-formRemote:
$ git push origin --delete feature/login-form9. Beispiel-Workflow
mainupdaten- Feature-Branch anlegen
- Klein, häufig, bedeutungsvoll committen
- Regelmäßig rebase oder merge von
origin/main - Push + PR/MR öffnen
- Nach Merge Branch lokal & remote löschen
10. Troubleshooting
| Situation | Ursache | Lösung |
|---|---|---|
| Wechsel blockiert | Überschreibungsgefahr | Commit / stash / restore |
| Detached HEAD | Commit statt Branch | git switch -c <name> |
| Branch fehlt nach Clone | Nur Default geholt | git fetch --all dann switch |
| Push rejected (non-fast-forward) | Remote weiter | git pull --rebase dann push |
| Branch versehentlich gelöscht | Kein Referenz mehr | git reflog + neuer Branch |
11. Strategische Nutzung
Nicht nur Features:
- Prototyping
- Hotfixes von Tags
- (Sparsame) Integrations-Branches
- Doku/Infra Änderungen
Kurze Lebensdauer minimiert Konflikte.
12. Übung
- Repo init oder klonen
feature/colors+ Datei- Zwei Commits
- Rebase nach Update von
main - Umbenennen in
feature/theme-colors - Push + PR
- Merge + löschen
13. Kernpunkte
- Branch-Erstellung ist sofort & billig
switchist klarer als altescheckout- Früh aktualisieren minimiert Merge-Reibung
- Aufräumen reduziert kognitive Last
- Immer Branch für Exploratives
Das Beherrschen von Branches ebnet den Weg für Rebase, History Editing und Release-Strategien.
