Weiter zum Inhalt

Git Prune: Was ist Git Pruning und wie verwendet man Git Prune

Git prune ist ein Git-Befehl, der Objekte entfernt, die von keinem Commit oder Branch mehr erreichbar sind, und so Speicherplatz freigibt.
Aktualisiert 18. Sept. 2026  · 5 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Git geht bei Löschvorgängen bewusst vorsichtig vor, damit wichtige Commits oder Daten nicht versehentlich verloren gehen.

Dadurch können jedoch veraltete Daten sichtbar bleiben, etwa Verweise auf gelöschte Branches. Mit der Zeit sammeln sich in Git-Repositories nicht referenzierte Objekte an, die unnötig Speicherplatz belegen und für Verwirrung sorgen können.

Der Befehl git prune-Befehl ist ein Aufräumwerkzeug in Git und dient in erster Linie dazu, unerreichbare Objekte im Repository zu bereinigen.

Ein unerreichbares Objekt ist ein Objekt, das von keinem Branch, Tag, Remote-Tracking-Branch oder einem anderen Verweis aus erreichbar ist. Diese Objekte belegen Speicherplatz im Repository und vermüllen es mit der Zeit mit unnötigen Daten.

Auch wenn git prune ein leistungsfähiges Werkzeug ist, um Repositories schlank zu halten, müssen die meisten Nutzer es nicht direkt verwenden, weil Git die automatische Speicherbereinigung (git gc) übernimmt. Zu verstehen, welche Rolle es spielt und wie es funktioniert, ist jedoch hilfreich für fortgeschrittene Git-Nutzer oder in Situationen, in denen manuelle Wartung des Repositories erforderlich oder gewünscht ist.

Werde Dateningenieur

Werde ein Dateningenieur durch fortgeschrittenes Python-Lernen
Kostenloses Lernen Beginnen

Was ist git prune?

Der Befehl git prune entfernt Objekte, die im lokalen Repository nicht mehr benötigt werden. Dazu zählen Commits, Trees (Verzeichnis-Snapshots), Blobs (Dateien) und Tags, die von keinem Branch oder Tag im Repository mehr erreichbar sind.

Kurz gesagt: git prune hilft, unnötige Dateien und Daten im Repository zu beseitigen, spart Platz und reduziert Unordnung.

Wie werden Objekte unerreichbar?

Objekte können auf verschiedene Weise unerreichbar werden — zum Beispiel durch das Löschen von Branches oder das Umschreiben von Commits. Wenn Branches gelöscht werden, sind alle Commits, die ausschließlich zu diesen Branches gehören und nicht Teil eines anderen Branches oder Tags sind, nicht mehr erreichbar.

Beim Umschreiben von Commits mit Befehlen wie git rebase entstehen neue Commits und die alten werden verworfen. Diese alten Commits werden dadurch ebenfalls unerreichbar.

Schonfrist und Reflogs

Git führt ein Protokoll über Aktualisierungen von Branch-Spitzen und anderen Verweisen, die sogenannten Reflogs (Reference Logs). Wir können sie mit dem Befehl git reflog einsehen.

Auch wenn ein Objekt unerreichbar ist, wird es nicht von git prune gelöscht, solange es noch im Reflog steht.

Standardmäßig verfallen Reflog-Einträge nach 90 Tagen. Das ist eine Schonfrist, in der unerreichbare Objekte vorübergehend aufbewahrt und nicht sofort entfernt werden.

Wann sollte man git prune verwenden?

In der Regel müssen wir git prune nicht direkt verwenden. Git verfügt über eine automatische Speicherbereinigung, die nach bestimmten Befehlen ausgeführt wird, um unnötige Dateien zu entfernen und die Effizienz des lokalen Repositories durch Komprimierung zu verbessern.

Trotzdem kann es sinnvoll sein, das Repository manuell zu bereinigen, zum Beispiel:

  • Nachdem wir eine Aktion ausgeführt haben, die sicher unerreichbare Objekte erzeugt, etwa das Löschen eines Branches.
  • Wenn wir sofort Speicherplatz freiräumen möchten.
  • Um das Repository durchgehend aufgeräumt zu halten.

Speicherbereinigung mit git gc

Statt direkt zu „prunen“, wird meist empfohlen, auf die Speicherbereinigung zu setzen. Sie führt nicht nur ein git prune durch, sondern optimiert den Speicher zusätzlich, indem Objekte komprimiert werden.

Wie oben erwähnt, wird die Speicherbereinigung nach einigen Befehlen automatisch ausgeführt. Wir können sie aber auch manuell starten mit:

git gc

So verwendest du git prune

Da git prune Daten löscht, solltest du es zunächst mit der Option --dry-run ausführen.

git prune --dry-run

Diese Option listet die Objekte auf, die gelöscht würden, ohne sie tatsächlich zu entfernen. Die Ausgabe sieht etwa so aus:

0d7dff8258654c03a058987b3e63c86feca9200d commit
ea1380f52f0bfa0142e46767adfd56593681091a blob
fa91af78a1ab453c1d7632192b3ca8bf217ec711 commit

