Gehen Sie folgendermaßen vor, um alle baumelnden und aus den Reflogs erreichbaren Commits zu entfernen:
git reflog expire --expire-unreachable=now --all
git gc --prune=now
Aber seien Sie sicher, dass dies das ist, was Sie wollen. Ich empfehle Ihnen, die Manpages zu lesen, aber hier ist das Wesentliche:
git gc
Entfernt nicht erreichbare Objekte (Commits, Bäume, Blobs (Dateien)). Ein Objekt ist nicht erreichbar, wenn es nicht Teil des Verlaufs eines Zweigs ist. Eigentlich ist es etwas komplizierter:
git gc
macht einige andere Dinge, aber sie sind hier nicht relevant und nicht gefährlich.
Nicht erreichbare Objekte, die jünger als zwei Wochen sind, werden nicht entfernt. Daher verwenden wir --prune=now
"nicht erreichbare Objekte entfernen, die zuvor erstellt wurden".
Objekte können auch über das Reflog erreicht werden. Während Zweige die Geschichte eines Projekts aufzeichnen, zeichnen Reflogs die Geschichte dieser Zweige auf. Wenn Sie Änderungen vornehmen, zurücksetzen usw., werden Commits aus dem Zweigverlauf entfernt, aber git behält sie bei, falls Sie feststellen, dass Sie einen Fehler gemacht haben. Reflogs sind eine bequeme Methode, um herauszufinden, welche destruktiven (und anderen) Operationen an einem Zweig (oder HEAD) ausgeführt wurden, und erleichtern so das Rückgängigmachen einer destruktiven Operation.
Wir müssen also auch die Reflogs entfernen, um tatsächlich alles zu entfernen, was von einem Zweig nicht erreichbar ist. Wir tun dies, indem wir --all
Reflogs ablaufen lassen. Wieder behält git ein bisschen von den Reflogs bei, um Benutzer zu schützen, also müssen wir ihm erneut sagen, dass er dies nicht tun soll : --expire-unreachable=now
.
Da ich das Reflog hauptsächlich verwende, um mich von destruktiven Operationen zu erholen, verwende ich normalerweise --expire=now
stattdessen, wodurch die Reflogs vollständig gezappt werden.