git-commit-graph(1) — Linux manual page


GIT-COMMIT-GRAPH(1)            Git Manual            GIT-COMMIT-GRAPH(1)

NAME         top

       git-commit-graph - Write and verify Git commit-graph files

SYNOPSIS         top

       git commit-graph verify [--object-dir <dir>] [--shallow] [--[no-]progress]
       git commit-graph write [--object-dir <dir>] [--append]
                               [--split[=<strategy>]] [--reachable | --stdin-packs | --stdin-commits]
                               [--changed-paths] [--[no-]max-new-filters <n>] [--[no-]progress]
                               <split options>

DESCRIPTION         top

       Manage the serialized commit-graph file.

OPTIONS         top

           Use given directory for the location of packfiles and
           commit-graph file. This parameter exists to specify the
           location of an alternate that only has the objects directory,
           not a full .git directory. The commit-graph file is expected
           to be in the <dir>/info directory and the packfiles are
           expected to be in <dir>/pack. If the directory could not be
           made into an absolute path, or does not match any known
           object directory, git commit-graph ...  will exit with
           non-zero status.

           Turn progress on/off explicitly. If neither is specified,
           progress is shown if standard error is connected to a

COMMANDS         top

           Write a commit-graph file based on the commits found in
           packfiles. If the config option core.commitGraph is disabled,
           then this command will output a warning, then return success
           without writing a commit-graph file.

           With the --stdin-packs option, generate the new commit graph
           by walking objects only in the specified pack-indexes.
           (Cannot be combined with --stdin-commits or --reachable.)

           With the --stdin-commits option, generate the new commit
           graph by walking commits starting at the commits specified in
           stdin as a list of OIDs in hex, one OID per line. OIDs that
           resolve to non-commits (either directly, or by peeling tags)
           are silently ignored. OIDs that are malformed, or do not
           exist generate an error. (Cannot be combined with
           --stdin-packs or --reachable.)

           With the --reachable option, generate the new commit graph by
           walking commits starting at all refs. (Cannot be combined
           with --stdin-commits or --stdin-packs.)

           With the --append option, include all commits that are
           present in the existing commit-graph file.

           With the --changed-paths option, compute and write
           information about the paths changed between a commit and its
           first parent. This operation can take a while on large
           repositories. It provides significant performance gains for
           getting history of a directory or a file with git log --
           <path>. If this option is given, future commit-graph writes
           will automatically assume that this option was intended. Use
           --no-changed-paths to stop storing this data.

           With the --max-new-filters=<n> option, generate at most n new
           Bloom filters (if --changed-paths is specified). If n is -1,
           no limit is enforced. Only commits present in the new layer
           count against this limit. To retroactively compute Bloom
           filters over earlier layers, it is advised to use
           --split=replace. Overrides the commitGraph.maxNewFilters

           With the --split[=<strategy>] option, write the commit-graph
           as a chain of multiple commit-graph files stored in
           <dir>/info/commit-graphs. Commit-graph layers are merged
           based on the strategy and other splitting options. The new
           commits not already in the commit-graph are added in a new
           "tip" file. This file is merged with the existing file if the
           following merge conditions are met:

           •   If --split=no-merge is specified, a merge is never
               performed, and the remaining options are ignored.
               --split=replace overwrites the existing chain with a new
               one. A bare --split defers to the remaining options.
               (Note that merging a chain of commit graphs replaces the
               existing chain with a length-1 chain where the first and
               only incremental holds the entire graph).

           •   If --size-multiple=<X> is not specified, let X equal 2.
               If the new tip file would have N commits and the previous
               tip has M commits and X times N is greater than M,
               instead merge the two files into a single file.

           •   If --max-commits=<M> is specified with M a positive
               integer, and the new tip file would have more than M
               commits, then instead merge the new tip with the previous

               Finally, if --expire-time=<datetime> is not specified,
               let datetime be the current time. After writing the split
               commit-graph, delete all unused commit-graph whose
               modified times are older than datetime.

           Read the commit-graph file and verify its contents against
           the object database. Used to check for corrupted data.

           With the --shallow option, only check the tip commit-graph
           file in a chain of split commit-graphs.

EXAMPLES         top

       •   Write a commit-graph file for the packed commits in your
           local .git directory.

               $ git commit-graph write

       •   Write a commit-graph file, extending the current commit-graph
           file using commits in <pack-index>.

               $ echo <pack-index> | git commit-graph write --stdin-packs

       •   Write a commit-graph file containing all reachable commits.

               $ git show-ref -s | git commit-graph write --stdin-commits

       •   Write a commit-graph file containing all commits in the
           current commit-graph file along with those reachable from

               $ git rev-parse HEAD | git commit-graph write --stdin-commits --append


       Everything below this line in this section is selectively
       included from the git-config(1) documentation. The content is the
       same as what’s found there:

           Specifies the type of generation number version to use when
           writing or reading the commit-graph file. If version 1 is
           specified, then the corrected commit dates will not be
           written or read. Defaults to 2.

           Specifies the default value for the --max-new-filters option
           of git commit-graph write (c.f., git-commit-graph(1)).

           If true, then git will use the changed-path Bloom filters in
           the commit-graph file (if it exists, and they are present).
           Defaults to true. See git-commit-graph(1) for more

FILE FORMAT         top

       see gitformat-commit-graph(5).

GIT         top

       Part of the git(1) suite

COLOPHON         top

       This page is part of the git (Git distributed version control
       system) project.  Information about the project can be found at
       ⟨⟩.  If you have a bug report for this manual
       page, see ⟨⟩.  This page was obtained
       from the project's upstream Git repository
       ⟨⟩ on 2023-12-22.  (At that time,
       the date of the most recent commit that was found in the
       repository was 2023-12-20.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there
       is a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to

Git         2023-12-20            GIT-COMMIT-GRAPH(1)

Pages that refer to this page: git(1)git-commit-graph(1)git-config(1)git-fsck(1)git-gc(1)