W3docs

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.

git branch

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.
  • main immer 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.

git branch1

Häufige Optionen

BefehlWas er macht
git branchListet lokale Branches auf (entspricht git branch --list); der aktuelle Branch ist mit * markiert.
git branch -vListet 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 -aListet alle Branches auf — lokale und Remote-Tracking-Branches.
git branch -rListet nur Remote-Tracking-Branches auf.
git branch --mergedListet Branches auf, die bereits in den aktuellen gemergt wurden (sicher zum Löschen).
git branch --no-mergedListet 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.

git branch2

Einen Branch auf deinem aktuellen Commit erstellen:

git branch test_branch

Ein neuer Zeiger auf den aktuellen Commit wird erstellt; nichts anderes bewegt sich:

git branch3

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_branch

Meistens 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 commit

Branches 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_branch

Fü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 README

Um 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
# * main

Branches 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-name

Um einen anderen Branch umzubenennen, gib sowohl den alten als auch den neuen Namen an:

git branch -m old-name new-name

Wenn 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
Warnung

-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_branch

Die ältere Doppelpunkt-Syntax macht dasselbe — sie pusht "nichts" in den Remote-Branch, was ihn löscht:

git push origin :test_branch

Um 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 it

Ein 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

Übung

Übung
Was sind die Funktionen und Möglichkeiten des Befehls 'git branch'?
Was sind die Funktionen und Möglichkeiten des Befehls 'git branch'?
Was this page helpful?