-
Advice shown by "git status" when the local branch is behind or has diverged from its push branch has been updated to suggest "git pull <remote> <branch>".
-
The handling of promisor-remote protocol capability has been updated to allow the other side to add to the list of promisor remotes via the promisor.acceptFromServerURL configuration variable.
-
The ort merge backend has been hardened against corrupt trees by ensuring it aborts under appropriate error conditions.
-
The
fetch.followRemoteHEADconfiguration variable has been added to provide a default for the per-remoteremote.<name>.followRemoteHEADsetting. -
"git log --follow" has been updated to better handle non-linear history, in which the path being tracked gets renamed differently in multiple history lines.
-
The "git repo info" command has been taught new keys to output both absolute and relative paths for "gitdir" and "commondir", supported by a new path-formatting helper extracted from "git rev-parse".
-
When git push origin/main or git branch origin main is run, the command is now recognized as a potential typo, and advice has been added to offer a typo fix.
-
The git refs toolbox has been extended with new create, delete, update, and rename subcommands to create, delete, update, and rename references, respectively.
-
The experimental git history command has been taught a new drop subcommand to remove a commit, with its descendants replayed onto its parent.
-
The alignment of commit object name abbreviations in git blame output has been optimized to reserve a column for marks (caret, question mark, or asterisk) only when such marks are actually shown.
-
Option parsing with git rev-parse --parseopt and in most git subcommands has been updated to exit with 0 (instead of 129) when the help option (-h or --help) is requested directly by the user, aligning with standard Unix convention.
-
The [includeIf "condition"] conditional inclusion facility for configuration files has been taught to use the location of the worktree in its condition.
-
The usage string and SYNOPSIS for git fast-export have been standardized to make them consistent with each other and with other commands.
-
git log --graph has been modified to visually distinguish parentless root commits (and commits that become roots due to history simplification) by indenting them, preventing them from appearing falsely related to unrelated commits rendered immediately above them.
-
Userdiff patterns for Swift have been added, with support for Swift-specific constructs such as attributes, modifiers, failable initializers, and generics.
-
Configuration file locking has been updated to retry for a short period, avoiding failures when multiple processes attempt to update the configuration simultaneously.
-
The remote-object-info command has been added to git cat-file --batch-command, allowing clients to request object metadata (currently size) from a remote server via protocol v2 without downloading the entire object. Format placeholders are dynamically filtered on the client based on server-advertised capabilities, returning empty strings for inapplicable or unsupported fields.
-
git branch -d has been taught to report when a branch cannot be deleted because it is being used in an active bisect run.
-
git mv has been updated to check for a missing destination leading directory during the checking phase, allowing git mv -n to report the failure. The error message when the rename(2) syscall fails has also been improved to name both the source and the destination.
-
The refactoring of setup.c has been continued to drop remaining global state (
git_work_tree_cfg,is_bare_repository_cfg), updatingis_bare_repository()to no longer implicitly rely onthe_repository. -
Project-specific configuration for b4 has been introduced, and the documentation has been updated to recommend using it as a streamlined method for submitting patches.
-
The default format path of git cat-file --batch has been optimized to use strbuf_add_oid_hex() and strbuf_add_uint() instead of strbuf_addf(), yielding a noticeable speedup.
-
Commands that list branches and tags (like git branch and git tag) have been optimized to pass the namespace prefix when initializing their ref iterator, avoiding a loose-ref scaling regression in repositories with many unrelated loose references.
-
The packed object source has been refactored into a proper struct odb_source.
-
The global configuration variables protect_hfs and protect_ntfs have been migrated into struct repo_config_values to tie them to per-repository configuration state.
-
The trailer sections in SubmittingPatches have been updated to encourage use of standard trailers.
-
The documentation in SubmittingPatches has been updated to clarify how patch contributors should respond to design and viability critiques, and how the resolution of such critiques should be recorded in the final commit messages.
-
The pack-objects command has been updated to support reachability bitmaps and delta-islands concurrently with the
--path-walkoption, allowing faster packaging by falling back to path-walk when bitmaps cannot fully satisfy the request. -
Documentation on community contribution guidelines has been updated to encourage replying to review comments before rerolling, and to advise a default limit of at most one reroll per day to give reviewers across different time zones enough time to participate.
-
The lazy priority queue optimization pattern (deferring actual removal in prio_queue_get() to allow get+put fusion) has been folded directly into prio_queue itself, speeding up commit traversal workflows and simplifying callers.
-
The reprepare() callback for object database sources has been generalized into a prepare() callback with an optional flush cache flag, and a new odb_prepare() wrapper has been introduced to allow pre-opening object database sources.
-
The whence field in struct object_info has been removed. The backend-specific object information retrieval has been refactored into an opt-in struct object_info_source structure.
-
A racy build failure under Meson has been corrected by ensuring that the generated header file hook-list.h is built before compiling files in builtin_sources that depend on it.
-
The repository discovery and repository configuration phases, which were previously intertwined in setup.c, have been split. Repository discovery has been updated to populate a struct repo_discovery without modifying the repository state, which is then taken by repository configuration to initialize the repository, paving the way for clean unification of repository configuration.
-
The SubmittingPatches document has been updated to explicitly describe the expectation for contributors to retract or abandon their patch series when they are no longer pursuing it.
-
The contributor guide has been updated to advise new contributors to trim irrelevant quoted text when replying to review comments, matching the existing advice given to reviewers.
-
The build system has been updated to support building universal macOS binaries when Rust is enabled, by compiling separate static archives for each target triple listed in RUST_TARGETS and combining them using the macOS lipo tool. The git-credential-osxkeychain helper has been updated to link against $(RUST_LIB) when Rust is enabled.
-
The test suite has been updated to use the test_grep helper instead of bare grep for test assertions, allowing file contents to be printed on failure for easier debugging. A new greplint linter has been introduced to detect and prevent new bare grep assertions from being added to the test suite.
-
The pipelines in t1410-reflog.sh have been replaced with the test_stdout_line_count helper to avoid suppressing the exit code of git commands, ensuring failures are not hidden from the test suite.
-
The cache-scanning loop in next_cache_entry() has been optimized to avoid rescanning already-unpacked index entries, preventing a quadratic performance slow-down when diffing the working tree against a commit with a pathspec matching early index entries.
-
The global configuration variable ignore_case (representing the core.ignorecase configuration) has been migrated into struct repo_config_values to tie it to a specific repository instance.
-
The performance of ref updates and reads using the reftable backend in the presence of many deletion tombstone records has been optimized by removing the tombstone suppression flag from the merged iterator and instead skipping tombstones at higher-level call sites where iteration bounds are known.
-
Various code paths have been hardened against potential NULL-pointer dereferences and invalid file descriptor accesses flagged by Coverity.
-
The in-tree b4 cover letter template has been updated to include the change-id trailer, ensuring that sent tags generated by b4 contain the required tracking information for subsequent runs.
-
git receive-pack has been refactored to use ODB transaction interfaces instead of directly managing tmp_objdir for staging incoming objects, bringing it closer to being ODB backend agnostic.
-
The test script t/t9811-git-p4-label-import.sh has been modernized to use test_path_is_file and test_path_is_missing instead of raw test -f and ! test -f calls.
-
A redundant strbuf_reset() call in the HAVE_GETDELIM path of strbuf_getwholeline() has been removed, as getdelim() overwrites the buffer and the length is updated afterward.
-
The object database enumeration interface odb_for_each_object() has been taught to accept object filters, allowing the underlying backends to optimize the traversal by using reachability bitmaps when available. git cat-file --batch-all-objects has been updated to use this generic interface, simplifying its code and avoiding direct access to ODB backend internals.
-
The test script t/t1100-commit-tree-options.sh has been modernized by converting test cases to the modern style (using single quotes and tab indentation) and moving the creation of the expected file inside the setup test so it runs under the protection of the test harness.
-
The test script t/t7614-merge-signoff.sh has been updated to avoid suppressing the exit code of git commands in a pipe.
-
The git rev-list --no-walk command has been corrected to restore pathspec filtering, which was lost when the streaming walk was refactored.
-
The ref subsystem and the worktree API have been refactored to pass a repository pointer down the call chain, allowing them to drop references to the global the_repository variable. As part of this, the handling of the core.packedRefsTimeout configuration has been moved into the per-repository ref store structure.
-
git branch --contains and git for-each-ref --contains have been optimized to use the memoized commit traversal previously used only by git tag --contains, significantly speeding up connectivity checks across many candidate refs with shared history.
-
The passing of push destination specifications in the remote-curl helper has been simplified by removing the explicit count parameter and relying on the NULL-termination of the array.
-
The dependency on the global the_repository variable in the refspec.c API has been removed by passing the hash algorithm explicitly to refspec-parsing functions and storing it in struct refspec.
-
The enumeration of untracked and ignored files in git status has been optimized by avoiding quadratic complexity when inserting into string lists, reducing the construction cost from O(n^2) to O(n log n).
-
The copy_file() and copy_file_with_time() functions have been refactored to take a repository parameter, allowing the removal of the implicit dependency on the global the_repository variable in copy.c.
-
The tempfile and lockfile APIs have been refactored to stop depending on the the_repository global variable, and their callers have been updated to use the repository-aware variants.
-
The trust_executable_bit (coming from the core.filemode configuration) has been migrated into struct repo_config_values to tie it to a specific repository instance.
-
The excludes_file and various other global configuration variables (including editor_program, pager_program, askpass_program, and push_default) have been migrated into the per-repository structure.
-
The git stash push command has been optimized to avoid unnecessary sparse index expansion when pathspecs are wholly inside the sparse-checkout cone. Also, a potential out-of-bounds read in the sparse-index expansion check helper pathspec_needs_expanded_index() has been fixed by consistently using the parsed, prefixed path.
-
The logic to write loose objects has been refactored and moved from object-file.c to the loose backend source file odb/source-loose.c, making the loose backend more self-contained. This is achieved by first refactoring force_object_loose() to use generic ODB write interfaces instead of loose-backend internals.
-
Object database housekeeping in git gc and git maintenance has been refactored to be pluggable. The files-backend-specific logic, including incremental and geometric repacking as well as object pruning, has been moved out of the command implementation and into the files object database source, enabling future alternative object database backends to implement their own housekeeping services.
-
The image version used by the static-analysis CI job has been bumped to ubuntu-latest (Ubuntu 24.04), which brings in a newer Coccinelle version that resolves a severe performance regression. A false positive warning from the CHECK_ASSERTION_SIDE_EFFECTS build with GCC 15 in the Bloom filter code has also been silenced to facilitate the image upgrade. (merge 1a1579c42d jk/ci-static-analysis-image-bump later to maint).
-
The alias tests in t/t0014-alias.sh have been updated to dynamically query the list of deprecated commands using git --list-cmds=deprecated to avoid test failures when running with WITH_BREAKING_CHANGES in a build directory that contains stale executables of formerly deprecated commands. (merge bc57ecb915 jk/t0014-dynamic-deprecated-cmds later to maint).
-
The code path that deals with relative paths in the diff-lib has been cleaned up.
-
The get_commit_action() function has been refactored to be a pure predicate by moving the side-effecting line-level log range folding to simplify_commit(). This ensures that evaluating a commit’s action before the walk reaches it does not prematurely mutate its tracked line ranges, making it safer for potential lookahead evaluations.
-
Synopsis and options in the documentation for git format-patch, git imap-send, git send-email, and git request-pull have been updated to the modern style.
-
A new test helper commit_body() has been introduced to print the message body of a commit, and various tests have been updated to use it instead of spelling out the command pipeline manually and losing the exit status of the git cat-file command on the upstream of the pipe.
-
Tests for git merge-base --is-ancestor have been added to cover exit codes (0 for success, 1 for non-ancestor, 128 for errors) and to ensure it cannot be combined with --all.
-
A regression in the error diagnosis code for invalid .git files has been fixed, avoiding a potential NULL-pointer crash when reporting that a .git file does not point to a valid repository. (merge 54a441bcea jk/setup-gitfile-diag-fix later to maint).
-
Support for hashing loose or packed objects larger than 4GB on Windows and other LLP64 platforms has been improved by converting object header buffers and data-handling functions from unsigned long to size_t. (merge d99e13d0be po/hash-object-size-t later to maint).
-
The display of the rebase todo list in "git status" has been improved to correctly abbreviate object IDs for more commands and avoid misinterpreting refs as object IDs. (merge 6f34e5f9e3 pw/status-rebase-todo later to maint).
-
Reference backend configuration has been updated to load lazily to avoid recursive calls during repository initialization when onbranch configuration conditions are evaluated. This has also fixed a memory leak and allowed the unused
chdir_notify_reparent()machinery to be dropped. (merge d6522d01df ps/refs-onbranch-fixes later to maint). -
The connectivity check has been refactored to search for promisor objects in a generic way using the object database interface, rather than iterating packfiles directly. This allows connectivity checks to work properly in repositories that do not use packfiles. (merge 66ee9cb930 ps/connected-generic-promisor-checks later to maint).
-
A test checking interactions between git rebase --quit and autostash in t3420-rebase-autostash.sh has been corrected to use test_path_is_missing instead of ! grep on a file that shouldn’t exist in the conflicted state. (merge eaad121fef sg/t3420-do-not-grep-in-missing-file later to maint).
-
The GPG and SSH signature parsing code has been corrected to strip carriage return characters only when they immediately precede line feeds, instead of unconditionally stripping all carriage returns. (merge 5dea8b690b ad/gpg-strip-cr-before-lf later to maint).
-
A memory leak in the reftable_writer_new() initialization function has been fixed by delaying the allocation of struct reftable_writer until after input options are validated. (merge c6fb3b9c3e jk/reftable-leakfix later to maint).
-
A memory leak in the --base handling of git format-patch has been plugged, and the leak reporting of the test suite when running under a TAP harness has been improved. (merge 973a0373ff jk/format-patch-leakfix later to maint).
-
A write file stream resource leak has been fixed as part of a code cleanup. (merge ebb4d2ffa3 jc/history-message-prep-fix later to maint).
-
Various memory leaks in the Bloom-filter code paths that are exposed when running tests with the GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1 environment variable have been plugged. (merge 459088ec2e jk/bloom-leak-fixes later to maint).
-
The wincred credential helper has been updated to avoid memory corruption when erasing credentials and to prevent silent credential loss when storing OAuth tokens, by correcting buffer allocations and arguments passed to safe-CRT APIs. (merge f635ab9ab4 js/wincred-fixes later to maint).
-
Various code paths that initialize a cryptographic hash context but bail out or finish without calling git_hash_final() have been taught to call git_hash_discard() to release allocated resources, fixing memory leaks when Git is built with non-default backends like OpenSSL or libgcrypt. (merge 600588d2aa jk/hash-algo-leak-fixes later to maint).
-
Various resource leaks, invalid file descriptor closures, and process handle ownership issues flagged by Coverity have been fixed. (merge 9184231173 js/coverity-fixes later to maint).
-
Dockerized CI jobs running in private GitHub repositories have been adjusted to use explicit process and file limits, preventing resource exhaustion errors on private runners. (merge bad766fbac js/ci-dockerized-pid-limit later to maint).
-
Various test scripts have been updated to clean up large temporary files and repositories, reducing peak disk usage during testing. Also, expensive tests have been disabled on platforms that lack sufficient resources (like 32-bit platforms and Windows CI runners), and the long test suite has been enabled in GitLab CI. (merge 84248444ad ps/t-fixes-for-git-test-long later to maint).
-
The UTF-8 precomposition wrapper on macOS has been updated to use a flexible array member to represent the name of a directory entry, preventing fortified libc checks from failing when the name is reallocated to be larger than NAME_MAX bytes. (merge 1eb281159f ih/precompose-flex-array later to maint).
-
The git_hash_*() wrappers have been updated to be used consistently across the codebase instead of direct calls to members of struct git_hash_algo, and git_hash_discard() has been made idempotent to simplify cleanups. (merge 9e396aa553 jk/git-hash-cleanups later to maint).
-
The sideband demultiplexer has been updated to recognize ANSI SGR escape sequences that use colon-separated subfields (e.g., for 256-color or true-color codes). (merge 3792b2aea4 mm/sideband-ansi-sgr-colon-fix later to maint).
-
The reftable code has been hardened against corrupted tables by fixing out-of-bounds writes, out-of-bounds reads, and abort calls during parsing. (merge ca93c27328 ps/reftable-hardening later to maint).
-
A description in the release notes for Git 2.55.0 has been retroactively updated to clarify that Rust support is enabled by default, but still optional, and will become mandatory in Git 3.0. (merge 18b2009d14 jc/relnotes-2.55-rust-fix later to maint).
-
The early-exit optimization in paint_down_to_common() has been gated on the queue being generation-ordered, fixing a bug where git merge-base (without --all) could return incorrect results on repositories with v1 commit graphs and clock skew. (merge ae68032a8d kk/commit-reach-find-all-fix later to maint).
-
The client-side parser of the server-advertised bundle-URI list has been updated to drain the remaining response in order to avoid protocol desynchronization when the server sends a misconfigured list. Also, the server-side has been taught to omit empty configuration values instead of sending invalid key-value lines. (merge 50de1169e4 tc/bundle-uri-empty-fix later to maint).
-
The topo_levels slab was propagated only to the topmost layer of a split commit-graph chain, causing topological levels for commits in base layers to be recomputed during incremental writes. This has been corrected.
-
The stream-based object signature verification path has been corrected to avoid double-closing the stream on read errors. (merge cfd52a74a0 ps/odb-stream-double-close-fix later to maint).
-
The -i shorthand for the --init option, which was accepted by the git submodule update command until it was broken in a modernization of the option-parsing code, has been restored. (merge ff1da37f58 dm/submodule-update-i-shorthand later to maint).
-
An accidental use of the %zu format specifier in git submodule—helper has been corrected to use PRIuMAX and cast the value to uintmax_t to avoid portability issues. (merge 3279c13c00 jc/submodule-helper-avoid-zu later to maint).
-
The rebase post-rewrite notes-copying logic has been corrected. When a commit is dropped during rebase (e.g., because its changes are already upstream), it is no longer recorded as rewritten, preventing its notes from being copied to an unrelated commit. (merge 42554b78fd pw/rebase-drop-notes-with-commit later to maint).
-
A few memory problems in the Rust interface to C hash functions have been corrected. The Clone implementation of CryptoHasher now properly initializes the context before cloning, and its Drop implementation now discards the context to prevent leaks.
-
The object ID shortening and linking in the commitdiff view of gitweb has been corrected to work even when the index line carries a trailing file mode. (merge fda513d6fe tl/gitweb-shorten-hashes-with-modes later to maint).
-
When the push remote is specified as a URL, the fetch refspec of a uniquely matching configured remote is now used to find and update the remote-tracking branch (e.g., @{push}).
-
Traversals with --exclude-first-parent-only have been corrected to properly stop after the first parent even when it has already been marked as SEEN. (merge 47382f7398 jc/exclude-first-parent-seen later to maint).
-
A segfault when git clone --revision talks to a server that does not support protocol v2 (falling back to protocol v0) has been corrected. (merge 1034ad383f af/clone-revision-v0-segfault-fix later to maint).
-
rewrites_release() in remote.c has been updated to free struct rewrite instances, their .instead_of arrays, and their contents. (merge dcef3bf041 jc/remote-insteadof-leakfix later to maint).
-
The remote-matching logic for submodules has been corrected to resolve url.*.insteadOf aliases before comparing the inventoried URL from .gitmodules with the URLs of configured remotes.
-
git diff --relative running with --cached has been corrected to avoid a segfault when encountering unmerged paths outside the prefix. (merge 447126ed7d jk/diff-relative-cached-unmerged later to maint).
-
Two bugs in how git rebase handles skipped fixup and squash commands have been fixed. One bug caused an incorrect commit count to be shown in the template message when multiple commands were skipped, and another prevented the editor from opening when the final command in a chain containing fixup -c was skipped.
-
Git for Windows has been updated to avoid auto-detecting the symlink type if the target path starts with a slash, preventing NTLM credential leaks when checking out repositories with crafted symbolic links pointing to network shares.
-
git cat-file --batch-command that asked for contents without type segfaults, which has been corrected. (merge 2abc7f0304 jk/cat-file-batch-wo-type-fix later to maint).
-
A memory leak in git merge when run without arguments (which triggers the default-to-upstream path) has been fixed. A test has been added to cover this case. (merge 68cce04a02 tc/merge-default-to-upstream-leakfix later to maint).
-
A boundary case check in reachability bitmap traversal has been corrected to properly handle the object at position zero, which was previously skipped, leading to redundant bitmap loading. (merge b56b48301e dl/pack-bitmap-position-zero later to maint).
-
A crash in the sparse-index collapse code when encountering an invalidated cache-tree node (due to an intent-to-add path) has been fixed by avoiding collapsing such subtrees. (merge eede1e69fe ds/sparse-index-ita-crash later to maint).
-
Documentation for git replay has been updated to refer to its configuration variables. (merge 48c0549f5c kh/doc-replay-config later to maint).