Wie lösche ich einen Git-Branch lokal und remote?
Ein Feature ist gemergt, der Branch hat seinen Zweck erfüllt — und trotzdem sammeln sich in vielen Repositories dutzende alte Zweige an. Das Löschen läuft in Git an zwei getrennten Orten: einmal in Ihrer lokalen Kopie und einmal auf dem Server (etwa GitHub, GitLab oder Bitbucket). Ein lokal gelöschter Branch verschwindet nicht automatisch remote, und umgekehrt. Danach löschen Sie Branches gezielt auf beiden Seiten, räumen veraltete Referenzen weg und ordnen die häufigsten Fehlermeldungen richtig ein.
Lokalen Branch löschen
Für den lokalen Zweig gibt es zwei Varianten. Die sichere Variante mit kleinem -d löscht nur, wenn der Branch bereits vollständig in einen anderen Zweig gemergt wurde:
git branch -d feature/login
Ist der Branch nicht gemergt, bricht Git ab und warnt Sie — genau das soll -d leisten, damit keine noch nicht anderweitig gesicherte Arbeit verloren geht. Wollen Sie trotzdem löschen (weil die Änderungen bewusst verworfen werden), erzwingen Sie es mit großem -D:
git branch -D feature/login
Als Faustregel: -d fragt gewissermaßen nach, -D löscht ohne Rückfrage. Merken lässt sich das über die Langform --delete --force, für die -D die Kurzschreibweise ist.
Sie können den Branch nicht löschen, auf dem Sie stehen
Git verweigert das Löschen des aktuell ausgecheckten Branches. Wechseln Sie also zuerst auf einen anderen Zweig, üblicherweise den Hauptbranch:
git switch main
git branch -d feature/login
git switch gibt es seit Git 2.23 (2019); in älteren Versionen nutzen Sie stattdessen git checkout main. Welche Zweige lokal existieren, zeigt git branch — der aktuelle ist mit einem Sternchen markiert.
Remote-Branch löschen
Der Zweig auf dem Server ist davon unberührt. Ihn entfernen Sie über einen Push mit der Option --delete:
git push origin --delete feature/login
origin ist dabei der Standardname des Remotes; heißt Ihr Remote anders, setzen Sie den passenden Namen ein (welche es gibt, zeigt git remote -v). Es existiert außerdem eine ältere Kurzform, die noch häufig in Anleitungen auftaucht:
git push origin :feature/login
Der vorangestellte Doppelpunkt bedeutet sinngemäß „pushe nichts in den Ziel-Branch“, was diesen löscht. Beide Befehle sind gleichwertig; --delete ist die lesbarere und heute empfohlene Schreibweise.
Auf GitHub oder GitLab können Sie denselben Effekt auch in der Weboberfläche erreichen — in der Branch-Übersicht des Repositories gibt es pro Zweig ein Löschsymbol. Nach dem Mergen eines Pull- bzw. Merge-Requests bietet die Oberfläche das Löschen des Quell-Branches meist direkt per Button an.
Veraltete Referenzen aufräumen
Löscht ein Teammitglied einen Remote-Branch, erfährt Ihr lokales Git davon nicht von selbst. In Ihrer Kopie bleiben dann sogenannte Remote-Tracking-Referenzen (origin/feature/login) übrig, obwohl es den Zweig auf dem Server längst nicht mehr gibt. Diese Leichen entfernen Sie mit:
git fetch --prune
--prune holt den aktuellen Stand und wirft dabei alle Tracking-Referenzen weg, deren Remote-Branch verschwunden ist. Alternativ geht auch der spezialisierte Befehl:
git remote prune origin
Wenn Sie das Aufräumen dauerhaft automatisieren möchten, aktivieren Sie es global, damit jeder git fetch automatisch prunt:
git config --global fetch.prune true
Wichtig zur Einordnung: prune löscht ausschließlich lokale Verweise auf bereits entfernte Remote-Branches. Es entfernt weder Ihre eigenen lokalen Zweige noch etwas auf dem Server — der Befehl ist also ungefährlich.
Prüfen, ob das Löschen geklappt hat
Nach dem Aufräumen kontrollieren Sie das Ergebnis. Nur die Remote-Zweige listet:
git branch -r
Alles — lokal und remote — sehen Sie mit:
git branch -a
Der gelöschte Branch sollte in keiner der Listen mehr auftauchen. Erscheint er unter remotes/origin/... noch, haben Sie vermutlich das git fetch --prune aus dem vorigen Abschnitt noch nicht ausgeführt.
Typische Fehler und ihre Lösung
error: The branch 'feature/login' is not fully merged.
Der Zweig enthält Commits, die in keinem anderen Branch stecken — Git schützt Sie vor Datenverlust. Prüfen Sie, ob wirklich alles gesichert ist. Wollen Sie die Arbeit behalten, mergen Sie den Branch zuerst; ist sie bewusst überflüssig, löschen Sie mit git branch -D.
error: unable to delete 'feature/login': remote ref does not exist.
Der Branch existiert auf dem Server nicht (mehr) unter diesem Namen. Kontrollieren Sie die exakte Schreibweise mit git branch -r. Git-Branchnamen sind case-sensitive — Feature/Login und feature/login sind zwei verschiedene Zweige.
remote: error: GH006: Protected branch update failed (oder Ähnliches bei GitLab)
Der Zweig ist als geschützt konfiguriert; typischerweise trifft das den Standard-Branch (main/master) und Release-Branches. Löschen ist dann nur nach Aufheben der Branch-Protection in den Repository-Einstellungen möglich — und beim Standard-Branch ohnehin nur, wenn Sie vorher einen anderen Zweig als Standard festlegen.
Der Branch ist wieder da, obwohl ich ihn gelöscht habe.
Wahrscheinlich hat ein Kollege ihn erneut gepusht, oder ein git push aus einer alten lokalen Kopie hat ihn wiederbelebt. Sprechen Sie das im Team ab, bevor Sie ein zweites Mal löschen.
Mehrere Branches auf einmal löschen
Nach einem größeren Merge-Marathon lohnt sich das Bündeln. Alle lokal bereits gemergten Zweige (außer dem aktuellen und main) räumen Sie so weg:
git branch --merged main | grep -vE '^\*|main' | xargs -n 1 git branch -d
Der Befehl setzt eine Unix-Shell voraus (Linux, macOS, Git Bash unter Windows). Prüfen Sie die Ausgabe von git branch --merged main lieber einmal, bevor Sie sie an git branch -d weiterreichen — die Filterung nach main greift auch bei Namen, die diese Zeichenfolge nur enthalten (etwa maintenance). Zum Unterschied zwischen dem, was dabei tatsächlich abgeglichen wird, und einem einfachen git pull lesen Sie auch Was macht git fetch?.
FAQ
Verliere ich meine Commits, wenn ich einen Branch lösche?
Nicht zwangsläufig. Commits, die auch in einem anderen Zweig liegen (etwa nach einem Merge), bleiben erhalten. Nur Commits, die ausschließlich auf dem gelöschten Branch existierten, werden „unerreichbar“ und irgendwann von Gits Garbage Collection entfernt. Solange das nicht passiert ist, lässt sich ein versehentlich gelöschter lokaler Branch oft über git reflog und den dort gefundenen Commit-Hash wiederherstellen: git branch feature/login <hash>. Dasselbe Prinzip nutzen Sie, um nach einem missglückten Force Push überschriebene Commits zurückzuholen.
Warum ist der Remote-Branch nach dem lokalen Löschen noch da?
Weil lokal und remote getrennte Ablagen sind. git branch -d betrifft nur Ihre Maschine. Für den Server brauchen Sie zusätzlich git push origin --delete <branch>.
Ich habe versehentlich den falschen Remote-Branch gelöscht — kann ich das rückgängig machen?
Wenn jemand im Team den Branch noch lokal hat, genügt ein git push origin <branch> von dessen Kopie, um ihn wiederherzustellen. Auf GitHub lässt sich ein kürzlich gelöschter Branch außerdem oft über den zugehörigen (geschlossenen) Pull Request per „Restore branch“ zurückholen.