- Hook scripts defined via the configuration system can now be configured to run in parallel
- A new builtin git format-rev is introduced for pretty formatting one revision expression per line or commit object names found in running text
- git history learned fixup command
- A new subcommand git url-parse makes the internal URL parsing logic accessible
- The fsmonitor daemon has been implemented for Linux
- git cat-file --batch learns an in-line command mailmap that lets the user toggle use of mailmap
- git push learned to take a remote group name to push to, which causes pushes to multiple places
- The git-jump command in contrib/ has been taught to automatically pick a mode when invoked without arguments
- git rev-list and git log family of commands learned a new --max-count-oldest that picks oldest N commits in the range
- The userdiff driver for the Scheme language has been extended to cover other Lisp dialects
- Terminal control sequences coming over the sideband while talking to a remote repository are mostly disabled by default, except for ANSI color escape sequences
- git checkout -m another-branch was taught to create a stash to save the local changes
- The command line parser for git diff learned a few options take only non-negative integers
- The graph output from commands like git log --graph can now be limited to a specified number of lanes
- The git pack-objects --path-walk traversal has been integrated with several object filters, including blobless and sparse filters
- Rust support is enabled by default
- In a lazy clone, git cherry and git grep have been corrected to collect necessary object names and fetch them in bulk
- The repacking code has been refactored and compaction of MIDX layers have been implemented
- git restore --staged has been optimized to avoid unnecessarily expanding
- Misspelt proxy URL (e.g., httt://) now triggers a warning or failure
From Git
Git v2.55 Release Notes
UI, Workflows & Features
-
Hook scripts defined via the configuration system can now be configured to run in parallel.
-
The userdiff driver for the Scheme language has been extended to cover other Lisp dialects.
-
Terminal control sequences coming over the sideband while talking to a remote repository are mostly disabled by default, except for ANSI color escape sequences.
-
"ort" merge backend improvements.
-
"git checkout -m another-branch" was invented to deal with local changes to paths that are different between the current and the new branch, but it gave only one chance to resolve conflicts. The command was taught to create a stash to save the local changes.
-
A new builtin "git format-rev" is introduced for pretty formatting one revision expression per line or commit object names found in running text.
-
"git history" learned "fixup" command.
-
The internal URL parsing logic has been made accessible via a new subcommand "git url-parse".
-
Misspelt proxy URL (e.g., httt://...) did not trigger any warning or failure, which has been corrected. We had a regression in this update that broke https:// proxies, but that has been caught and corrected.
-
Document the fact that .git/info/exclude is shared across worktrees linked to the same repository.
-
The command line parser for "git diff" learned a few options take only non-negative integers.
-
The graph output from commands like "git log --graph" can now be limited to a specified number of lanes, preventing overly wide output in repositories with many branches.
-
The fsmonitor daemon has been implemented for Linux.
-
"git cat-file --batch" learns an in-line command "mailmap" that lets the user toggle use of mailmap.
-
The "git pack-objects --path-walk" traversal has been integrated with several object filters, including blobless and sparse filters.
-
"git push" learned to take a "remote group" name to push to, which causes pushes to multiple places, just like "git fetch" would do.
-
The 'git-jump' command (in contrib/) has been taught to automatically pick a mode (merge, diff, or ws) when invoked without arguments.
-
The documentation for
push.default = simplehas been clarified to better explain its behavior, making it clear that it pushes the current branch to a same-named branch on the remote, and detailing the upstream requirements for centralized workflows. -
The documentation for "--word-diff" has been extended with a bit of implementation detail of where these different words come from.
-
"git config foo.bar=baz" is not likely to be a request to read the value of such a variable with '=' in its name; rather it is plausible that the user meant "git config set foo.bar baz". Give advice when giving an error message.
-
"git rev-list" (and "git log" family of commands) learned a new "--max-count-oldest" that picks oldest N commits in the range instead of the usual newest.
-
Various AsciiDoc markup fixes in 'git config' documentation and related files to ensure lists and formatting are rendered correctly.
Performance, Internal Implementation, Development Support etc.
-
Promisor remote handling has been refactored and fixed in preparation for auto-configuration of advertised remotes.
-
Rust support is enabled by default (but still allows opting out); in Git version 3.0, Rust will become mandatory.
-
Preparation of the xdiff/ codebase to work with Rust.
-
Use a larger buffer size in the code paths to ingest pack stream.
-
Refactor service routines in the ref subsystem backends.
-
Shrink wasted memory in Myers diff that does not account for common prefix and suffix removal.
-
Enable expensive tests to catch topics that may cause breakages on integration branches closer to their origin in the contributor PR builds.
-
"git merge-base" optimization.
-
The limit_list() function that is one of the core part of the revision traversal infrastructure has been optimized by replacing its use of linear list with priority queue.
-
In a lazy clone, "git cherry" and "git grep" often fetch necessary blob objects one by one from promisor remotes. It has been corrected to collect necessary object names and fetch them in bulk to gain reasonable performance.
-
The logic to determine that branches in an octopus merge are independent has been optimized.
-
The consistency checks for the files reference backend have been updated to skip lock files earlier, avoiding unnecessary parsing of intermediate files.
-
The negotiation tip options in "git fetch" have been reworked to allow requiring certain refs to be sent as "have" lines, and to restrict negotiation to a specific set of refs.
-
The repacking code has been refactored and compaction of MIDX layers have been implemented, and incremental strategy that does not require all-into-one repacking has been introduced.
-
ODB transaction interface is being reworked to explicitly handle object writes.
-
Add a new odb "in-memory" source that is meant to only hold tentative objects (like the virtual blob object that represents the working tree file used by "git blame").
-
Many uses of the_repository has been updated to use a more appropriate struct repository instance in setup.c codepath.
-
Revision traversal optimization.
-
Build update.
-
The logic to lazy-load trees from the commit-graph has been made more robust by falling back to reading the commit object when the commit-graph is no longer available.
-
The "name" argument in git_connect() and related functions has been converted to a "service" enum to improve type safety and clarify its purpose.
-
'git restore --staged' has been optimized to avoid unnecessarily expanding the sparse index when operating on paths within the sparse checkout definition, by handling sparse directory entries at the tree level.
-
"git stash -p" has been optimized by reusing cached index entries in its temporary index, avoiding unnecessary lstat() calls on unchanged files.
-
The check for non-stale commits in the priority queue used by
paint_down_to_commonandahead_behindhas been optimized by replacing an O(N) scan with an O(1) counter, yielding performance improvements in repositories with wide histories. -
Reachability bitmap generation has been significantly optimized. By reordering tree traversal, caching object positions, and refining how pseudo-merge bitmaps are constructed, the performance of "git repack --write-midx-bitmaps" is improved, especially for large repositories and when using pseudo-merges.
-
Adding a decimal integer with strbuf_addf("%u") appears commonly; they have been optimized by using a custom formatter.
-
Formatting object name in full hexadecimal form has been optimized by using a new strbuf_add_oid_hex() helper function.
-
Encourage original authors to monitor the CI status.
-
The
git log -Limplementation has been refactored to use the standard diff output pipeline, enabling pickaxe and diff-filter to work as expected. Additionally, metadata-only diff formats like --raw and --name-only are now supported with -L. -
The loose object source has been refactored into a proper
struct odb_source. -
Guidelines on how to write a cover letter for a multi-patch series have been added to SubmittingPatches, which also got a new marker to separate the section for typofixes.
-
The setup logic to discover and configure repositories has been refactored, and the initialization of the object database has been centralized.
-
Many core configuration variables have been migrated from global variables into 'repo_config_values' to tie them to a specific repository instance, avoiding cross-repository state leakage.
-
Streaming revision walks have been optimized by using a priority queue for date-sorting commits, speeding up walks repositories with many merges.
-
A recent regression in t7527 that broke TAP output has been fixed, some other test noise that also broke TAP output has been silenced, and 'prove' is now configured to fail on invalid TAP output to prevent future regressions.
-
A handful of inappropriate uses of the_repository have been rewritten to use the right repository structure instance in the unpack-trees.c codepath.
-
"git index-pack" has been optimized by retaining child bases in the delta cache instead of immediately freeing them, letting the existing cache limit policy decide eviction.
-
git ls-files --modifiedandgit ls-files --deletedhave been optimized to filter with pathspec before calling lstat() when there is only a single pathspec item, avoiding unnecessary filesystem access for entries that will not be shown. -
The UNUSED macro in 'compat/posix.h' has been updated to use a newly introduced GIT_CLANG_PREREQ macro for compiler version checks, and the existing GIT_GNUC_PREREQ macro has been modernized to use explicit major/minor comparisons rather than bit-shifting.
-
Wean the Windows builds in GitLab CI procedure away from (unfortunately unreliable) Chocolatey to install dependencies. (merge 0e7b51fed2 ps/gitlab-ci-windows later to maint).
-
Build-fix for 32-bit Windows.
-
Xcode 15 and later has a linker set to complain when the same library archive is listed twice on the command line. Squelch the annoyance.
Fixes since v2.54
-
Code clean-up to use the right instance of a repository instance in calls inside refs subsystem. (merge 57c590feb9 sp/refs-reduce-the-repository later to maint).
-
The check that implements the logic to see if an in-core cache-tree is fully ready to write out a tree object was broken, which has been corrected. (merge 521731213c dl/cache-tree-fully-valid-fix later to maint).
-
The test suite harness and many individual test scripts have been updated to work correctly when 'set -e' is in effect, which helps detect misspelled test commands. (merge ffe8005b9d ps/test-set-e-clean later to maint).
-
Revert a recent change that introduced a regression to help mksh users.
-
Update various GitHub Actions versions.
-
Avoid hitting the pathname limit for socks proxy socket during the test..
-
To help Windows 10 installations, avoid removing files whose contents are still mmap()'ed.
-
The 'git backfill' command now rejects revision-limiting options that are incompatible with its operation, uses standard documentation for revision ranges, and includes blobs from boundary commits by default to improve performance of subsequent operations. (merge a1ad4a0fca en/backfill-fixes-and-edges later to maint).
-
"git grep" update. (merge 9ff4b5ab1b rs/grep-column-only-match-fix later to maint).
-
Headers from glibc 2.43 when used with clang does not allow disabling C11 language features, causing build failures..
-
The 'http.emptyAuth=auto' configuration now correctly attempts Negotiate authentication before falling back to manual credentials. This allows seamless Kerberos ticket-based authentication without requiring users to explicitly set 'http.emptyAuth=true'. (merge 4919938d28 mc/http-emptyauth-negotiate-fix later to maint).
-
Ramifications of turning off commit-graph has been documented a bit more clearly. (merge 48c855bb8f kh/doc-commit-graph later to maint).
-
"git rebase --update-refs", when used with an rebase.instructionFormat with "%d" (describe) in it, tried to update local branch HEAD by mistake, which has been corrected. (merge 106b6885c7 ag/rebase-update-refs-limit-to-branches later to maint). …