man pages section 1: User Commands

Exit Print View

Updated: July 2014

git-gc (1)


git-gc - Cleanup unnecessary files and optimize the local repository


git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]


Git Manual                                              GIT-GC(1)

     git-gc - Cleanup unnecessary files and optimize the local

     git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

     Runs a number of housekeeping tasks within the current
     repository, such as compressing file revisions (to reduce
     disk space and increase performance) and removing
     unreachable objects which may have been created from prior
     invocations of git add.

     Users are encouraged to run this task on a regular basis
     within each repository to maintain good disk space
     utilization and good operating performance.

     Some git commands may automatically run git gc; see the
     --auto flag below for details. If you know what you're doing
     and all you want is to disable this behavior permanently
     without further considerations, just do:

         $ git config --global 0

         Usually git gc runs very quickly while providing good
         disk space utilization and performance. This option will
         cause git gc to more aggressively optimize the
         repository at the expense of taking much more time. The
         effects of this optimization are persistent, so this
         option only needs to be used occasionally; every few
         hundred changesets or so.

         With this option, git gc checks whether any housekeeping
         is required; if not, it exits without performing any
         work. Some git commands run git gc --auto after
         performing operations that could create many loose

         Housekeeping is required if there are too many loose
         objects or too many packs in the repository. If the
         number of loose objects exceeds the value of the
         configuration variable, then all loose objects are
         combined into a single pack using git repack -d -l.
         Setting the value of to 0 disables automatic
         packing of loose objects.

Git          Last change: 02/22/2012                    1

Git Manual                                              GIT-GC(1)

         If the number of packs exceeds the value of
         gc.autopacklimit, then existing packs (except those
         marked with a .keep file) are consolidated into a single
         pack by using the -A option of git repack. Setting
         gc.autopacklimit to 0 disables automatic consolidation
         of packs.

         Prune loose objects older than date (default is 2 weeks
         ago, overridable by the config variable gc.pruneExpire).
         This option is on by default.

         Do not prune any loose objects.

         Suppress all progress reports.

     The optional configuration variable gc.reflogExpire can be
     set to indicate how long historical entries within each
     branch's reflog should remain available in this repository.
     The setting is expressed as a length of time, for example 90
     days or 3 months. It defaults to 90 days.

     The optional configuration variable
     gc.reflogExpireUnreachable can be set to indicate how long
     historical reflog entries which are not part of the current
     branch should remain available in this repository. These
     types of entries are generally created as a result of using
     git commit --amend or git rebase and are the commits prior
     to the amend or rebase occurring. Since these changes are
     not part of the current project most users will want to
     expire them sooner. This option defaults to 30 days.

     The above two configuration variables can be given to a
     pattern. For example, this sets non-default expiry values
     only to remote-tracking branches:

         [gc "refs/remotes/*"]
                 reflogExpire = never
                 reflogexpireUnreachable = 3 days

     The optional configuration variable gc.rerereresolved
     indicates how long records of conflicted merge you resolved
     earlier are kept. This defaults to 60 days.

     The optional configuration variable gc.rerereunresolved
     indicates how long records of conflicted merge you have not
     resolved are kept. This defaults to 15 days.

Git          Last change: 02/22/2012                    2

Git Manual                                              GIT-GC(1)

     The optional configuration variable gc.packrefs determines
     if git gc runs git pack-refs. This can be set to "notbare"
     to enable it within all non-bare repos or it can be set to a
     boolean value. This defaults to true.

     The optional configuration variable gc.aggressiveWindow
     controls how much time is spent optimizing the delta
     compression of the objects in the repository when the
     --aggressive option is specified. The larger the value, the
     more time is spent optimizing the delta compression. See the
     documentation for the --window' option in git-repack(1) for
     more details. This defaults to 250.

     The optional configuration variable gc.pruneExpire controls
     how old the unreferenced loose objects have to be before
     they are pruned. The default is "2 weeks ago".

     See attributes(5) for descriptions of the following

     |Availability   | developer/versioning/git |
     |Stability      | Uncommitted              |
     git gc tries very hard to be safe about the garbage it
     collects. In particular, it will keep not only objects
     referenced by your current set of branches and tags, but
     also objects referenced by the index, remote-tracking
     branches, refs saved by git filter-branch in refs/original/,
     or reflogs (which may reference commits in branches that
     were later amended or rewound).

     If you are expecting some objects to be collected and they
     aren't, check all of those locations and decide whether it
     makes sense in your case to remove those references.

     The git gc --auto command will run the pre-auto-gc hook. See
     githooks(4) for more information.

     git-prune(1) git-reflog(1) git-repack(1) git-rerere(1)

     Part of the git(1) suite

Git          Last change: 02/22/2012                    3

Git Manual                                              GIT-GC(1)

     This software was built from source available at  The original
     community source was downloaded from  http://git-

     Further information about this software can be found on the
     open source community website at

Git          Last change: 02/22/2012                    4