GIT-COMMIT-GRAPH(1)
okay so this is GIT-COMMIT-GRAPH(1) from the Git manual β the commit-graph page, bestie β and we're about to make it make sense π every flag, every default, every warning is staying, no cap. keep your hands inside the ride, the vibes are immaculate β¨
πΈ NAME πΈ
git-commit-graph β write and verify Git commit-graph files. that's the whole assignment: you're either writing one or verifying one, and honestly? iconic π
β¨ SYNOPSIS β¨
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 π
so the job is literally to manage the serialized commit-graph file. that's it, that's the description, and it's giving "small but powerful" π
π OPTIONS π
--object-dirβ use the given directory for the location of packfiles and commit-graph file. this parameter exists so you can specify the location of an alternate that only has the objects directory, not a full.gitdirectory. the commit-graph file is expected to be in the<dir>/infodirectory, 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. π--progress,--no-progressβ turn progress on/off explicitly. if neither is specified, progress is shown if standard error is connected to a terminal. β¨
π¦ COMMANDS π¦
π write
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. so it's like "ok bestie I hear you, but no" π
- with the
--stdin-packsoption, generate the new commit graph by walking objects only in the specified pack-indexes. (cannot be combined with--stdin-commitsor--reachable.) - with the
--stdin-commitsoption, 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-packsor--reachable.) - with the
--reachableoption, generate the new commit graph by walking commits starting at all refs. (cannot be combined with--stdin-commitsor--stdin-packs.) - with the
--appendoption, include all commits that are present in the existing commit-graph file. - with the
--changed-pathsoption, 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 withgit log -- <path>. if this option is given, future commit-graph writes will automatically assume that this option was intended. use--no-changed-pathsto stop storing this data.--changed-pathsis implied by configcommitGraph.changedPaths=true. π₯ - with the
--max-new-filters=<n>option, generate at most n new Bloom filters (if--changed-pathsis 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 thecommitGraph.maxNewFiltersconfiguration. - 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-mergeis specified, a merge is never performed, and the remaining options are ignored.--split=replaceoverwrites the existing chain with a new one. a bare--splitdefers 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 tip. - 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.
- if
π verify
read the commit-graph file and verify its contents against the object database. used to check for corrupted data. it's the vibe check for your graph, bestie π
with the --shallow option, only check the tip commit-graph file in a chain of split commit-graphs.
π EXAMPLES π
- write a commit-graph file for the packed commits in your local
.gitdirectory.
$ 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
HEAD.
$ git rev-parse HEAD | git commit-graph write --stdin-commits --append
π CAVEATS π
the existence of replace objects or commit grafts turns off reading or writing to the commit-graph. see git-replace(1). like, it's a whole thing β don't come for me, that's just how it is π
π§ CONFIGURATION π§
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, so you know it's legit π«Ά
commitGraph.generationVersion
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.
commitGraph.maxNewFilters
specifies the default value for the --max-new-filters option of git commit-graph write (c.f., git-commit-graph(1)).
commitGraph.changedPaths
if true, then git commit-graph write will compute and write changed-path Bloom filters by default, equivalent to passing --changed-paths. if false or unset, changed-paths Bloom filters will be written during git commit-graph write only if the filters already exist in the current commit-graph file. this matches the default behavior of git commit-graph write without any --[no-]changed-paths option. to rewrite a commit-graph file without any filters, use the --no-changed-paths option. command-line option --[no-]changed-paths always takes precedence over this configuration. defaults to unset. π
commitGraph.readChangedPaths
deprecated. equivalent to commitGraph.changedPathsVersion=-1 if true, and commitGraph.changedPathsVersion=0 if false. (if commitGraph.changedPathVersion is also set, commitGraph.changedPathsVersion takes precedence.)
commitGraph.changedPathsVersion
specifies the version of the changed-path Bloom filters that Git will read and write. may be -1, 0, 1, or 2. note that values greater than 1 may be incompatible with older versions of Git which do not yet understand those versions. use caution when operating in a mixed-version environment. π
defaults to -1.
if -1, Git will use the version of the changed-path Bloom filters in the repository, defaulting to 1 if there are none.
if 0, Git will not read any Bloom filters, and will write version 1 Bloom filters when instructed to write.
if 1, Git will only read version 1 Bloom filters, and will write version 1 Bloom filters.
if 2, Git will only read version 2 Bloom filters, and will write version 2 Bloom filters.
see git-commit-graph(1) for more information.
π FILE FORMAT π
see gitformat-commit-graph(5). that's the whole section, bestie β it's a short king π
β GIT β
part of the git(1) suite. obviously. π
and that's the whole page, bestie π this was Git 2.56.0, dated 2026-09-27 β the manual page is GIT-COMMIT-GRAPH(1), and now you know every last detail. go write (or verify) some commit-graphs, no cap π«Άβ¨
π¦ where this page comes from
- arch rolling: git 2.56.0-1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms