{"thread":{"id":"66410","subject":"[ANNOUNCE] Git v2.56.0","startedAt":"2026-09-28T17:20:13Z","lastAt":"2026-09-28T17:20:13Z","messageCount":1,"participants":["Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"553508","messageId":"xmqqpkxxmgxh.fsf@gitster.g","threadId":"66410","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.56.0","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2026-09-28T17:20:10Z","receivedAt":"2026-09-28T17:20:13Z","isPatch":false,"body":"The latest feature release Git v2.56.0 is now available at the\nusual places.  It is comprised of 748 non-merge commits since\nv2.55.0, contributed by 104 people, 39 of which are new faces [*].\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/\n\nThe following public repositories all have a copy of the 'v2.56.0'\ntag and the 'master' branch that the tag points at:\n\n  url = https://git.kernel.org/pub/scm/git/git\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://github.com/gitster/git\n\nNew contributors whose contributions weren't in v2.55.0 are as follows.\nWelcome to the Git development community!\n\n  Adrian Friedli, Alan Stokes, Aleksei Sviridkin, Antonio De\n  Stefani, basuradeluis, Brendan Jackman, Brigham Campbell, Chen\n  Linxuan, Colin Hinton, Daniel Pereira, Dominique Martinet, Éric\n  NICOLAS, Friel, Gatla Vishweshwar Reddy, Hardik Kumar, Henrique\n  Ferreiro, Ihar Hrachyshka, James Le Cuirot, Jamie Magee, Jinbao\n  Chen, Justin Lee, Kenneth Lorber, Lucas Zamboni Orioli, Lutz\n  Lengemann, Marcelo Machado Lage, Mike Gilbert, Nicolas Le Cam,\n  Nikolaus Schuetz, oxsignal, Shlok Kulshreshtha, Stéfan Driaan\n  Turvey, Swapnil Saste | INDIA, Ted Nyman, Thomas Bachem, Travor\n  Liu, Vincent Mailhol, Vinicius Lira de Freitas, and xuqing yang.\n\nReturning contributors who helped this release are as follows.\nThanks for your continued support.\n\n  Aindriú Mac Giolla Eoin, Alexander Shopov, Arkadii Yakovets,\n  Ayush Chandekar, Bagas Sanjaya, brian m. carlson, Calvin Wan,\n  Chandra Pratap, Christian Couder, David Lin, D. Ben Knoble,\n  Derrick Stolee, Elijah Newren, Emir SARI, Eric Ju, Harald\n  Nordgren, Jean-Noël Avila, Jeff King, Jerry Zhang, Jiang Xin,\n  Johannes Schindelin, Johannes Sixt, Jonathan Tan, Jörg Thalheim,\n  Junio C Hamano, Justin Tobler, Kaartic Sivaraam, Karthik Nayak,\n  Kate Golovanova, K Jayatheerth, Kristofer Karlsson, Kristoffer\n  Haugsbakk, lilydjwg, Lucas Seiki Oshiro, Mantas Mikulėnas,\n  Matt Hunter, Michael Montalbo, Mikel Forcada, Miklos Vajna,\n  Olamide Caleb Bello, Pablo Sabater, Patrick Steinhardt, Peter\n  Colberg, Peter Krefting, Philip Oakley, Phillip Wood, Randall\n  Becker, René Scharfe, Sahitya Chandra, Shardul Natu, Siddharth\n  Asthana, Siddharth Shrimali, Stefan Haller, SZEDER Gábor,\n  Tamir Duberstein, Taylor Blau, Tian Yuchen, Todd Zullinger,\n  Toon Claes, Tuomas Ahola, Uwe Kleine-König, Weijie Yuan,\n  Wolfgang Faust, Yannik Tausch, and Yoichi NAKAYAMA.\n\n[*] We are counting not just the authorship contribution but issue\n    reporting, mentoring, helping and reviewing that are recorded in\n    the commit trailers.\n\n----------------------------------------------------------------\n\nGit v2.56 Release Notes\n=======================\n\nUI, Workflows & Features\n------------------------\n\n * Advice shown by \"git status\" when the local branch is behind or has\n   diverged from its push branch has been updated to suggest \"git pull\n   <remote> <branch>\".\n\n * The handling of promisor-remote protocol capability has been updated\n   to allow the other side to add to the list of promisor remotes via the\n   'promisor.acceptFromServerURL' configuration variable.\n\n * The 'ort' merge backend has been hardened against corrupt trees by\n   ensuring it aborts under appropriate error conditions.\n\n * The `fetch.followRemoteHEAD` configuration variable has been added to\n   provide a default for the per-remote `remote.<name>.followRemoteHEAD`\n   setting.\n\n * \"git log --follow\" has been updated to better handle non-linear\n   history, in which the path being tracked gets renamed differently in\n   multiple history lines.\n\n * The \"git repo info\" command has been taught new keys to output both\n   absolute and relative paths for \"gitdir\" and \"commondir\", supported by\n   a new path-formatting helper extracted from \"git rev-parse\".\n\n * When 'git push origin/main' or 'git branch origin main' is run, the\n   command is now recognized as a potential typo, and advice has been\n   added to offer a typo fix.\n\n * The 'git refs' toolbox has been extended with new 'create', 'delete',\n   'update', and 'rename' subcommands to create, delete, update, and\n   rename references, respectively.\n\n * The experimental 'git history' command has been taught a new 'drop'\n   subcommand to remove a commit, with its descendants replayed onto its\n   parent.\n\n * The alignment of commit object name abbreviations in 'git blame'\n   output has been optimized to reserve a column for marks (caret,\n   question mark, or asterisk) only when such marks are actually shown.\n\n * Option parsing with 'git rev-parse --parseopt' and in most 'git'\n   subcommands has been updated to exit with 0 (instead of 129) when the\n   help option ('-h' or '--help') is requested directly by the user,\n   aligning with standard Unix convention.\n\n * The '[includeIf \"condition\"]' conditional inclusion facility for\n   configuration files has been taught to use the location of the\n   worktree in its condition.\n\n * The usage string and SYNOPSIS for 'git fast-export' have been\n   standardized to make them consistent with each other and with other\n   commands.\n\n * 'git log --graph' has been modified to visually distinguish parentless\n   'root' commits (and commits that become roots due to history\n   simplification) by indenting them, preventing them from appearing\n   falsely related to unrelated commits rendered immediately above them.\n\n * Userdiff patterns for Swift have been added, with support for\n   Swift-specific constructs such as attributes, modifiers, failable\n   initializers, and generics.\n\n * Configuration file locking has been updated to retry for a short\n   period, avoiding failures when multiple processes attempt to update\n   the configuration simultaneously.\n\n * The 'remote-object-info' command has been added to 'git cat-file\n   --batch-command', allowing clients to request object metadata\n   (currently size) from a remote server via protocol v2 without\n   downloading the entire object.  Format placeholders are dynamically\n   filtered on the client based on server-advertised capabilities,\n   returning empty strings for inapplicable or unsupported fields.\n\n * 'git branch -d' has been taught to report when a branch cannot be\n   deleted because it is being used in an active bisect run.\n\n * 'git mv' has been updated to check for a missing destination\n   leading directory during the checking phase, allowing 'git mv -n'\n   to report the failure.  The error message when the rename(2)\n   syscall fails has also been improved to name both the source and\n   the destination.\n\n * 'git add' has been taught a new '--resolved' option to stage\n   conflict-resolved paths, while leaving unrelated local changes\n   unstaged.  It scans the unmerged paths for leftover conflict\n   markers and aborts if any are found.\n\n * The known limitations of the ref format migration in 'git refs' have\n   been moved to be displayed as a warning admonition directly under the\n   description of the 'migrate' subcommand, improving visibility.  A\n   reference to 'git-maintenance' has also been corrected to use the\n   'linkgit' macro.\n\n * The 'git bisect' command has been taught a\n   '--reset-when-found[=<where>]' option that tells the command to\n   automatically run 'git bisect reset' to jump back to the original\n   state or to the found culprit.\n\n * The 'git branch' command has been taught the '--delete-merged' option\n   to remove local branches that are already merged into their tracked\n   remote-tracking branches.\n\n * The 'remote-object-info' command for 'git cat-file --batch-command'\n   has been extended to support the '%(objecttype)' placeholder.\n\n * The usage string of 'git fast-import' has been updated to use the\n   parse_options() API for displaying help, and its SYNOPSIS in the\n   documentation has been standardized to match.\n\n * The error message given by 'git send-email' when a message file is\n   missing a 'Subject:' header has been clarified, and the error string\n   is now terminated with a newline so that Perl avoids appending its\n   internal source location data.\n\n * The '--shallow-file' option of 'git' command requires a value, but the\n   code did not check the presence of a value and instead segfaulted\n   without one, which has been corrected.\n\n * 'git repack' has been taught '--drop-filtered' to delete local\n   promisor blobs exceeding a limit (currently 'blob:limit=') in partial\n   clones, reclaiming space.  Guards prevent running during other\n   operations or if referenced by the index.\n\n * The documentation for 'git format-rev' has been updated to use the\n   [synopsis] block definition on code blocks to properly highlight\n   placeholders, and a quoting inconsistency in the running text has\n   been fixed.\n\n * The DWIM logic in 'git worktree add' sometimes tried to infer a\n   remote-tracking branch when an explicit '-b' or '-B' option was\n   given to create a new branch, causing the explicit branch name to\n   be ignored, which has been corrected.\n\n * The command line completion (in contrib/) has been taught to handle\n   the experimental 'git history' command.\n\n * 'git checkout' and 'git worktree add' makes guesses based on a name\n   of a remote-tracking branch, but does not give an error when such a\n   remote-tracking branch cannot be uniquely identified, which has\n   been corrected.\n\n * The 'git replay' command has been taught the '--linearize' option to\n   drop merge commits and linearize the replayed history, mimicking 'git\n   rebase --no-rebase-merges'.\n\n * The documentation for 'git cherry-pick' has been updated to clarify\n   that the '--no-commit' option intentionally skips setting the\n   'CHERRY_PICK_HEAD' ref.  A test has also been added to ensure this\n   behavior holds even when the operation stops for conflicts.\n\n * The 'git imap-send' command has been taught to take the '--draft'\n   option to mark uploaded messages as drafts, which helps some email\n   clients render them properly for editing and sending.\n\n * The git rev-list command has been augmented with a '--missing-only'\n   option that filters the output to only show missing objects,\n   stripping the leading '?' character and suppressing present objects,\n   which is useful when used in combination with '--missing=print' or\n   '--missing=print-info'.\n\n\nPerformance, Internal Implementation, Development Support etc.\n--------------------------------------------------------------\n\n * The refactoring of 'setup.c' has been continued to drop remaining\n   global state (`git_work_tree_cfg`, `is_bare_repository_cfg`), updating\n   `is_bare_repository()` to no longer implicitly rely on\n   `the_repository`.\n\n * Project-specific configuration for b4 has been introduced, and the\n   documentation has been updated to recommend using it as a\n   streamlined method for submitting patches.\n\n * The default format path of git cat-file --batch has been optimized\n   to use strbuf_add_oid_hex() and strbuf_add_uint() instead of\n   strbuf_addf(), yielding a noticeable speedup.\n\n * Commands that list branches and tags (like git branch and git tag)\n   have been optimized to pass the namespace prefix when initializing\n   their ref iterator, avoiding a loose-ref scaling regression in\n   repositories with many unrelated loose references.\n\n * The packed object source has been refactored into a proper struct\n   odb_source.\n\n * The global configuration variables protect_hfs and protect_ntfs have\n   been migrated into struct repo_config_values to tie them to\n   per-repository configuration state.\n\n * The trailer sections in SubmittingPatches have been updated to\n   encourage use of standard trailers.\n\n * The documentation in SubmittingPatches has been updated to clarify how\n   patch contributors should respond to design and viability critiques,\n   and how the resolution of such critiques should be recorded in the\n   final commit messages.\n\n * The pack-objects command has been updated to support reachability\n   bitmaps and delta-islands concurrently with the `--path-walk` option,\n   allowing faster packaging by falling back to path-walk when bitmaps\n   cannot fully satisfy the request.\n\n * Documentation on community contribution guidelines has been updated to\n   encourage replying to review comments before rerolling, and to advise\n   a default limit of at most one reroll per day to give reviewers across\n   different time zones enough time to participate.\n\n * The lazy priority queue optimization pattern (deferring actual removal\n   in 'prio_queue_get()' to allow get+put fusion) has been folded\n   directly into 'prio_queue' itself, speeding up commit traversal\n   workflows and simplifying callers.\n\n * The 'reprepare()' callback for object database sources has been\n   generalized into a 'prepare()' callback with an optional flush cache\n   flag, and a new 'odb_prepare()' wrapper has been introduced to allow\n   pre-opening object database sources.\n\n * The 'whence' field in 'struct object_info' has been removed.  The\n   backend-specific object information retrieval has been refactored into\n   an opt-in 'struct object_info_source' structure.\n\n * A racy build failure under Meson has been corrected by ensuring that\n   the generated header file 'hook-list.h' is built before compiling\n   files in 'builtin_sources' that depend on it.\n\n * The repository discovery and repository configuration phases, which\n   were previously intertwined in 'setup.c', have been split.  Repository\n   discovery has been updated to populate a 'struct repo_discovery'\n   without modifying the repository state, which is then taken by\n   repository configuration to initialize the repository, paving the way\n   for clean unification of repository configuration.\n\n * The 'SubmittingPatches' document has been updated to explicitly\n   describe the expectation for contributors to retract or abandon their\n   patch series when they are no longer pursuing it.\n\n * The contributor guide has been updated to advise new contributors to\n   trim irrelevant quoted text when replying to review comments, matching\n   the existing advice given to reviewers.\n\n * The build system has been updated to support building universal macOS\n   binaries when 'Rust' is enabled, by compiling separate static archives\n   for each target triple listed in 'RUST_TARGETS' and combining them\n   using the macOS 'lipo' tool.  The 'git-credential-osxkeychain' helper\n   has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled.\n\n * The test suite has been updated to use the 'test_grep' helper instead\n   of bare 'grep' for test assertions, allowing file contents to be\n   printed on failure for easier debugging.  A new 'greplint' linter has\n   been introduced to detect and prevent new bare 'grep' assertions from\n   being added to the test suite.\n\n * The pipelines in 't1410-reflog.sh' have been replaced with the\n   'test_stdout_line_count' helper to avoid suppressing the exit code of\n   'git' commands, ensuring failures are not hidden from the test suite.\n\n * The cache-scanning loop in 'next_cache_entry()' has been optimized\n   to avoid rescanning already-unpacked index entries, preventing a\n   quadratic performance slow-down when diffing the working tree\n   against a commit with a pathspec matching early index entries.\n\n * The global configuration variable 'ignore_case' (representing the\n   'core.ignorecase' configuration) has been migrated into 'struct\n   repo_config_values' to tie it to a specific repository instance.\n\n * The performance of ref updates and reads using the 'reftable' backend\n   in the presence of many deletion tombstone records has been optimized\n   by removing the tombstone suppression flag from the merged iterator\n   and instead skipping tombstones at higher-level call sites where\n   iteration bounds are known.\n\n * Various code paths have been hardened against potential NULL-pointer\n   dereferences and invalid file descriptor accesses flagged by\n   Coverity.\n\n * The in-tree 'b4' cover letter template has been updated to include the\n   'change-id' trailer, ensuring that sent tags generated by 'b4' contain\n   the required tracking information for subsequent runs.\n\n * 'git receive-pack' has been refactored to use ODB transaction\n   interfaces instead of directly managing 'tmp_objdir' for staging\n   incoming objects, bringing it closer to being ODB backend agnostic.\n\n * The test script 't/t9811-git-p4-label-import.sh' has been\n   modernized to use 'test_path_is_file' and 'test_path_is_missing'\n   instead of raw 'test -f' and '! test -f' calls.\n\n * A redundant strbuf_reset() call in the 'HAVE_GETDELIM' path of\n   strbuf_getwholeline() has been removed, as getdelim() overwrites the\n   buffer and the length is updated afterward.\n\n * The object database enumeration interface odb_for_each_object() has\n   been taught to accept object filters, allowing the underlying backends\n   to optimize the traversal by using reachability bitmaps when\n   available.  'git cat-file --batch-all-objects' has been updated to use\n   this generic interface, simplifying its code and avoiding direct\n   access to ODB backend internals.\n\n * The test script 't/t1100-commit-tree-options.sh' has been modernized\n   by converting test cases to the modern style (using single quotes and\n   tab indentation) and moving the creation of the expected file inside\n   the setup test so it runs under the protection of the test harness.\n\n * The test script 't/t7614-merge-signoff.sh' has been updated to avoid\n   suppressing the exit code of 'git' commands in a pipe.\n\n * The 'git rev-list --no-walk' command has been corrected to restore\n   pathspec filtering, which was lost when the streaming walk was\n   refactored.\n\n * The ref subsystem and the worktree API have been refactored to pass a\n   repository pointer down the call chain, allowing them to drop\n   references to the global 'the_repository' variable.  As part of this,\n   the handling of the 'core.packedRefsTimeout' configuration has been\n   moved into the per-repository ref store structure.\n\n * 'git branch --contains' and 'git for-each-ref --contains' have been\n   optimized to use the memoized commit traversal previously used only by\n   'git tag --contains', significantly speeding up connectivity checks\n   across many candidate refs with shared history.\n\n * The passing of push destination specifications in the 'remote-curl'\n   helper has been simplified by removing the explicit 'count' parameter\n   and relying on the NULL-termination of the array.\n\n * The dependency on the global 'the_repository' variable in the\n   'refspec.c' API has been removed by passing the hash algorithm\n   explicitly to refspec-parsing functions and storing it in 'struct\n   refspec'.\n\n * The enumeration of untracked and ignored files in 'git status' has\n   been optimized by avoiding quadratic complexity when inserting into\n   string lists, reducing the construction cost from O(n^2) to O(n log\n   n).\n\n * The copy_file() and copy_file_with_time() functions have been\n   refactored to take a repository parameter, allowing the removal of the\n   implicit dependency on the global 'the_repository' variable in\n   'copy.c'.\n\n * The tempfile and lockfile APIs have been refactored to stop depending\n   on the 'the_repository' global variable, and their callers have been\n   updated to use the repository-aware variants.\n\n * The 'trust_executable_bit' (coming from the 'core.filemode'\n   configuration) has been migrated into 'struct repo_config_values' to\n   tie it to a specific repository instance.\n\n * The 'excludes_file' and various other global configuration variables\n   (including 'editor_program', 'pager_program', 'askpass_program', and\n   'push_default') have been migrated into the per-repository structure.\n\n * The 'git stash push' command has been optimized to avoid unnecessary\n   sparse index expansion when pathspecs are wholly inside the\n   sparse-checkout cone.  Also, a potential out-of-bounds read in the\n   sparse-index expansion check helper pathspec_needs_expanded_index()\n   has been fixed by consistently using the parsed, prefixed path.\n\n * The logic to write loose objects has been refactored and moved from\n   'object-file.c' to the loose backend source file 'odb/source-loose.c',\n   making the loose backend more self-contained.  This is achieved by\n   first refactoring force_object_loose() to use generic ODB write\n   interfaces instead of loose-backend internals.\n\n * Object database housekeeping in 'git gc' and 'git maintenance' has\n   been refactored to be pluggable.  The files-backend-specific logic,\n   including incremental and geometric repacking as well as object\n   pruning, has been moved out of the command implementation and into the\n   files object database source, enabling future alternative object\n   database backends to implement their own housekeeping services.\n\n * The image version used by the static-analysis CI job has been bumped\n   to ubuntu-latest (Ubuntu 24.04), which brings in a newer Coccinelle\n   version that resolves a severe performance regression.  A false\n   positive warning from the 'CHECK_ASSERTION_SIDE_EFFECTS' build with\n   GCC 15 in the Bloom filter code has also been silenced to facilitate\n   the image upgrade.\n\n * The alias tests in 't/t0014-alias.sh' have been updated to dynamically\n   query the list of deprecated commands using 'git\n   --list-cmds=deprecated' to avoid test failures when running with\n   'WITH_BREAKING_CHANGES' in a build directory that contains stale\n   executables of formerly deprecated commands.\n\n * The code path that deals with relative paths in the diff-lib has\n   been cleaned up.\n\n * The get_commit_action() function has been refactored to be a pure\n   predicate by moving the side-effecting line-level log range folding to\n   simplify_commit().  This ensures that evaluating a commit's action\n   before the walk reaches it does not prematurely mutate its tracked\n   line ranges, making it safer for potential lookahead evaluations.\n\n * Synopsis and options in the documentation for 'git format-patch',\n   'git imap-send', 'git send-email', and 'git request-pull' have been\n   updated to the modern style.\n\n * A new test helper commit_body() has been introduced to print the\n   message body of a commit, and various tests have been updated to use\n   it instead of spelling out the command pipeline manually and losing\n   the exit status of the 'git cat-file' command on the upstream of the\n   pipe.\n\n * Tests for 'git merge-base --is-ancestor' have been added to cover\n   exit codes (0 for success, 1 for non-ancestor, 128 for errors) and\n   to ensure it cannot be combined with '--all'.\n\n * The 'TRACE2_ANCESTRY' prerequisite in the 't0213' test script has been\n   refined to avoid failures under user-mode emulation by verifying that\n   the ancestry collector reports the expected process names rather than\n   the emulator binary name.\n\n * Concurrent downloads of packfiles via packfile URIs and dumb HTTP are\n   safer by avoiding concurrent appends to the staging file.  Opening in\n   read-write mode with separate file offsets prevents corruption and\n   preserves resumability.  'fetch-pack' now tolerates pre-existing\n   '.keep' files.\n\n * The 'ssh-agent' tests in 't7528' have been fixed to work when the\n   user's login shell is csh-like, by explicitly passing '-s' to\n   'ssh-agent' to force Bourne shell syntax.\n\n * A compatibility wrapper for writev(3p) has been reintroduced,\n   including fixes for CMake build and 'MAX_IO_SIZE' limits on NonStop.\n   Calls to write(3p) in send_sideband() and cat_blob() have been\n   refactored to use writev(3p) wrappers to reduce syscall overhead.\n\n * The creation of the on-disk data structures for the object database\n   has been made pluggable, allowing future backends to customize their\n   setup.  As part of this, the initialization of the object database\n   has been deferred, and the loading of the loose-object map has been\n   detangled from repository initialization.\n\n * The 'struct odb_read_stream' and 'struct odb_write_stream'\n   structures have been consolidated into a single unified 'struct\n   odb_stream' structure, simplifying object database streaming APIs\n   and enabling streaming of arbitrary object types.\n\n * The sequencer has been updated to release the object database before\n   spawning 'git commit'.  This prevents open file handles from\n   blocking auto-maintenance tasks, such as repacking, on systems like\n   Windows where open files cannot be easily unlinked.\n\n * The merge-base computation has been optimized by stopping the walk\n   early when one side's exclusive commits in the queue are exhausted,\n   yielding significant speedups for queries with one-sided histories.\n\n * A handful of code paths have been corrected to check return values\n   from functions like curl_easy_duphandle(), deflateInit(), lseek(),\n   dup(), and strbuf_getline_lf(), resolving several Coverity warnings\n   about unchecked returns.\n\n * The setting of a now-unused member '.pretty_given' in the sequencer\n   machinery has been removed.\n\n * The performance of adding numerous new packfiles has been improved\n   by introducing a fast path for known-new packfiles to skip an\n   unnecessary traversal in packfile_list_append(), avoiding a\n   quadratic complexity regression on load.\n\n * The unused name parameter in 'struct chdir_notify_entry' has been\n   removed from chdir_notify_register(), chdir_notify_unregister(), and\n   related callback signatures across several subsystems, simplifying the\n   API now that trace output no longer uses it.\n\n * A heap-use-after-free bug in the object name parsing code when\n   reporting failures with a relative path to a sparse directory has\n   been corrected.\n\n * The object database (odb) API has been refactored to distinguish\n   between missing objects and corrupt ones by returning more\n   descriptive error statuses.  Both the packed and loose backends now\n   faithfully propagate error details using a generic strbuf error\n   mechanism, removing backend-specific leakage from central lookup\n   paths.\n\n * The object database layer has been simplified by eagerly loading\n   alternate object directories upon initialization, instead of\n   deferring it to the first object lookup.  This eliminates the need\n   for scattered lazy-loading calls throughout the codebase and paves\n   the way for integrating alternates with the pluggable backends.\n\n * The threshold for geometric repacking to trigger based on loose\n   object count has been adjusted to match that of 'git gc --auto',\n   preventing over-aggressive repacking during concurrent writes.\n\n * The 'git receive-pack' command has been updated to use a new ODB\n   transaction interface for writing incoming packfiles, making it more\n   backend-agnostic.\n\n * The mechanism to generate a packfile corresponding to the result of\n   a fetch/push has been made pluggable through a set of object\n   database callback functions, removing hardcoded references to\n   'pack-objects' and enabling alternative ODBs to serve packfiles\n   themselves.\n\n * The pack-objects command has been updated to record the total bytes\n   written to pack files in trace2 output, allowing performance\n   analysis of different compression settings by comparing the\n   resulting pack sizes.\n\n * The global variable 'fetch_if_missing' has been moved to a member in\n   'struct repository', continuing the libification process and\n   allowing per-repository control (such as for submodules).\n\n * The reftable code has been optimized to avoid an unnecessary\n   stat/reload of the stack when an addition already holds the\n   list_file lock, reducing the number of newfstatat syscalls from\n   linear to constant when writing refs.\n\n * The application of the edited patch in 'git add -e' has been\n   refactored to use the internal apply API directly, avoiding the need\n   to spawn a 'git apply' subprocess.\n\n * The memory ownership of argv elements passed to the revision\n   machinery has been made more robust by keeping logically \"freed\"\n   elements alive until the rev_info struct is released, preventing\n   use-after-free bugs when options store references to them.\n\n * The object lookup machinery has been taught to gracefully recover\n   when a multi-pack-index points to an owning pack that was removed\n   during a concurrent geometric repack, and 'git replay' has been\n   fixed to not segfault when reading such missing objects.\n\n * A collection of patches from Git for Windows has been upstreamed,\n   mostly focusing on simplifying and robustifying build configurations\n   for MinGW/MSYS2, dropping obsolete compatibility options, and allowing\n   the main 'git.exe' to be used directly without the extra wrapper\n   process on Windows.\n\n * The process of downloading packfile URIs in protocol v2 has been\n   instrumented with a Trace2 region.  This visibility allows tracking\n   the cumulative time spent downloading external packs and the number\n   of advertised URIs without emitting a separate event per pack.\n\n * CGI helper scripts used by HTTP-related test scripts have been updated\n   to use atomic filesystem operations, preventing race conditions when\n   Apache handles concurrent requests.\n\n * \"git maintenance\" triggered \"rerere gc\" in unappropriate times and\n   interfered with \"git rebase\" etc. too much.  The conditions \"rerere\n   gc\" gets triggered have been tweaked.\n\n * Windows build switches from MINGW64 to URCR64 runtime starting Git\n   2.56.0; switch the cmake based build at the same time.\n\n * The mechanism to register in-memory alternate object sources has\n   been removed, as submodule object databases are now accessed\n   natively via their own repository structures.  This simplifies\n   object database management and prepares the codebase for migrating\n   alternate tracking into the files backend.\n\n * The consistency checks for the object database (fsck) have been\n   decoupled from the generic builtin implementation and moved into the\n   backend-specific object source layers, making them pluggable for\n   different object storage formats.\n\n * When cross-compiling with Cargo, the output artifact is placed in a\n   target-specific subdirectory, which causes the build system to fail\n   to locate it.  The build system has been updated to respect the\n   'CARGO_BUILD_TARGET' environment variable.\n\n\nFixes since v2.55\n-----------------\n\n * A regression in the error diagnosis code for invalid .git files has\n   been fixed, avoiding a potential NULL-pointer crash when reporting\n   that a .git file does not point to a valid repository.\n   (merge 54a441bcea jk/setup-gitfile-diag-fix later to maint).\n\n * Support for hashing loose or packed objects larger than 4GB on Windows\n   and other LLP64 platforms has been improved by converting object header\n   buffers and data-handling functions from 'unsigned long' to 'size_t'.\n   (merge d99e13d0be po/hash-object-size-t later to maint).\n\n * The display of the rebase todo list in \"git status\" has been\n   improved to correctly abbreviate object IDs for more commands and\n   avoid misinterpreting refs as object IDs.\n   (merge 6f34e5f9e3 pw/status-rebase-todo later to maint).\n\n * Reference backend configuration has been updated to load lazily to\n   avoid recursive calls during repository initialization when 'onbranch'\n   configuration conditions are evaluated. This has also fixed a memory\n   leak and allowed the unused `chdir_notify_reparent()` machinery to be\n   dropped.\n   (merge d6522d01df ps/refs-onbranch-fixes later to maint).\n\n * The connectivity check has been refactored to search for promisor\n   objects in a generic way using the object database interface,\n   rather than iterating packfiles directly. This allows connectivity\n   checks to work properly in repositories that do not use packfiles.\n   (merge 66ee9cb930 ps/connected-generic-promisor-checks later to maint).\n\n * A test checking interactions between git rebase --quit and\n   autostash in t3420-rebase-autostash.sh has been corrected to use\n   test_path_is_missing instead of ! grep on a file that shouldn't\n   exist in the conflicted state.\n   (merge eaad121fef sg/t3420-do-not-grep-in-missing-file later to maint).\n\n * The GPG and SSH signature parsing code has been corrected to strip\n   carriage return characters only when they immediately precede line\n   feeds, instead of unconditionally stripping all carriage returns.\n   (merge 5dea8b690b ad/gpg-strip-cr-before-lf later to maint).\n\n * A memory leak in the 'reftable_writer_new()' initialization function\n   has been fixed by delaying the allocation of 'struct reftable_writer'\n   until after input options are validated.\n   (merge c6fb3b9c3e jk/reftable-leakfix later to maint).\n\n * A memory leak in the '--base' handling of 'git format-patch' has been\n   plugged, and the leak reporting of the test suite when running under a\n   TAP harness has been improved.\n   (merge 973a0373ff jk/format-patch-leakfix later to maint).\n\n * A write file stream resource leak has been fixed as part of a code\n   cleanup.\n   (merge ebb4d2ffa3 jc/history-message-prep-fix later to maint).\n\n * Various memory leaks in the Bloom-filter code paths that are exposed\n   when running tests with the 'GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1'\n   environment variable have been plugged.\n   (merge 459088ec2e jk/bloom-leak-fixes later to maint).\n\n * The wincred credential helper has been updated to avoid memory\n   corruption when erasing credentials and to prevent silent\n   credential loss when storing OAuth tokens, by correcting buffer\n   allocations and arguments passed to safe-CRT APIs.\n   (merge f635ab9ab4 js/wincred-fixes later to maint).\n\n * Various code paths that initialize a cryptographic hash context but\n   bail out or finish without calling 'git_hash_final()' have been taught\n   to call 'git_hash_discard()' to release allocated resources, fixing\n   memory leaks when Git is built with non-default backends like\n   'OpenSSL' or 'libgcrypt'.\n   (merge 600588d2aa jk/hash-algo-leak-fixes later to maint).\n\n * Various resource leaks, invalid file descriptor closures, and process\n   handle ownership issues flagged by Coverity have been fixed.\n   (merge 9184231173 js/coverity-fixes later to maint).\n\n * Dockerized CI jobs running in private GitHub repositories have been\n   adjusted to use explicit process and file limits, preventing resource\n   exhaustion errors on private runners.\n   (merge bad766fbac js/ci-dockerized-pid-limit later to maint).\n\n * Various test scripts have been updated to clean up large temporary\n   files and repositories, reducing peak disk usage during testing.\n   Also, expensive tests have been disabled on platforms that lack\n   sufficient resources (like 32-bit platforms and Windows CI runners),\n   and the long test suite has been enabled in GitLab CI.\n   (merge 84248444ad ps/t-fixes-for-git-test-long later to maint).\n\n * The UTF-8 precomposition wrapper on macOS has been updated to use a\n   flexible array member to represent the name of a directory entry,\n   preventing fortified libc checks from failing when the name is\n   reallocated to be larger than 'NAME_MAX' bytes.\n   (merge 1eb281159f ih/precompose-flex-array later to maint).\n\n * The 'git_hash_*()' wrappers have been updated to be used consistently\n   across the codebase instead of direct calls to members of 'struct\n   git_hash_algo', and 'git_hash_discard()' has been made idempotent to\n   simplify cleanups.\n   (merge 9e396aa553 jk/git-hash-cleanups later to maint).\n\n * The sideband demultiplexer has been updated to recognize ANSI SGR\n   escape sequences that use colon-separated subfields (e.g., for\n   256-color or true-color codes).\n   (merge 3792b2aea4 mm/sideband-ansi-sgr-colon-fix later to maint).\n\n * The 'reftable' code has been hardened against corrupted tables by\n   fixing out-of-bounds writes, out-of-bounds reads, and abort calls\n   during parsing.\n   (merge ca93c27328 ps/reftable-hardening later to maint).\n\n * A description in the release notes for Git 2.55.0 has been\n   retroactively updated to clarify that Rust support is enabled by\n   default, but still optional, and will become mandatory in Git 3.0.\n   (merge 18b2009d14 jc/relnotes-2.55-rust-fix later to maint).\n\n * The early-exit optimization in 'paint_down_to_common()' has been\n   gated on the queue being generation-ordered, fixing a bug where\n   'git merge-base' (without '--all') could return incorrect results\n   on repositories with v1 commit graphs and clock skew.\n   (merge ae68032a8d kk/commit-reach-find-all-fix later to maint).\n\n * The client-side parser of the server-advertised bundle-URI list has\n   been updated to drain the remaining response in order to avoid\n   protocol desynchronization when the server sends a misconfigured list.\n   Also, the server-side has been taught to omit empty configuration\n   values instead of sending invalid key-value lines.\n   (merge 50de1169e4 tc/bundle-uri-empty-fix later to maint).\n\n * The 'topo_levels' slab was propagated only to the topmost layer of a\n   split commit-graph chain, causing topological levels for commits in\n   base layers to be recomputed during incremental writes.  This has been\n   corrected.\n\n * The stream-based object signature verification path has been\n   corrected to avoid double-closing the stream on read errors.\n   (merge cfd52a74a0 ps/odb-stream-double-close-fix later to maint).\n\n * The '-i' shorthand for the '--init' option, which was accepted by the\n   'git submodule update' command until it was broken in a modernization\n   of the option-parsing code, has been restored.\n   (merge ff1da37f58 dm/submodule-update-i-shorthand later to maint).\n\n * An accidental use of the '%zu' format specifier in 'git\n   submodule--helper' has been corrected to use 'PRIuMAX' and cast the\n   value to 'uintmax_t' to avoid portability issues.\n   (merge 3279c13c00 jc/submodule-helper-avoid-zu later to maint).\n\n * The rebase post-rewrite notes-copying logic has been corrected.  When\n   a commit is dropped during rebase (e.g., because its changes are\n   already upstream), it is no longer recorded as rewritten, preventing\n   its notes from being copied to an unrelated commit.\n   (merge 42554b78fd pw/rebase-drop-notes-with-commit later to maint).\n\n * A few memory problems in the Rust interface to C hash functions have\n   been corrected.  The 'Clone' implementation of 'CryptoHasher' now\n   properly initializes the context before cloning, and its 'Drop'\n   implementation now discards the context to prevent leaks.\n\n * The object ID shortening and linking in the 'commitdiff' view of\n   'gitweb' has been corrected to work even when the index line carries\n   a trailing file mode.\n   (merge fda513d6fe tl/gitweb-shorten-hashes-with-modes later to maint).\n\n * When the push remote is specified as a URL, the fetch refspec of a\n   uniquely matching configured remote is now used to find and update\n   the remote-tracking branch (e.g., '@{push}').\n\n * Traversals with '--exclude-first-parent-only' have been corrected\n   to properly stop after the first parent even when it has already\n   been marked as 'SEEN'.\n   (merge 47382f7398 jc/exclude-first-parent-seen later to maint).\n\n * A segfault when 'git clone --revision' talks to a server that does not\n   support protocol v2 (falling back to protocol v0) has been corrected.\n   (merge 1034ad383f af/clone-revision-v0-segfault-fix later to maint).\n\n * rewrites_release() in 'remote.c' has been updated to free 'struct\n   rewrite' instances, their '.instead_of' arrays, and their contents.\n   (merge dcef3bf041 jc/remote-insteadof-leakfix later to maint).\n\n * The remote-matching logic for submodules has been corrected to resolve\n   'url.*.insteadOf' aliases before comparing the inventoried URL from\n   '.gitmodules' with the URLs of configured remotes.\n\n * 'git diff --relative' running with '--cached' has been corrected to\n   avoid a segfault when encountering unmerged paths outside the\n   prefix.\n   (merge 447126ed7d jk/diff-relative-cached-unmerged later to maint).\n\n * Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'\n   commands have been fixed.  One bug caused an incorrect commit count to\n   be shown in the template message when multiple commands were skipped,\n   and another prevented the editor from opening when the final command\n   in a chain containing 'fixup -c' was skipped.\n\n * Git for Windows has been updated to avoid auto-detecting the symlink\n   type if the target path starts with a slash, preventing NTLM\n   credential leaks when checking out repositories with crafted\n   symbolic links pointing to network shares.\n\n * 'git cat-file --batch-command' that asked for 'contents' without\n   'type' segfaults, which has been corrected.\n   (merge 2abc7f0304 jk/cat-file-batch-wo-type-fix later to maint).\n\n * A memory leak in 'git merge' when run without arguments (which\n   triggers the default-to-upstream path) has been fixed.  A test has\n   been added to cover this case.\n   (merge 68cce04a02 tc/merge-default-to-upstream-leakfix later to maint).\n\n * A boundary case check in reachability bitmap traversal has been\n   corrected to properly handle the object at position zero, which was\n   previously skipped, leading to redundant bitmap loading.\n   (merge b56b48301e dl/pack-bitmap-position-zero later to maint).\n\n * A crash in the 'sparse-index' collapse code when encountering an\n   invalidated cache-tree node (due to an intent-to-add path) has been\n   fixed by avoiding collapsing such subtrees.\n   (merge eede1e69fe ds/sparse-index-ita-crash later to maint).\n\n * Documentation for 'git replay' has been updated to refer to its\n   configuration variables.\n   (merge 48c0549f5c kh/doc-replay-config later to maint).\n\n * Documentation for 'git interpret-trailers' has been updated to explain\n   the format of trailer keys (alphanumeric characters and hyphens),\n   replace outdated terminology, define key terms upfront, and document\n   how comment lines in the input are treated.\n   (merge 4515c86fd9 kh/doc-trailers later to maint).\n\n * The 'pack-objects' and delta-encoding code paths have been updated to\n   use 'size_t' instead of 'unsigned long' for object sizes and offset\n   limits, avoiding potential truncation issues on 64-bit Windows.\n   (merge d50ac11724 js/pack-objects-delta-size-t later to maint).\n\n * A client requesting the promisor-remote capability without a value\n   caused a null pointer dereference, which has been corrected by\n   rejecting a request without an argument.\n   (merge dd6b35ff71 en/serve-promisor-remote-fix later to maint).\n\n * Various tests in 't7900-maintenance.sh' have been updated to use a\n   throwaway repository, and auto-detaching of maintenance tasks is now\n   disabled for these tests to fix flaky races with concurrent background\n   maintenance jobs.\n   (merge 2775d8bcd1 ps/t7900-deflake-maintenance later to maint).\n\n * The help text for the '-l' option of 'git diff' has been updated.\n   (merge 764243bdf4 en/diff-l-opt-help later to maint).\n\n * 'git -C <dir> diff fi<TAB>' did not complete 'file', which has\n   been corrected.\n   (merge 354d1bf3a0 jc/complete-diff-tracked-paths later to maint).\n\n * 'git -C <dir> checkout fi<TAB>' did not complete 'file', which has\n   been corrected.\n   (merge 05e2ab1f31 jc/complete-checkout later to maint).\n\n * The trailer parsing machinery has been updated to avoid mistaking\n   lines that begin with a URL (e.g., 'https://...') as trailer lines.\n   This prevents intended textual URLs from being mangled or mistakenly\n   treated as metadata keys.\n\n * The instructions for deprecated commands emitted by\n   you_still_use_that() have been reworded to clarify that the removal\n   decision is final and to provide more assertive guidance on finding\n   a replacement.\n   (merge 8ace32221c jc/you-still-use-that later to maint).\n\n * The zsh completion script (in 'contrib/') has been updated to\n   correctly locate the Git command after global options like '-C' by\n   properly skipping them, similar to how the bash completion does.\n\n * The git worktree repair command failed to rewrite the .git file of\n   a working tree from a relative path to an absolute path when the\n   command was run in the working tree itself.  The\n   read_gitfile_gently() function was modified to also return whether\n   the path originally recorded in the file was absolute, and this new\n   capability is used to correctly detect such mismatches.\n\n * GitHub Actions CI workflow runs triggered by pull requests have\n   been configured to cancel older runs when a new push is made to the\n   same pull request.\n   (merge a251b1bd21 hn/ci-cancel-stale-pr-runs later to maint).\n\n * The string extraction logic for the branch name and worktree name\n   from the given path in 'git worktree add' has been corrected and\n   simplified to avoid out-of-bounds reads and improper handling of\n   trailing slashes.\n   (merge 2e8a9d94b0 rs/worktree-add-basename-fixes later to maint).\n\n * The CI job for Debian 11 has been updated to use Debian 12, as the\n   former is now out of the LTS period.\n   (merge 00fa850235 jk/ci-bump-debian-to-12 later to maint).\n\n * The CI script to install dependencies for the documentation build\n   has been updated to install asciidoctor directly via the system\n   package manager instead of pinning to an older version via gem.\n   Additionally, an obsolete variable used for retired Azure Pipelines\n   environments has been removed.\n\n * The error path in 'git submodule--helper' has been updated to plug a\n   memory leak when a repository handle could not be obtained,\n   leveraging an updated idempotent repo_clear().\n   (merge 2c03739705 jk/submodule-error-leak later to maint).\n\n * Two members in \"struct pathspec_item\" were of type \"char *\", but\n   nobody updated the string through these pointers.  They have been\n   made \"const char *\" instead.\n   (merge 88d06b1c91 jc/pathspec-match-const later to maint).\n\n * The gitdatamodel documentation page has been linked from a handful\n   of key documentaiton pages.\n   (merge ec602484bd kh/doc-datamodel later to maint).\n\n * Running \"git history\" in a corrupt repository can (unsurprisingly)\n   segfault when a necessary tree object is not found, which has been\n   made to die more gracefully.\n   (merge 76621488e8 jc/history-missing-tree-errorfix later to maint).\n\n * The development helper script to lint gitlink references in the\n   documentation has been updated to avoid a newer Perl regular\n   expression syntax that breaks on older Perl versions.\n   (merge 8a631963a9 ta/lint-gitlink-older-perl-fix later to maint).\n\n * The autostash fallback in 'git checkout -m' has been refined to only\n   retry when there are local changes.  Additionally, a blank line now\n   visually separates autostash conflict advice from the subsequent\n   branch-switch message.\n   (merge 2ba77ea828 hn/checkout-m-autostash-refine later to maint).\n\n * The memory leak caused by not unusing the commit buffer returned by\n   repo_logmsg_reencode() during the rewording operation in 'git\n   history' has been plugged.\n\n * The pathspec matching logic has been updated to avoid out-of-bounds\n   memory accesses when a negative pathspec is shorter than the common\n   prefix of positive pathspecs.\n\n * Other code cleanup, docfix, build fix, etc.\n   (merge 026636128f ss/submittingpatches-typofix later to maint).\n   (merge d2af22cc21 jc/rerere-doc-typofix later to maint).\n   (merge c486c1df72 hk/typofix later to maint).\n\n----------------------------------------------------------------\n\nChanges since v2.55.0 are as follows:\n\nAdrian Friedli (1):\n      builtin/clone: fix segfault when using --revision with protocol v0\n\nAindriú Mac Giolla Eoin (1):\n      l10n: ga.po: update for Git 2.56\n\nAleksei Sviridkin (2):\n      t3507: check no CHERRY_PICK_HEAD after conflicting --no-commit\n      doc: cherry-pick: note --no-commit skips CHERRY_PICK_HEAD\n\nAlexander Shopov (3):\n      gitk i18n: Update Bulgarian translation (329t)\n      git-gui i18n: Update Bulgarian translation (562t)\n      git-gui: allow larger width for the commit message field\n\nAntonio De Stefani (1):\n      gpg-interface: fix strip_cr_before_lf to only remove CR before LF\n\nArkadii Yakovets (1):\n      l10n: uk: add 2.56 translation\n\nBagas Sanjaya (1):\n      l10n: po-id for 2.56\n\nBrigham Campbell (1):\n      doc: fix conjoined maintenance strategies in git-config(1)\n\nCalvin Wan (3):\n      fetch-pack: move fetch initialization\n      serve: advertise object-info feature\n      transport: add client support for object-info\n\nChen Linxuan (3):\n      config: refactor include_by_gitdir() into include_by_path()\n      config: add \"worktree\" and \"worktree/i\" includeIf conditions\n      b4: include change-id in cover template\n\nChristian Couder (23):\n      t5710: simplify 'mkdir X' followed by 'git -C X init'\n      urlmatch: change 'allow_globs' arg to bool\n      urlmatch: add url_normalize_pattern() helper\n      promisor-remote: add 'local_name' to 'struct promisor_info'\n      promisor-remote: introduce promisor.acceptFromServerUrl\n      promisor-remote: trust known remotes matching acceptFromServerUrl\n      promisor-remote: auto-configure unknown remotes\n      doc: promisor: improve acceptFromServer entry\n      fast-export: standardize usage string and SYNOPSIS\n      mailmap: change primary address for Christian Couder\n      parse-options: introduce OPT_HIDDEN_GROUP\n      api-parse-options.adoc: document per-option flags\n      api-parse-options.adoc: document hidden and OPT_*_F option macros\n      fast-import: localize 'i' into the 'for' loops using it\n      fast-import: use int for some bool flags\n      fast-import: factor out option_*() functions\n      fast-import: introduce 'struct fast_import_state'\n      fast-import: move command state globals into 'struct fast_import_state'\n      fast-import: use struct option for usage string\n      fast-import: use callbacks to parse some options\n      fast-import: use parse_options() for command line options\n      fast-import: remove useless from_stream argument\n      git: avoid segfault on \"git --shallow-file\" without a value\n\nColin Hinton (1):\n      chdir-notify.h: Removed unused param 'name'\n\nD. Ben Knoble (1):\n      mailmap: change primary address for D. Ben Knoble\n\nDaniel Pereira (1):\n      l10n: pt_BR: add Brazilian Portuguese translation\n\nDavid Lin (1):\n      pack-bitmap: handle objects at bitmap position zero\n\nDerrick Stolee (1):\n      sparse-index: avoid crash on intent-to-add entry outside the cone\n\nDominique Martinet (1):\n      submodule--helper: accept '-i' shorthand for update --init\n\nElijah Newren (19):\n      merge-ort: propagate callback errors from traverse_trees_wrapper()\n      merge-ort: drop unnecessary show_all_errors from collect_merge_info()\n      merge-ort: free diff pairs queue in clear_or_reinit_internal_opts()\n      merge-ort: abort merge when trees have duplicate entries\n      cache-tree: fix verify_cache() to catch non-adjacent D/F conflicts\n      t6600: add test cases for side-exhaustion edge cases\n      serve: reject valueless promisor-remote capability\n      sequencer: remove unnecessary variable setting\n      mailmap: map Elijah Newren's current and previous work addresses\n      diff: avoid misleading statement about -l option\n      replay: fail gracefully when a merge input is unreadable\n      mktree: plug per-tree leak in --batch mode\n      mktree: do not use OBJECT_INFO_QUICK when checking objects\n      packfile: recover when a multi-pack-index names a removed pack\n      commit: clarify FROM_REBASE_PICK and is_from_rebase() names\n      commit: allow a partial commit when a rebase pick becomes empty\n      commit: reword the empty-commit rebase amend error\n      commit: refuse to amend during conflict resolution\n      commit: refuse partial commits during conflict resolution\n\nEmir SARI (1):\n      l10n: tr: Update Turkish translations\n\nEric Ju (3):\n      cat-file: declare loop counter inside for()\n      t1006: extract helper functions into new 'lib-cat-file.sh'\n      cat-file: add remote-object-info to batch-command\n\nFriel (1):\n      pack-objects: trace pack bytes written\n\nGatla Vishweshwar Reddy (2):\n      t1410-reflog.sh: avoid suppressing git's exit code in pipelines\n      builtin/add.c: replace run_command() with direct apply_all_patches() call\n\nHarald Nordgren (20):\n      remote: qualify \"git pull\" advice for non-upstream compareBranches\n      git-gui: drop msgfmt --statistics output\n      gitk: make \"make -s\" silent\n      branch: suggest <remote>/<branch> on upstream slip\n      push: suggest <remote> <branch> for a slash slip\n      remote: pass repository to push tracking helper\n      remote: find tracking branches for URL push destinations\n      bisect: let bisect_reset() optionally check out quietly\n      bisect: add --reset-when-found to leave when done\n      branch: add --forked filter for --list mode\n      branch: convert delete_branches() to a flags argument\n      branch: let delete_branches skip unmerged branches on bulk refusal\n      branch: prepare delete_branches for a bulk caller\n      branch: add --delete-merged <pattern>\n      branch: add branch.<name>.deleteMerged opt-out\n      branch: add --dry-run for --delete-merged\n      send-email: clarify missing subject error\n      ci: cancel stale pull request workflow runs\n      stash: reserve exit status 1 for conflicts\n      checkout: separate autostash conflict advice from branch-switch message\n\nHardik Kumar (1):\n      versioncmp: fix typo in versioncmp.c, t/t0022-crlf-rename.sh\n\nHenrique Ferreiro (1):\n      unpack-trees: avoid quadratic index scan in next_cache_entry()\n\nIhar Hrachyshka (1):\n      precompose_utf8: use a flex array for d_name\n\nJames Le Cuirot (1):\n      rust: respect CARGO_BUILD_TARGET when locating build output\n\nJamie Magee (1):\n      t0213: skip ancestry tests under user-mode emulation\n\nJean-Noël Avila (5):\n      doc: convert git-imap-send synopsis and options to new style\n      doc: convert git-format-patch synopsis and options to new style\n      doc: convert git-send-email synopsis and options to new style\n      doc: convert git-request-pull synopsis and options to new style\n      l10n: fr: update translation for git 2.56.0\n\nJeff King (41):\n      read_gitfile(): simplify NOT_A_REPO error message\n      reftable: fix unlikely leak on API error\n      t: move LSan errors from stdout to stderr\n      format-patch: fix leak of rev_info in prepare_bases()\n      bloom: make bloom-filter slab initialization idempotent\n      revision: avoid leaking bloom keyvecs with multiple traversals\n      line-log: drop extra copy of range with bloom filters\n      csum-file: drop discard_hashfile()\n      hash: add discard primitive\n      csum-file: always finalize or discard hash\n      csum-file: provide a function to release checkpoints\n      patch-id: discard hash when done\n      check_stream_oid(): discard hash on read error\n      http: discard hash in dumb-http http_object_request\n      hash: fix memory leak copying sha256 gcrypt handles\n      hash: add platform-specific discard functions\n      hash: use git_hash_init() consistently\n      hash: convert remaining direct function calls\n      hash: document function pointers and wrappers\n      hash: make git_hash_discard() idempotent\n      csum-file: use idempotent git_hash_discard()\n      http: use idempotent git_hash_discard()\n      hash: check ctx->active flag in all wrapper functions\n      pack-objects: drop unused return value from add_object_entry()\n      diff: ignore unmerged paths outside prefix with --relative --cached\n      bloom: silence CHECK_ASSERTION_SIDE_EFFECTS false positive\n      ci: bump ubuntu image version for static-analysis job\n      diff-lib: add idx/tree sanity check to oneway_diff\n      diff-lib: drop stale comment about advancing o->pos\n      diff-lib: skip paths outside prefix in oneway_diff()\n      cat-file: handle content request for --batch-command without type\n      t0014: factor out choice of deprecated commands\n      t0014: generate deprecated command names dynamically\n      transport: drop remote object-info fields from transport struct\n      revision: hang on to \"freed\" argv elements\n      revision: simplify mark_argv_for_free() callers\n      repository: make repo_clear() idempotent\n      submodule--helper: free URL when repository setup fails\n      ci: bump debian-11 job to debian-12\n      ci: drop ALREADY_HAVE_ASCIIDOCTOR variable\n      ci: use system asciidoctor\n\nJiang Xin (6):\n      l10n: AGENTS.md: fix counter fallbacks\n      l10n: AGENTS.md: require git-po-helper >= 0.9.1\n      l10n: AGENTS.md: count PO entries with git-po-helper stat -c\n      l10n: AGENTS.md: use JSON intermediates in workflow\n      l10n: AGENTS.md: zsh-safe review result cleanup\n      l10n: restore translations after upstream revert\n\nJinbao Chen (1):\n      history: do not dereference NULL when parent tree is missing\n\nJohannes Schindelin (73):\n      ci(dockerized): raise the PID limit for private repositories\n      load_one_loose_object_map(): fix resource leak\n      loose: avoid closing invalid fd on error path\n      download_https_uri_to_file(): do not leak fd upon failure\n      run-command: avoid `close(-1)` in `start_command()` error paths\n      line-log: avoid redundant copy that leaks in process_ranges\n      dir: free allocations on parse-error paths in `read_one_dir()`\n      submodule: fix cwd leak in `get_superproject_working_tree()`\n      worktree: fix resource leaks when branch creation fails\n      imap-send: avoid leaking the IMAP upload buffer\n      reftable/table: release filter on error path\n      fsmonitor: plug token-data leak on early daemon-startup failures\n      mingw: make `exit_process()` own the process handle on all paths\n      diffcore-break: guard against NULLed queue entries in merge loop\n      diff: handle NULL return from repo_get_commit_tree()\n      remote: guard `remote_tracking()` against NULL remote\n      reftable/stack: guard against NULL list_file in stack_destroy\n      mailsplit: move NULL check before first use of file handle\n      bisect: handle NULL commit in `bisect_successful()`\n      replay: die when --onto does not peel to a commit\n      revision: avoid dereferencing NULL in `add_parents_only()`\n      pack-bitmap: handle missing bitmap for base MIDX\n      bisect: ensure non-NULL `head` before using it\n      shallow: fix NULL dereference\n      shallow: give write_one_shallow() its own hex buffer\n      wincred: avoid memory corruption when erasing a credential\n      wincred: prevent silent credential loss when storing OAuth tokens\n      mingw: skip symlink type auto-detection for network share targets\n      http: die on curl_easy_duphandle failure in get_active_slot\n      config: propagate launch_editor() failure in show_editor()\n      reftable: handle block-writer initialization errors\n      reftable/block: check deflateInit() return value\n      reftable tests: check reftable_table_init_ref_iterator() return\n      last-modified: handle repo_parse_commit() failures\n      compat/pread: check initial lseek for errors\n      transport-helper: check dup() return in get_exporter\n      transport-helper: warn when export-marks file cannot be finalized\n      bisect: check strbuf_getline_lf return when reading terms\n      bisect: check get_terms return at all call sites\n      bisect: handle dup() failure when redirecting stdout\n      sequencer: release the ODB before spawning git commit\n      diff-delta: widen `struct delta_index`' size fields to `size_t`\n      delta: widen `create_delta_index()` parameter to `size_t`\n      pack-objects: widen delta-cache accounting to `size_t`\n      pack-objects: widen `free_unpacked()` return to `size_t`\n      pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t`\n      delta: widen `create_delta()` and `diff_delta()` to `size_t`\n      packfile, git-zlib: widen `use_pack()` and zstream avail fields to `size_t`\n      archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t`\n      diff: widen `deflate_it()`'s bound local from int to `size_t`\n      http-push: widen `start_put()`'s size local from `ssize_t` to `size_t`\n      t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t`\n      git-zlib: widen `git_deflate_bound()` to `size_t`\n      packfile: widen `unpack_object_header_buffer()` to `size_t`\n      packfile: fix perf regression with many packs\n      mingw: include the Python parts in the build\n      mingw: stop hard-coding `CC = gcc`\n      mingw: drop the -D_USE_32BIT_TIME_T option\n      mingw: only use -Wl,--large-address-aware for 32-bit builds\n      mingw: avoid over-specifying `--pic-executable`\n      mingw: set the prefix and HOST_CPU as per MSYS2's settings\n      mingw: only enable the MSYS2-specific stuff when compiling in MSYS2\n      mingw: rely on MSYS2's metadata instead of hard-coding it\n      windows: skip linking `git-<command>` for built-ins\n      mingw: always define `ETC_*` for MSYS2 environments\n      mingw: ensure valid CTYPE\n      mingw: allow `git.exe` to be used instead of the \"Git wrapper\"\n      t0060: adjust the code style\n      rust: pick a GCC-compatible Cargo target under MSYS2/MinGW\n      ci(windows): build with Rust\n      t9700: accommodate for MSYS2 Perl reporting as `cygwin`\n      t9129: skip UTF-8 tests on Windows\n      cmake(windows): accommodate for Git for Windows' migration to UCRT64\n\nJohannes Sixt (8):\n      git-gui: reduce complexity of the quiet msgfmt rule\n      gitk: set intitial colors of swatches using the available helper\n      gitk: condense repetitive code around color buttons into foreach loops\n      gitk: show color preferences on the button instead of the label\n      gitk: use more natural language for labels of color preferences\n      gitk: avoid constructing dialog titles from text pieces\n      gitk: move UI for generic colors above diff colors\n      gitk: discourage AI contributions\n\nJunio C Hamano (53):\n      SubmittingPatches: address design critiques\n      history: streamline message preparation and plug file stream leak\n      Start Git 2.56 cycle\n      Rust: fix description in Release Notes to 2.55\n      SubmittingPatches: document how to retract a topic\n      The 2nd batch for Git 2.56\n      submodule--helper: avoid use of %zu for now\n      The 3rd batch for Git 2.56\n      The 4th batch for Git 2.56\n      The 5th batch\n      The 6th batch\n      The 7th batch\n      revision: honor --exclude-first-parent-only with SEEN first parent\n      remote: plug memory leaks\n      The 8th batch\n      The 9th batch\n      read-cache: reindent\n      merge-ll: consolidate conflict marker scanning logic\n      read-cache: add remove_file_from_index_with_flags()\n      add: introduce '--resolved' option\n      The 10th batch\n      The 11th batch\n      The 12th batch\n      The 13th batch\n      completion: no-op refactoring of diff completion\n      completion: complete tracked paths for 'git diff'\n      completion: 'git diff' completes untracked paths as a last resort\n      completion: no-op refactoring of checkout completion\n      completion: complete tracked paths for \"git checkout\"\n      completion: 'git checkout' completes untracked paths as a last resort\n      The 14th batch\n      The 15th batch\n      The 16th batch\n      The 17th batch\n      The 18th batch\n      rerere: technical documentation typofix\n      The 19th batch\n      you_still_use_that(): reword the instructions\n      The 20th batch\n      The 21st batch\n      The 22nd batch\n      pathspec: match and original in pathspec_item are const\n      The 23rd batch\n      Git 2.56-rc0\n      A bit more for -rc1\n      2nd batch for -rc1\n      3rd batch for -rc1\n      4th batch for -rc1\n      Git 2.56-rc1\n      A few more fixes before -rc2\n      Git 2.56-rc2\n      Revert \"Merge branch 'en/no-amend-during-conflicts'\"\n      Git 2.56\n\nJustin Tobler (21):\n      bundle-uri: stop sending invalid bundle configuration\n      object-file: rename files transaction prepare function\n      object-file: rename files transaction fsync function\n      object-file: embed transaction flush logic in commit function\n      object-file: drop check for inflight transactions\n      object-file: propagate files transaction errors\n      odb/transaction: propagate begin errors\n      odb/transaction: propagate commit errors\n      odb/transaction: add transaction env interface\n      odb/transaction: introduce ODB transaction flags\n      builtin/receive-pack: drop redundant tmpdir env\n      builtin/receive-pack: stage incoming objects via ODB transactions\n      builtin/receive-pack: properly clean up keep files\n      odb/transaction: add transaction finalize interface\n      builtin/receive-pack: pass shallow file explicitly\n      builtin/receive-pack: read unpack limit config lazily\n      builtin/receive-pack: lift global state out of unpack()\n      builtin/receive-pack: report unpack errors via strbuf\n      builtin/receive-pack: explicitly pass packfile fd\n      odb: return temporary ODB source when set\n      odb/transaction: add transaction interface to write packfiles\n\nJörg Thalheim (1):\n      config: retry acquiring config.lock, configurable via core.configLockTimeout\n\nK Jayatheerth (3):\n      path: extract format_path() and use in rev-parse\n      repo: add path.commondir with absolute and relative suffix formatting\n      repo: add path.gitdir with absolute and relative suffix formatting\n\nKaartic Sivaraam (1):\n      builtin/history: unuse the commit buffer after use\n\nKarthik Nayak (4):\n      reftable/stack: remove `REFTABLE_STACK_NEW_ADDITION_RELOAD`\n      reftable/stack: rename reftable_stack_new_addition()\n      reftable/stack: move list lock to `struct reftable_stack`\n      reftable/stack: avoid reloading the stack when already locked\n\nKenneth Lorber (1):\n      t7528: fix failure under csh\n\nKristofer Karlsson (18):\n      prio-queue: rename .nr to .nr_ and add accessor helpers\n      prio-queue: fold lazy_queue into prio_queue for automatic get+put fusion\n      t6600: add test for merge-base early exit with clock skew\n      commit-reach: guard !FIND_ALL early exit with generation ordering check\n      commit-graph: add trace2 instrumentation for generation DFS\n      commit-graph: propagate topo_levels slab to all chain layers\n      t/perf: add perf test for ref tombstone scenarios\n      reftable: fix quadratic behavior in the presence of tombstones\n      revision: fix --no-walk path filtering regression\n      Documentation/technical: add paint-down-to-common doc\n      test-lib-functions: improve diagnostic output for trace2 data assertions\n      t6099: add side-exhaustion regression test\n      commit-reach: add trace2 instrumentation to paint_down_to_common()\n      t6600: add clock-skew topologies and step counts for edge cases\n      commit-reach: introduce struct paint_state with per-side counters\n      commit-reach: terminate merge-base walk when one paint side is exhausted\n      commit-reach: move min_generation check into paint_queue_get()\n      commit-reach: remove commit-date ordering fallback\n\nKristoffer Haugsbakk (29):\n      SubmittingPatches: encourage trailer use for substantial help\n      SubmittingPatches: discourage common Linux trailers\n      SubmittingPatches: document Based-on-patch-by trailer\n      SubmittingPatches: be consistent with trailer markup\n      SubmittingPatches: note that trailer order matters\n      doc: link to config for git-replay(1)\n      doc: replay: improve config description\n      doc: replay: use a nested description list\n      doc: replay: move “default” to the right-hand side\n      doc: refs: put ref migration warning under the command\n      doc: refs: linkgit to git-maintenance(1)\n      doc: interpret-trailers: stop fixating on RFC 822\n      doc: interpret-trailers: replace “lines” with “metadata”\n      doc: interpret-trailers: use “metadata” in Name as well\n      doc: interpret-trailers: not just for commit messages\n      doc: interpret-trailers: explain the format after the intro\n      doc: interpret-trailers: explain key format\n      doc: interpret-trailers: add key format example\n      doc: interpret-trailers: join new-trailers again\n      doc: interpret-trailers: commit to “trailer block” term\n      doc: interpret-trailers: rewrite new-trailers paragraphs\n      doc: interpret-trailers: document comment line treatment\n      doc: format-rev: quote subject placeholder before and after\n      doc: format-rev: use [synopsis] on code block\n      trailers: stop recognizing URLs as trailers\n      doc: git: list gitdatamodel(7) as a concept guide\n      doc: git: link to the gitdatamodel(7) tutorial\n      doc: glossary: link four of the terms to gitdatamodel(7)\n      doc: datamodel: link to the glossary\n\nLucas Zamboni Orioli (2):\n      mv: name both source and destination when rename fails\n      mv: reject a destination whose leading path is missing or a symlink\n\nLutz Lengemann (1):\n      completion: zsh: support completion after \"git -C <path>\"\n\nMantas Mikulėnas (1):\n      sideband: allow ANSI SGR with colon-separated subfields\n\nMarcelo Machado Lage (2):\n      t9811: break long && chains into multiple lines\n      t9811: replace 'test -f' and '! test -f' with 'test_path_*'\n\nMatt Hunter (8):\n      fetch: fixup set_head advice for warn-if-not-branch\n      doc: explain fetchRemoteHEADWarn advice\n      t5510: cleanup remote in followRemoteHEAD dangling ref test\n      fetch: rename function report_set_head\n      fetch: return 0 on known git_fetch_config\n      fetch: refactor do_fetch handling of followRemoteHEAD\n      fetch: add configuration variable fetch.followRemoteHEAD\n      fetch: fixup a misaligned comment\n\nMichael Montalbo (10):\n      t/README: document test_grep helper\n      t: fix grep assertions missing file arguments\n      t: extract chainlint's parser into shared module\n      t: fix Lexer line count for $() inside double-quoted strings\n      t: convert grep assertions to test_grep\n      t: add greplint to detect bare grep assertions\n      revision: make get_commit_action() a pure predicate\n      t/lib-httpd: fix apply-one-time-script race under concurrent requests\n      t/lib-httpd: make http-429 first-request check atomic\n      t/lib-httpd: document writing concurrency-safe CGI helpers\n\nMike Gilbert (1):\n      meson: restore hook-list.h to builtin_sources\n\nMikel Forcada (1):\n      l10n: Update Catalan Translation\n\nMiklos Vajna (1):\n      log: improve --follow following renames for non-linear history\n\nNikolaus Schuetz (3):\n      merge-base: add tests for --is-ancestor\n      t1401: check symbolic-ref failure and --quiet silence on a non-symbolic ref\n      t1402: test forbidden characters in refnames\n\nPablo Sabater (23):\n      lib-log-graph: move check_graph function\n      revision: add next_commit_to_show()\n      graph: add a 2 commit buffer for lookahead\n      graph: indent visual root in graph\n      graph: wrap cascading commits after 4 columns\n      graph: move config reading into graph_read_config()\n      graph: add --[no-]graph-indent and log.graphIndent\n      transport-helper: fix memory leak of helper on disconnect\n      fetch-pack: drop the static advertise_sid variable\n      fetch-pack: use unsigned int for hash_algo variable\n      fetch-pack: move write_fetch_command_and_capabilities() to connect.c\n      connect: make write_fetch_command_and_capabilities() more generic\n      protocol-caps: check object existence regardless of the attributes requested\n      cat-file: make remote-object-info allow-list adapt to the server\n      t5701: use test_file_size() to get the size of a file\n      fetch-object-info: detect malformed server responses\n      fetch-object-info: pass arguments directly instead of a struct\n      fetch-object-info: use dedicated struct for the results\n      fetch-object-info: die() on the remaining error path\n      protocol-caps: add type support to object-info\n      fetch-object-info: parse type from server response\n      serve: advertise type capability\n      cat-file: unify default format\n\nPatrick Steinhardt (204):\n      builtin/init: stop modifying global `git_work_tree_cfg` variable\n      builtin/init: simplify logic to configure worktree\n      setup: remove global `git_work_tree_cfg` variable\n      builtin/init: stop modifying `is_bare_repository_cfg`\n      environment: split up concerns of `is_bare_repository_cfg`\n      environment: stop using `the_repository` in `is_bare_repository()`\n      treewide: drop USE_THE_REPOSITORY_VARIABLE\n      MyFirstContribution: recommend shallow threading of cover letters\n      MyFirstContribution: recommend the use of b4\n      b4: introduce configuration for the Git project\n      packfile: rename `struct packfile_store` to `odb_source_packed`\n      packfile: split out packfile list logic\n      packfile: move packed source into \"odb/\" subsystem\n      odb/source-packed: store pointer to \"files\" instead of generic source\n      odb/source-packed: start converting to a proper `struct odb_source`\n      odb/source-packed: wire up `close()` callback\n      odb/source-packed: wire up `reprepare()` callback\n      packfile: use higher-level interface to implement `has_object_pack()`\n      odb/source-packed: wire up `read_object_info()` callback\n      odb/source-packed: wire up `read_object_stream()` callback\n      odb/source-packed: wire up `for_each_object()` callback\n      odb/source-packed: wire up `count_objects()` callback\n      odb/source-packed: wire up `find_abbrev_len()` callback\n      odb/source-packed: wire up `freshen_object()` callback\n      odb/source-packed: stub out remaining functions\n      midx: refactor interfaces to work on \"packed\" source\n      odb/source-packed: drop pointer to \"files\" parent source\n      odb/source: generalize `reprepare()` callback\n      odb: introduce `odb_prepare()`\n      odb/source-packed: extract logic to skip certain packs\n      odb/source-packed: support flags when iterating an object prefix\n      connected: split out promisor-based connectivity check\n      connected: search promisor objects generically\n      setup: inline `check_and_apply_repository_format()`\n      setup: stop applying repository format twice\n      setup: don't apply \"GIT_REFERENCE_BACKEND\" without a repository\n      refs: unregister reference stores from \"chdir_notify\"\n      chdir-notify: drop unused `chdir_notify_reparent()`\n      repository: free main reference database\n      refs: move parsing of \"core.logAllRefUpdates\" back into ref stores\n      refs/files: lazy-load configuration to fix chicken-and-egg\n      reftable: split up write options\n      refs/reftable: lazy-load configuration to fix chicken-and-egg\n      refs: protect against chicken-and-egg recursion\n      read-cache: split out function to drop unmerged entries to stage 0\n      reset: drop `USE_THE_REPOSITORY_VARIABLE`\n      reset: rename `reset_head()`\n      reset: modernize flags passed to `reset_working_tree()`\n      reset: introduce dry-run mode\n      packfile: thread odb_source_packed through packed_object_info()\n      odb: make backend-specific fields optional\n      odb: add `source` field to struct object_info_source\n      treewide: convert users of `whence` to the new source field\n      odb: drop `whence` field from object info\n      odb: document object info fields\n      reset: introduce ability to skip updating HEAD\n      reset: allow the caller to specify the current HEAD object\n      reset: stop assuming that the caller passes in a clean index\n      replay: expose `replay_result_queue_update()`\n      builtin/history: split handling of ref updates into two phases\n      builtin/history: implement \"drop\" subcommand\n      meson: support building fuzzers with libFuzzer\n      oss-fuzz: add fuzzer for parsing reftables\n      reftable/basics: fix OOB read on binary search of empty range\n      reftable/record: don't abort when decoding invalid ref value type\n      t/unit-tests: introduce test helper to write reftable blocks\n      reftable/block: fix OOB write with bogus inflated log size\n      reftable/block: fix OOB read with bogus block size\n      reftable/block: fix OOB read with bogus restart count\n      reftable/block: fix use of uninitialized memory when binsearch fails\n      reftable/block: fix OOB read with bogus restart offset\n      reftable/table: fix NULL pointer access when seeking to bogus offsets\n      reftable/table: fix OOB read on truncated table\n      README: add GitLab CI badge to make it more discoverable\n      t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT\n      t4141: fix inefficient use of dd(1)\n      t5608: reduce maximum disk usage\n      t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT\n      t7900: clean up large EXPENSIVE repository\n      t: use `test_bool_env` to parse GIT_TEST_LONG\n      gitlab-ci: disable RAM disk on macOS jobs\n      gitlab-ci: enable \"GIT_TEST_LONG\"\n      builtin/refs: drop `the_repository`\n      builtin/refs: add \"delete\" subcommand\n      builtin/refs: add \"update\" subcommand\n      builtin/refs: add \"create\" subcommand\n      builtin/refs: add \"rename\" subcommand\n      setup: rename `check_repository_format_gently()`\n      setup: mark bogus worktree in `apply_repository_format()`\n      setup: unify setup of shallow file\n      setup: split up concerns of `setup_git_env_internal()`\n      setup: introduce explicit repository discovery\n      setup: embed repository format in discovery\n      setup: move prefix into repository\n      setup: drop static `cwd` variable\n      setup: propagate prefix via repository discovery\n      setup: make repository discovery self-contained\n      setup: drop redundant configuration of `startup_info->have_repository`\n      setup: pass worktree to `init_db()`\n      setup: mark `set_git_work_tree()` as file-local\n      object-file: fix closing object stream twice\n      t7900: simplify how we check for maintenance tasks\n      odb: run \"pre-auto-gc\" hook for all maintenance tasks\n      builtin/gc: move worktree and rerere tasks before object optimizations\n      builtin/gc: extract object database optimizations into separate function\n      builtin/gc: make repack arguments self-contained\n      builtin/gc: inline config values specific to the \"files\" backend\n      builtin/gc: introduce object database optimization options\n      builtin/gc: move geometric repacking into `odb_optimize()`\n      builtin/gc: introduce `odb_optimize_required()`\n      builtin/gc: refactor ODB optimizations to operate on \"files\" source\n      builtin/gc: fix signedness issues in ODB-related functionality\n      odb: make optimizations pluggable\n      odb/source-packed: improve lookup when enumerating objects\n      pack-bitmap: mark object filter as `const`\n      pack-bitmap: allow aborting iteration of bitmapped objects\n      pack-bitmap: iterate object sources when opening bitmaps\n      pack-bitmap: drop `_1` suffix from functions that open bitmaps\n      pack-bitmap: introduce function to open bitmap for a single source\n      odb: introduce object filters to `odb_for_each_object()`\n      builtin/cat-file: filter objects via object database\n      refs/packed: de-globalize handling of \"core.packedRefsTimeout\"\n      refs/files: drop `USE_THE_REPOSITORY_VARIABLE`\n      worktree: refactor code to use available repositories\n      worktree: pass repository to file-local functions\n      worktree: pass repository to public functions\n      refs: remove remaining uses of `the_repository`\n      refspec: group related structures and functions\n      refspec: let callers pass in hash algorithm when parsing items\n      refspec: stop depending on `the_repository`\n      copy: drop dependency on `the_repository`\n      odb: compute compat object ID in `odb_write_object_ext()`\n      t/u-odb-inmemory: implement wrapper for writing objects\n      odb: compute object hash in `odb_write_object_ext()`\n      odb: lift object existence check out of the \"loose\" backend\n      odb: support setting mtime when writing objects\n      object-file: fix memory leak in `force_object_loose()`\n      object-file: force objects loose via generic interface\n      object-file: move `force_object_loose()`\n      object-file: move logic to write loose objects\n      odb/streaming: track write stream size in the structure\n      odb/streaming: drop `is_finished` field\n      odb/streaming: support streaming arbitrary object types\n      odb/streaming: rename `struct odb_read_stream`\n      odb/streaming: consolidate read and write streams\n      odb/streaming: rename `struct read_object_fd_data`\n      odb/streaming: rename `struct input_zstream_data`\n      odb/streaming: unify function names to create new streams\n      loose: load loose object map for the correct source\n      setup: detangle loading of loose object maps\n      setup: handle ODB-related environment variables in `odb_new()`\n      setup: defer object database creation\n      odb/source: introduce function to map source type to name\n      odb: make creation of on-disk structures pluggable\n      compat/posix: introduce writev(3p) wrapper\n      wrapper: introduce writev(3p) wrappers\n      wrapper: properly handle MAX_IO_SIZE in writev(3p)\n      sideband: use writev(3p) to send pktlines\n      fast-import: use writev(3p) to send cat-blob responses\n      t7900: adapt some tests to use a throwaway repository\n      t7900: fix flaky \"maintenance.strategy\" test\n      setup: create ref and object databases after config is written\n      odb: decouple source path comparisons from `the_repository`\n      odb: eagerly initialize alternates\n      odb: drop `loaded_alternates` field\n      odb: drop `alternates_db` field\n      odb/source-packed: flag known-bad objects as corrupt and not missing\n      odb/source: introduce error status when reading objects\n      odb/source: let callers discern missing and corrupt objects\n      odb/source: allow `read_object_info()` to bubble up error messages\n      odb: handle `OBJECT_INFO_DIE_IF_CORRUPT` generically\n      odb: introduce interface to generate packfiles\n      upload-pack: generate packfiles via the object database\n      send-pack: generate packfiles via the object database\n      builtin/bundle: refactor option handling for progress meter\n      bundle: get (mostly) rid of `the_repository`\n      bundle: generate packfiles via the object database\n      odb/files: be less aggressive with geometric repacking\n      rerere: extract logic to determine whether entries are stale\n      builtin/maintenance: improve heuristic for \"rerere gc\"\n      cache-tree: drop `the_repository` in `cache_tree_fully_valid()`\n      cache-tree: remove dependency on `the_repository`\n      submodule-config: remove uses of `the_repository`\n      submodule-config: stop using `the_hash_algo`\n      submodule-config: stop registering submodule sources\n      builtin/grep: stop registering submodule ODB as source\n      odb: remove infrastructure to register submodule sources\n      tmp-objdir: drop unused function to register alternate\n      odb/packed: fix memory leaks when freeing source\n      builtin/multi-pack-index: refuse unknown sources with \"--object-dir=\"\n      t/helper: adapt read-midx to not link ad-hoc source anymore\n      t/helper: stop registering alternates in \"ref-store\" command\n      odb: remove the ability to link sources ad-hoc\n      ci: fix missing Ruby dependency in \"documentation\" job\n      builtin/fsck: use `fsck_obj_buffer()` when checking loose objects\n      builtin/fsck: merge `fsck_obj_buffer()` and `fsck_obj()`\n      builtin/fsck: de-globalize option handling\n      builtin/fsck: don't check alternates with \"--no-full\"\n      odb: provide infrastructure for pluggable fsck checks\n      builtin/fsck: move packfile verification into the packed source\n      builtin/fsck: move reverse index verification into the packed source\n      builtin/fsck: move bitmap verification into the packed source\n      builtin/fsck: move multi-pack index verification into the packed source\n      builtin/fsck: move loose object verification into the loose source\n\nPeter Krefting (1):\n      l10n: sv.po: Update Swedish translation\n\nPhilip Oakley (6):\n      hash-object: demonstrate a >4GB/LLP64 problem\n      object-file.c: use size_t for header lengths\n      hash algorithms: use size_t for section lengths\n      hash-object --stdin: verify that it works with >4GB/LLP64\n      hash-object: add another >4GB/LLP64 test case\n      hash-object: add a >4GB/LLP64 test case using filtered input\n\nPhillip Wood (13):\n      sequencer: factor out parsing of todo commands\n      status: improve rebase todo list parsing\n      t3400: restore coverage for note copying with apply backend\n      sequencer: be more careful with external merge\n      sequencer: never reschedule on failed commit\n      sequencer: remove unnecessary \"or\" in pick_one_commit()\n      sequencer: simplify handling of fixup with conflicts\n      sequencer: remove unnecessary condition in pick_one_commit()\n      sequencer: simplify pick_one_commit()\n      sequencer: use an enum to represent result of picking a commit\n      sequencer: do not record dropped commits as rewritten\n      rebase -i: fix counting of fixups after rebase --skip\n      rebase: remember fixup -c after skipping fixup/squash\n\nRené Scharfe (14):\n      cat-file: speed up default format\n      blame: reserve mark column only if necessary\n      strbuf: avoid redundant reset in strbuf_getwholeline()\n      tempfile: add repo_create_tempfile{,_mode}()\n      refs/packed: use repo_create_tempfile()\n      lockfile: add repo_hold_lock_file_for_update{,_timeout}{,_mode}()\n      tempfile: stop using the_repository\n      use repo_hold_lock_file_for_update{,_mode,_timeout}() with custom repos\n      remote-curl: simplify passing of push specs\n      branch: report active bisect run when rejecting delete\n      worktree add: don't read out of bounds in worktree_basename()\n      worktree add: reject separator-only path\n      worktree add: trim slashes when deriving branch name from path\n      worktree add: let worktree_basename() return string copy\n\nSZEDER Gábor (1):\n      t3420-rebase-autostash: don't try to grep non-existing files\n\nSahitya Chandra (1):\n      wt-status: avoid repeated insertion for untracked paths\n\nShardul Natu (3):\n      Makefile: add $(RUST_LIB) prerequisite to osxkeychain\n      Makefile: support universal macOS builds via RUST_TARGETS\n      contrib: wire up osxkeychain in contrib/Makefile on macOS\n\nShlok Kulshreshtha (7):\n      t1100: modernize test style\n      t1100: move creation of expected output into setup test\n      t7614: avoid hiding git's exit code in a pipe\n      userdiff: add support for Swift\n      test-lib-functions: add commit_body helper\n      t: use commit_body to extract commit message bodies\n      object-name: avoid use-after-free in get_oid_with_context_1()\n\nSiddharth Asthana (1):\n      rev-list: add --missing-only option to filter output\n\nSiddharth Shrimali (6):\n      builtin/repack: add --drop-filtered and --dry-run options\n      list-objects-filter: add list_objects_filter__filter_oidset()\n      repack-promisor: allow excluding objects from the rebuilt promisor pack\n      builtin/repack: enumerate promisor blobs for --drop-filtered\n      builtin/repack: actually drop filtered promisor blobs\n      builtin/repack: add guards for --drop-filtered\n\nStéfan Driaan Turvey (2):\n      l10n: af: add Afrikaans translation\n      l10n: af: fix review comments\n\nSwapnil Saste | INDIA (1):\n      doc: fix typo in submitting patches\n\nTamir Duberstein (4):\n      ref-filter: restore prefix-scoped iteration\n      commit-reach: reject cycles in contains walk\n      ref-filter: memoize --contains with generations\n      commit-reach: die on contains walk errors\n\nTaylor Blau (5):\n      t/perf: drop p5311's lookup-table permutation\n      pack-objects: support reachability bitmaps with `--path-walk`\n      pack-objects: extract `record_tree_depth()` helper\n      pack-objects: support `--delta-islands` with `--path-walk`\n      mailmap: map Taylor Blau's work address\n\nTed Nyman (9):\n      pathspec: use match for sparse-index expansion checks\n      stash: avoid sparse-index expansion for in-cone paths\n      http-fetch: correct --index-pack-arg documentation\n      http: avoid closing index-pack input twice\n      http: accept HTTP 416 for complete partial packs\n      http: avoid concurrent appends to partial packs\n      http: permit unlinking partial packs on Windows\n      fetch-pack: accept \"pack\" output for packfile URIs\n      fetch-pack: trace packfile URI downloads\n\nTian Yuchen (19):\n      environment: move 'protect_hfs' and 'protect_ntfs' into 'repo_config_values'\n      environment: move ignore_case into repo_config_values\n      config: use repo_ignore_case() to access core.ignorecase\n      environment: use 'repo->initialized' for repo_protect_hfs() and repo_protect_ntfs()\n      repository: introduce repo_config_values_clear()\n      environment: move excludes_file into repo_config_values\n      environment: move editor_program into repo_config_values\n      environment: move pager_program into repo_config_values\n      environment: move askpass_program into repo_config_values\n      environment: migrate apply_default_whitespace and apply_default_ignorewhitespace\n      environment: move push_default into repo_config_values\n      environment: move autorebase into repo_config_values\n      environment: move object_creation_mode into repo_config_values\n      repository: adjust the comment of config_values_private_\n      read-cache: remove redundant extern declarations\n      read-cache: pass 'repo' to 'ce_mode_from_stat()'\n      environment: move trust_executable_bit into repo_config_values\n      environment: move has_symlinks into repo_config_values\n      repository: move fetch_if_missing into struct repository\n\nTodd Zullinger (2):\n      doc/pack-refs: convert synopsis and options to new style\n      doc/refs: backtick-quote commands and options consistently\n\nToon Claes (5):\n      bundle-uri: drain remaining response on invalid bundle-uri lines\n      merge: fix leak with merge.defaultToUpstream\n      replay: add helper to put entry into replayed_commits\n      replay: resolve the replay base outside pick_regular_commit()\n      replay: offer an option to linearize the commit topology\n\nTravor Liu (1):\n      gitweb: shorten index hashes with trailing file modes\n\nTuomas Ahola (1):\n      lint-gitlink: don't use empty lower bound in .{0,8}\n\nVincent Mailhol (4):\n      completion: add 'git history' subcommands\n      completion: complete 'git history --empty' values\n      completion: complete 'git history --update-refs' values\n      completion: complete 'git history split' pathspecs\n\nWeijie Yuan (3):\n      MyFirstContribution: mention trimming quoted text in replies\n      doc: encourage review replies before rerolling\n      doc: advise batching patch rerolls\n\nWolfgang Faust (1):\n      imap-send: add --draft to set IMAP \\Draft flag\n\nYannik Tausch (2):\n      dir: do not apply prefix to negative pathspecs\n      dir: preserve pathspec prefix optimization with leading excludes\n\nYoichi NAKAYAMA (7):\n      worktree add: shouldn't dwim if -b or -B is given\n      checkout: extract function to display advice for ambiguous remotes\n      checkout: improve message for ambiguous remote branch name\n      worktree add: improve message for ambiguous remote branch name\n      worktree add: treat multiple matches with --guess-remote as an error\n      worktree repair: detect relative path in .git file correctly\n      mailmap: normalize name for Yoichi NAKAYAMA\n\nbasuradeluis (1):\n      gitk: spanish translations\n\nbrian m. carlson (6):\n      t1517: skip svn tests if svn is not installed\n      parse-options: add a separate case for help output on error\n      rev-parse: have --parseopt callers exit 0 on --help\n      parse-options: exit 0 on -h\n      hash: initialize context before cloning\n      rust: discard hash context when finished\n\nlilydjwg (2):\n      l10n: zh_CN: updated translation for 2.56\n      l10n: zh_CN: adopt review suggestions\n\nÉric NICOLAS (1):\n      submodule: resolve insteadOf aliases when matching remote\n\n"}]}