Die Ausgabe zeigt, dass zwei Commits und ein Blob unerreichbar sind und gelöscht würden. Wenn sichergestellt ist, dass keine wichtigen Daten gelistet sind, können wir mit der Bereinigung fortfahren:

git prune

Manchmal möchten wir direkt nach einer Aktion bereinigen, von der wir wissen, dass sie zu unerreichbaren Objekten führt, z. B. nach dem Löschen eines Branches. Wir führen git prune --dry-run aus, aber die Ausgabe ist leer. Der Grund: Die gelöschten Commits sind noch im Reflog referenziert.

Wenn wir nicht warten möchten, bis sie im Reflog verfallen, können wir sie manuell verfallen lassen mit:

git reflog expire --expire-unreachable=now --all

Die verwendeten Optionen im Überblick:

  • Mit --expire-unreachable=now wird das Ablaufdatum aller unerreichbaren Objekte auf „jetzt“ gesetzt, sie verfallen also sofort.
  • Mit --all werden alle Reflog-Einträge im Repository berücksichtigt. Ohne diese Option müssten wir eine konkrete Referenz (z. B. einen Branch oder ein Tag) angeben.

git prune: Fortgeschrittene Nutzung

Schauen wir uns einige fortgeschrittene Techniken an, etwa das Festlegen einer Ablaufzeit oder das Aufräumen gepackter Dateien.

Eine Ablaufzeit festlegen

Vielleicht möchten wir nur ältere unerreichbare Objekte entfernen, zum Beispiel nur solche, die mindestens zwei Wochen alt sind.

Mit der Option --expire <time> können wir einen Stichtag festlegen. Git entfernt Objekte, die länger als den angegebenen Zeitraum unerreichbar sind. Der Parameter <time> akzeptiert verschiedene Formate wie „2 weeks ago“, „3 days“, „yesterday“ usw., um die Angabe flexibel zu machen.

Beispielbefehl:

git prune --expire=2.weeks.ago

Gepackte Dateien bereinigen

Git speichert Objekte auf zwei Arten: als einzelne Dateien (loose objects) und in Packfiles. Packen spart Platz und verbessert die Performance, indem mehrere Objekte in einer Datei gespeichert und Redundanzen entfernt werden.

Gelegentlich existiert ein Objekt sowohl lose als auch gepackt. Diese Redundanz ist nicht schädlich (abgesehen von etwas zusätzlichem Speicherbedarf), aber wir können die losen, bereits gepackten Objekte bereinigen, um Platz zurückzugewinnen.

Der Befehl git prune-packed entfernt lose Objekte, wenn sie bereits in einem Pack enthalten sind. Im Gegensatz zu git prune unterstützt git prune-packed keine Optionen wie --expire <time>. Er bereinigt einfach lose Objekte, die schon gepackt sind.

Fazit

Während der Arbeit mit einem Repository werden einige Objekte unerreichbar und belegen unnötig Speicherplatz. Git verwaltet das über eine Speicherbereinigung, die unerreichbare Objekte nach einer gewissen Inaktivität entfernt.

Die Speicherbereinigung wird von Git nach bestimmten Befehlen automatisch ausgeführt. Wir können sie aber auch manuell mit git gc starten. Dabei werden nicht nur unerreichbare Objekte per git prune entfernt, sondern auch Speicher optimiert, indem Objekte komprimiert werden.

Fortgeschrittene Git-Nutzer möchten ihr Repository möglicherweise manuell schlank halten. Mit git prune lassen sich unerreichbare Objekte gezielt löschen. Führe vor git prune immer git prune --dry-run aus, um einen Überblick über die zu löschenden Objekte zu erhalten.

Werde Dateningenieur

Beweise deine Fähigkeiten als einsatzbereiter Datentechniker.

François Aubry's photo
Author
François Aubry
LinkedIn
Full-Stack-Ingenieur und Gründer von CheapGPT. Das Unterrichten war schon immer meine Leidenschaft. Schon als Schülerin habe ich eifrig nach Möglichkeiten gesucht, anderen Schülern Nachhilfe zu geben und sie zu unterstützen. Diese Leidenschaft führte dazu, dass ich einen Doktortitel anstrebte, wobei ich auch als Lehrassistentin tätig war, um meine akademischen Bemühungen zu unterstützen. In diesen Jahren fand ich im traditionellen Klassenzimmer große Erfüllung, indem ich Verbindungen förderte und das Lernen erleichterte. Doch mit dem Aufkommen von Online-Lernplattformen erkannte ich das transformative Potenzial der digitalen Bildung. Ich war sogar aktiv an der Entwicklung einer solchen Plattform an unserer Hochschule beteiligt. Es ist mir ein großes Anliegen, traditionelle Unterrichtsprinzipien mit innovativen digitalen Methoden zu verbinden. Meine Leidenschaft ist es, Kurse zu erstellen, die nicht nur ansprechend und informativ, sondern auch für Lernende im digitalen Zeitalter zugänglich sind.
Themen
Git

Lerne Versionskontrolle mit diesen Kursen!

Kurs

Einführung in GitHub-Konzepte

2 Std.
50.5K
Der Kurs zeigt dir die verschiedenen Funktionen sowie die Benutzeroberfläche von GitHub und wie du Alltagsaufgaben im Team erledigst.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow