git branch
Nützliche Informationen zum git branch-Befehl, seiner Verwendung sowie zum Erstellen und Löschen von Branches. Mit Beispielen.
Was git branch macht
Der Befehl git branch erstellt, listet auf, benennt um und löscht Branches. Das ist seine gesamte Aufgabe — er wechselt nicht den Working Tree zu einem Branch und führt keine Zusammenführungen durch. Diese Aufgaben gehören zu git checkout / git switch und git merge. Stell dir git branch als das Werkzeug vor, das die Labels verwaltet, während die anderen Befehle dich zwischen ihnen bewegen und sie wieder zusammenführen.
Diese Seite erklärt, was ein Branch eigentlich ist, wie man Branches erstellt und auflistet, wie man sie umbenennt und löscht (lokal und auf einem Remote), sowie häufige Fallstricke, über die man stolpern kann.

Was ein Branch wirklich ist
Ein Branch in Git ist keine Kopie deiner Dateien — er ist ein leichtgewichtiger, beweglicher Zeiger auf einen einzelnen Commit. Jeder Commit zeigt auch auf seinen/seine Vorgänger zurück, sodass das Zurückverfolgen eines Branch-Zeigers durch seine Vorgänger die vollständige Historie dieser Arbeitslinie rekonstruiert.
Da ein Branch lediglich eine 41-Byte-Datei mit einem Commit-Hash ist, ist das Erstellen eines Branches sofort und kostet fast nichts:
cat .git/refs/heads/main
# 9f1c2a7e8d... (the commit your branch currently points at)Ein spezieller Zeiger namens HEAD verfolgt, auf welchem Branch man sich aktuell befindet. Wenn du einen Commit erstellst, bewegt sich der aktuelle Branch-Zeiger auf den neuen Commit und HEAD folgt ihm. Deshalb ist das Branching in Git so günstig im Vergleich zu älteren Versionskontrollsystemen, die Dateien physisch duplizieren.
Warum Branches verwenden
Branches geben dir eine isolierte Entwicklungslinie. Du kannst ein Feature entwickeln oder einen Bug auf seinem eigenen Branch beheben, ohne den stabilen main-Branch zu berühren, und es dann zusammenführen, wenn es fertig ist. Häufige Gründe:
- Zwei Features parallel entwickeln, ohne dass ihre Änderungen kollidieren.
mainimmer veröffentlichbar halten, während experimenteller Code woanders lebt.- Die Historie bereinigen vor dem Merge, damit der gemeinsame Branch ordentlich bleibt.
- Einen Pull Request öffnen — die meisten Plattformen bauen PRs um Branches auf.

Häufige Optionen
| Befehl | Was er macht |
|---|---|
git branch | Listet lokale Branches auf (entspricht git branch --list); der aktuelle Branch ist mit * markiert. |
git branch -v | Listet Branches mit dem neuesten Commit-Hash und der Commit-Nachricht jedes Branches auf. |
git branch <branch> | Erstellt einen neuen Branch namens <branch>, wechselt aber nicht zu ihm. |
git branch <branch> <start-point> | Erstellt <branch> zeigend auf einen bestimmten Commit, Tag oder Branch. |
git branch -d <branch> | Löscht einen Branch nur, wenn seine Änderungen bereits gemergt wurden. |
git branch -D <branch> | Löscht einen Branch erzwungen, auch mit ungemergten Änderungen (-D = --delete --force). |
git branch -m <old> <new> | Benennt einen Branch um (verwende -M um einen vorhandenen Namen zu überschreiben). |
git branch -a | Listet alle Branches auf — lokale und Remote-Tracking-Branches. |
git branch -r | Listet nur Remote-Tracking-Branches auf. |
git branch --merged | Listet Branches auf, die bereits in den aktuellen gemergt wurden (sicher zum Löschen). |
git branch --no-merged | Listet Branches auf, die noch nicht in den aktuellen gemergt wurden. |
Branches erstellen
Branches sind nur Zeiger auf Commits. Wenn du einen erstellst, fügt Git einen neuen Zeiger auf deinen aktuellen Commit hinzu — es ändert keine Historie.

Einen Branch auf deinem aktuellen Commit erstellen:
git branch test_branchEin neuer Zeiger auf den aktuellen Commit wird erstellt; nichts anderes bewegt sich:

Das Erstellen eines Branches wechselt dich nicht zu ihm — HEAD zeigt immer noch auf den alten Branch. Um auf dem neuen Branch zu arbeiten, wechsle zu ihm und verwende dann git add und git commit, um Arbeit festzuhalten:
git switch test_branch # modern; or: git checkout test_branchMeistens möchtest du in einem Schritt erstellen und wechseln:
git switch -c test_branch # create + switch (modern)
git checkout -b test_branch # create + switch (older syntax, identical effect)Du kannst auch von einem bestimmten Punkt statt von HEAD aus branchen — einem Tag, einem anderen Branch oder einem Commit-Hash:
git branch hotfix v1.0 # branch starting at the v1.0 tag
git branch experiment 9f1c2a7 # branch starting at an old commitBranches auflisten und untersuchen
Das Ausführen von git branch ohne Argumente zeigt deine lokalen Branches und markiert den aktuellen:
git branch
# feature-login
# * main
# test_branchFüge -v hinzu, um zu sehen, worauf jeder Branch zeigt:
git branch -v
# feature-login 1a2b3c4 Add login form
# * main 9f1c2a7 Update README
# test_branch 9f1c2a7 Update READMEUm herauszufinden, welche Branches sicher bereinigt werden können, liste die auf, die bereits in deinen aktuellen Branch gemergt wurden. Alles hier kann mit -d entfernt werden:
git branch --merged
# feature-login
# * mainBranches umbenennen
Verwende -m (move), um umzubenennen. Um den Branch umzubenennen, auf dem du dich gerade befindest, gib einfach den neuen Namen an:
git branch -m better-nameUm einen anderen Branch umzubenennen, gib sowohl den alten als auch den neuen Namen an:
git branch -m old-name new-nameWenn ein Branch mit dem Zielnamen bereits existiert, verweigert -m das Überschreiben; verwende -M, um die Umbenennung zu erzwingen. Beachte, dass das Umbenennen eines Branches, der auf einem Remote existiert, ihn dort nicht umbenennt — du musst den neuen Namen pushen und den alten löschen.
Branches löschen
Nachdem ein Branch in main gemergt wurde, lösche den lokalen Zeiger, um deine Branch-Liste ordentlich zu halten:
git branch -d test_branch
# Deleted branch test_branch (was 9f1c2a7).Das Flag -d ist eine Sicherheitsprüfung: Es weigert sich, einen Branch zu löschen, dessen Commits noch nicht in den aktuellen Branch gemergt wurden, damit du keine Arbeit verlierst:
git branch -d test_branch
# error: The branch 'test_branch' is not fully merged.
# If you are sure you want to delete it, run 'git branch -D test_branch'.Wenn du sicher bist, dass du den Branch (und seine ungemergten Commits) loswerden möchtest, verwende das große -D, um es zu erzwingen:
git branch -D test_branch-D verwirft Commits, die nur auf diesem Branch existieren. Diese Commits werden unerreichbar und werden schließlich durch Garbage Collection entfernt. Wenn du versehentlich löschst, kannst du den Hash normalerweise aus git reflog wiederherstellen, bevor das passiert.
Einen Remote-Branch löschen
Die obigen Befehle entfernen nur deine lokale Kopie. Der Branch kann weiterhin auf dem Remote (z. B. auf origin) existieren. Um ihn dort zu löschen:
git push origin --delete test_branchDie ältere Doppelpunkt-Syntax macht dasselbe — sie pusht "nichts" in den Remote-Branch, was ihn löscht:
git push origin :test_branchUm einen Branch auf einem Remote zu erstellen, pushe einen lokalen Branch; der erste Push etabliert ihn auf dem Remote und (mit -u) richtet das Tracking ein. Siehe git push und git remote für Details:
git push -u origin test_branch
# pushes test_branch to origin and tracks itEin vollständiges Beispiel
Hier ist der typische Zyklus Erstellen → Arbeiten → Mergen → Aufräumen von Anfang bis Ende:
git switch -c feature-x # create and switch to the branch
# ... edit files ...
git add .
git commit -m "Add feature X"
git switch main # back to main
git merge feature-x # bring the work in
git branch -d feature-x # delete the now-merged local branch
git push origin --delete feature-x # and remove it from the remote