Last active
October 1, 2024 16:26
-
-
Save boywijnmaalen/f052cd70fa6d924d58621b2e9c806adb to your computer and use it in GitHub Desktop.
Deletes all dangling commits, objects and blobs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# empty the stash | |
$ git stash clear | |
# objects can also be reached through the reflog. | |
# while branches record the history of some project, reflogs record the history of these branches. | |
# if you amend, reset etc. commits are removed from the branch history | |
# but git keeps them around in case you realize that you made a mistake. | |
# reflogs are a convenient way to find out what destructive (and other) operations were performed | |
# on a branch (or HEAD), making it easier to undo a destructive operation. | |
# we also have to remove the reflogs to actually remove everything not reachable from a branch. | |
# we do so by expiring --all reflogs. | |
# again git keeps a bit of the reflogs to protect users | |
# so we again have to tell it not to do so: --expire-unreachable=now. | |
# use the reflog to recover from destructive operations | |
# use --expire=now instead, which zaps the reflogs completely. | |
$ git reflog expire --expire-unreachable=now --all | |
# git-fsck - verifies the connectivity and validity of the objects in the database | |
# '--unreachable' print out objects that exist but that aren’t reachable from any of the reference nodes. | |
$ git fsck --unreachable | |
# removes unreachable objects (commits, trees, blobs (files)). | |
# an object is unreachable if it isn't part of the history of some branch. | |
# actually it is a bit more complicated; | |
# unreachable objects that are younger than two weeks are not removed | |
# so we use --prune=now which means "remove unreachable objects that were created before now" | |
$ git gc --prune=now |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment