Raw
1 Git v2.55 Release Notes
2 =======================
3
4 UI, Workflows & Features
5 ------------------------
6
7 * Hook scripts defined via the configuration system can now be
8 configured to run in parallel.
9
10 * The userdiff driver for the Scheme language has been extended to
11 cover other Lisp dialects.
12
13 * Terminal control sequences coming over the sideband while talking
14 to a remote repository are mostly disabled by default, except for
15 ANSI color escape sequences.
16
17 * "ort" merge backend improvements.
18
19 * "git checkout -m another-branch" was invented to deal with local
20 changes to paths that are different between the current and the new
21 branch, but it gave only one chance to resolve conflicts. The command
22 was taught to create a stash to save the local changes.
23
24 * A new builtin "git format-rev" is introduced for pretty formatting
25 one revision expression per line or commit object names found in
26 running text.
27
28 * "git history" learned "fixup" command.
29
30 * The internal URL parsing logic has been made accessible via a new
31 subcommand "git url-parse".
32
33 * Misspelt proxy URL (e.g., httt://...) did not trigger any warning
34 or failure, which has been corrected. We had a regression in this
35 update that broke https:// proxies, but that has been caught and
36 corrected.
37
38 * Document the fact that .git/info/exclude is shared across worktrees
39 linked to the same repository.
40
41 * The command line parser for "git diff" learned a few options take
42 only non-negative integers.
43
44 * The graph output from commands like "git log --graph" can now be
45 limited to a specified number of lanes, preventing overly wide output
46 in repositories with many branches.
47
48 * The fsmonitor daemon has been implemented for Linux.
49
50 * "git cat-file --batch" learns an in-line command "mailmap"
51 that lets the user toggle use of mailmap.
52
53 * The "git pack-objects --path-walk" traversal has been integrated
54 with several object filters, including blobless and sparse filters.
55
56 * "git push" learned to take a "remote group" name to push to, which
57 causes pushes to multiple places, just like "git fetch" would do.
58
59 * The 'git-jump' command (in contrib/) has been taught to automatically
60 pick a mode (merge, diff, or ws) when invoked without arguments.
61
62 * The documentation for `push.default = simple` has been clarified to
63 better explain its behavior, making it clear that it pushes the
64 current branch to a same-named branch on the remote, and detailing
65 the upstream requirements for centralized workflows.
66
67 * The documentation for "--word-diff" has been extended with a bit of
68 implementation detail of where these different words come from.
69
70 * "git config foo.bar=baz" is not likely to be a request to read the
71 value of such a variable with '=' in its name; rather it is plausible
72 that the user meant "git config set foo.bar baz". Give advice when
73 giving an error message.
74
75 * "git rev-list" (and "git log" family of commands) learned a new "--max-count-oldest"
76 that picks oldest N commits in the range instead of the usual newest.
77
78 * Various AsciiDoc markup fixes in 'git config' documentation and
79 related files to ensure lists and formatting are rendered correctly.
80
81
82 Performance, Internal Implementation, Development Support etc.
83 --------------------------------------------------------------
84
85 * Promisor remote handling has been refactored and fixed in
86 preparation for auto-configuration of advertised remotes.
87
88 * Rust support is enabled by default (but still allows opting out);
89 in Git version 3.0, Rust will become mandatory.
90
91 * Preparation of the xdiff/ codebase to work with Rust.
92
93 * Use a larger buffer size in the code paths to ingest pack stream.
94
95 * Refactor service routines in the ref subsystem backends.
96
97 * Shrink wasted memory in Myers diff that does not account for common
98 prefix and suffix removal.
99
100 * Enable expensive tests to catch topics that may cause breakages on
101 integration branches closer to their origin in the contributor PR
102 builds.
103
104 * "git merge-base" optimization.
105
106 * The limit_list() function that is one of the core part of the
107 revision traversal infrastructure has been optimized by replacing
108 its use of linear list with priority queue.
109
110 * In a lazy clone, "git cherry" and "git grep" often fetch necessary
111 blob objects one by one from promisor remotes. It has been corrected
112 to collect necessary object names and fetch them in bulk to gain
113 reasonable performance.
114
115 * The logic to determine that branches in an octopus merge are
116 independent has been optimized.
117
118 * The consistency checks for the files reference backend have been updated
119 to skip lock files earlier, avoiding unnecessary parsing of
120 intermediate files.
121
122 * The negotiation tip options in "git fetch" have been reworked to
123 allow requiring certain refs to be sent as "have" lines, and to
124 restrict negotiation to a specific set of refs.
125
126 * The repacking code has been refactored and compaction of MIDX layers
127 have been implemented, and incremental strategy that does not require
128 all-into-one repacking has been introduced.
129
130 * ODB transaction interface is being reworked to explicitly handle
131 object writes.
132
133 * Add a new odb "in-memory" source that is meant to only hold
134 tentative objects (like the virtual blob object that represents the
135 working tree file used by "git blame").
136
137 * Many uses of the_repository has been updated to use a more
138 appropriate struct repository instance in setup.c codepath.
139
140 * Revision traversal optimization.
141
142 * Build update.
143
144 * The logic to lazy-load trees from the commit-graph has been made
145 more robust by falling back to reading the commit object when
146 the commit-graph is no longer available.
147
148 * The "name" argument in git_connect() and related functions has been
149 converted to a "service" enum to improve type safety and clarify its
150 purpose.
151
152 * 'git restore --staged' has been optimized to avoid unnecessarily expanding
153 the sparse index when operating on paths within the sparse checkout
154 definition, by handling sparse directory entries at the tree level.
155
156 * "git stash -p" has been optimized by reusing cached index
157 entries in its temporary index, avoiding unnecessary lstat()
158 calls on unchanged files.
159
160 * The check for non-stale commits in the priority queue used by
161 `paint_down_to_common` and `ahead_behind` has been optimized by
162 replacing an O(N) scan with an O(1) counter, yielding performance
163 improvements in repositories with wide histories.
164
165 * Reachability bitmap generation has been significantly optimized. By
166 reordering tree traversal, caching object positions, and refining how
167 pseudo-merge bitmaps are constructed, the performance of "git repack
168 --write-midx-bitmaps" is improved, especially for large repositories
169 and when using pseudo-merges.
170
171 * Adding a decimal integer with strbuf_addf("%u") appears commonly;
172 they have been optimized by using a custom formatter.
173
174 * Formatting object name in full hexadecimal form has been optimized
175 by using a new strbuf_add_oid_hex() helper function.
176
177 * Encourage original authors to monitor the CI status.
178
179 * The `git log -L` implementation has been refactored to use the
180 standard diff output pipeline, enabling pickaxe and diff-filter to
181 work as expected. Additionally, metadata-only diff formats like
182 --raw and --name-only are now supported with -L.
183
184 * The loose object source has been refactored into a proper `struct
185 odb_source`.
186
187 * Guidelines on how to write a cover letter for a multi-patch series
188 have been added to SubmittingPatches, which also got a new marker
189 to separate the section for typofixes.
190
191 * The setup logic to discover and configure repositories has been
192 refactored, and the initialization of the object database has been
193 centralized.
194
195 * Many core configuration variables have been migrated from global
196 variables into 'repo_config_values' to tie them to a specific
197 repository instance, avoiding cross-repository state leakage.
198
199 * Streaming revision walks have been optimized by using a priority queue
200 for date-sorting commits, speeding up walks repositories with many
201 merges.
202
203 * A recent regression in t7527 that broke TAP output has been fixed,
204 some other test noise that also broke TAP output has been silenced,
205 and 'prove' is now configured to fail on invalid TAP output to
206 prevent future regressions.
207
208 * A handful of inappropriate uses of the_repository have been
209 rewritten to use the right repository structure instance in the
210 unpack-trees.c codepath.
211
212 * "git index-pack" has been optimized by retaining child bases in the
213 delta cache instead of immediately freeing them, letting the existing
214 cache limit policy decide eviction.
215
216 * `git ls-files --modified` and `git ls-files --deleted` have been
217 optimized to filter with pathspec before calling lstat() when there is
218 only a single pathspec item, avoiding unnecessary filesystem access
219 for entries that will not be shown.
220
221 * The UNUSED macro in 'compat/posix.h' has been updated to use a
222 newly introduced GIT_CLANG_PREREQ macro for compiler version
223 checks, and the existing GIT_GNUC_PREREQ macro has been modernized
224 to use explicit major/minor comparisons rather than bit-shifting.
225
226 * Wean the Windows builds in GitLab CI procedure away from
227 (unfortunately unreliable) Chocolatey to install dependencies.
228 (merge 0e7b51fed2 ps/gitlab-ci-windows later to maint).
229
230 * Build-fix for 32-bit Windows.
231
232 * Xcode 15 and later has a linker set to complain when the same library
233 archive is listed twice on the command line. Squelch the annoyance.
234
235
236 Fixes since v2.54
237 -----------------
238
239 * Code clean-up to use the right instance of a repository instance in
240 calls inside refs subsystem.
241 (merge 57c590feb9 sp/refs-reduce-the-repository later to maint).
242
243 * The check that implements the logic to see if an in-core cache-tree
244 is fully ready to write out a tree object was broken, which has
245 been corrected.
246 (merge 521731213c dl/cache-tree-fully-valid-fix later to maint).
247
248 * The test suite harness and many individual test scripts have been
249 updated to work correctly when 'set -e' is in effect, which helps
250 detect misspelled test commands.
251 (merge ffe8005b9d ps/test-set-e-clean later to maint).
252
253 * Revert a recent change that introduced a regression to help mksh users.
254
255 * Update various GitHub Actions versions.
256
257 * Avoid hitting the pathname limit for socks proxy socket during the
258 test..
259
260 * To help Windows 10 installations, avoid removing files whose
261 contents are still mmap()'ed.
262
263 * The 'git backfill' command now rejects revision-limiting options that
264 are incompatible with its operation, uses standard documentation for
265 revision ranges, and includes blobs from boundary commits by default
266 to improve performance of subsequent operations.
267 (merge a1ad4a0fca en/backfill-fixes-and-edges later to maint).
268
269 * "git grep" update.
270 (merge 9ff4b5ab1b rs/grep-column-only-match-fix later to maint).
271
272 * Headers from glibc 2.43 when used with clang does not allow
273 disabling C11 language features, causing build failures..
274
275 * The 'http.emptyAuth=auto' configuration now correctly attempts
276 Negotiate authentication before falling back to manual credentials.
277 This allows seamless Kerberos ticket-based authentication without
278 requiring users to explicitly set 'http.emptyAuth=true'.
279 (merge 4919938d28 mc/http-emptyauth-negotiate-fix later to maint).
280
281 * Ramifications of turning off commit-graph has been documented a bit
282 more clearly.
283 (merge 48c855bb8f kh/doc-commit-graph later to maint).
284
285 * "git rebase --update-refs", when used with an rebase.instructionFormat
286 with "%d" (describe) in it, tried to update local branch HEAD by
287 mistake, which has been corrected.
288 (merge 106b6885c7 ag/rebase-update-refs-limit-to-branches later to maint).
289
290 * Tweak the way how sideband messages from remote are printed while
291 we talk with a remote repository to avoid tickling terminal
292 emulator glitches.
293 (merge 31e8fcabd8 rs/sideband-clear-line-before-print later to maint).
294
295 * The configuration variable submodule.fetchJobs was not read correctly,
296 which has been corrected.
297 (merge aa45a5902f sj/submodule-update-clone-config-fix later to maint).
298
299 * Update code paths that assumed "unsigned long" was long enough for
300 "size_t".
301 (merge 7a094d68a2 js/objects-larger-than-4gb-on-windows later to maint).
302
303 * Stop using unmaintained custom allocator in Windows build which was
304 the last user of the code.
305
306 * The computation to shorten the filenames shown in diffstat measured
307 width of individual UTF-8 characters to add up, but forgot to take
308 into account error cases (e.g., an invalid UTF-8 sequence, or a
309 control character).
310 (merge 09d86a3b98 en/diffstat-utf8-truncation-fix later to maint).
311
312 * Some tests assume that bare repository accesses are by default
313 allowed; rewrite some of them to avoid the assumption, rewrite
314 others to explicitly set safe.bareRepository to allow them.
315 (merge 985b38ca6c js/adjust-tests-to-explicitly-access-bare-repo later to maint).
316
317 * Signing commit with custom encoding was passing the data to be
318 signed at a wrong stage in the pipeline, which has been corrected.
319 (merge 7735d7eee3 bc/sign-commit-with-custom-encoding later to maint).
320
321 * Further update to the i18n alias support to avoid regressions.
322
323 * "git fetch --deepen=<n>" in a full clone truncated the history to <n>
324 commits deep, which has been corrected to be a no-op instead.
325 (merge 2431f5e0e5 sp/shallow-deepen-on-non-shallow-repo-fix later to maint).
326
327 * "git maintenance" that goes background did not use the lockfile to
328 prevent multiple maintenance processes from running at the same
329 time, which has been corrected.
330 (merge 29364f1624 ps/maintenance-daemonize-lockfix later to maint).
331
332 * Remove ineffective strbuf presizing that would have computed an
333 allocation that would not have fit in the available memory anyway,
334 or too small due to integer wraparound to cause immediate automatic
335 growing.
336 (merge a9ce8526dc jk/pretty-no-strbuf-presizing later to maint).
337
338 * The HTTP walker misinterpreted the alternates file that gives an
339 absolute path when the server URL does not have the final slash
340 (i.e., "https://example.com" not "https://example.com/").
341 (merge b92387cd55 jk/dumb-http-alternate-fix later to maint).
342
343 * "git bisect" now uses the selected terms (e.g., old/new) more
344 consistently in its output.
345 (merge cb55991825 jr/bisect-custom-terms-in-output later to maint).
346
347 * Update GitLab CI jobs that exercise macOS.
348 (merge 62319b49bb ps/gitlab-ci-macOS-improvements later to maint).
349
350 * "Friday noon" asked in the morning on Sunday was parsed to be one
351 day before the specified time, which has been corrected.
352 (merge b809304101 ta/approxidate-noon-fix later to maint).
353
354 * The GIT_WORK_TREE variable prepared to invoke the push-to-checkout
355 hook was leaking into the environment even when there was no hook
356 used and broke the default push-to-deploy (i.e., let "git checkout"
357 update the working tree only when the working tree is clean).
358 (merge 44d04e4426 ar/receive-pack-worktree-env later to maint).
359
360 * A batch of documentation pages has been updated to use the modern
361 synopsis style.
362 (merge 2ef248ae45 ja/doc-synopsis-style-again later to maint).
363
364 * The "promisor.quiet" configuration variable was not used from
365 relevant submodules when commands like "grep --recurse-submodules"
366 triggered a lazy fetch, which has been corrected.
367 (merge fa1468a1f7 th/promisor-quiet-per-repo later to maint).
368
369 * Correct use of sockaddr API in "git daemon".
370 (merge 422a5bf575 st/daemon-sockaddr-fixes later to maint).
371
372 * A memory leak in `fetch_and_setup_pack_index()` when verification of
373 the downloaded pack index fails has been plugged. Also an obsolete
374 `unlink()` call on parse failure has been cleaned up.
375
376 * In t3070-wildmatch, "via ls-files" test variants with patterns
377 containing backslash escapes are now skipped on Windows, avoiding 36
378 test failures caused by pathspec separator conversion.
379 (merge 8c84e6802c kk/wildmatch-windows-ls-files-prereq later to maint).
380
381 * A linker warning on macOS when building with Xcode 16.3 or newer has
382 been avoided by passing -fno-common to the compiler when a
383 sufficiently new linker is detected.
384 (merge 5cd4d0d850 hn/macos-linker-warning later to maint).
385
386 * Documentation and tests have been added to clarify that Git's internal
387 raw timestamp format requires a `@` prefix for values less than
388 100,000,000 to prevent ambiguity with other formats like YYYYMMDD.
389 (merge 4018dc29ee ls/doc-raw-timestamp-prefix later to maint).
390
391 * Wording used in "format-patch --subject-prefix" documentation
392 has been improved.
393 (merge 4a1eb9304a lo/doc-format-patch-subject-prefix later to maint).
394
395 * Advanced emulation of kill() used on Windows in GfW has been
396 upstreamed to improve the symptoms like left-behind .lock files and
397 that fails to let the child clean-up itself when it gets killed.
398 (merge 363f1d8b3a js/win-kill-child-more-gently later to maint).
399
400 * The 'git describe --contains --all' command has been fixed to
401 properly honor the '--match' and '--exclude' options by passing
402 them down to 'git name-rev' with the appropriate reference
403 prefixes.
404 (merge 1891707d1b jk/describe-contains-all-match-fix later to maint).
405
406 * Various typos, grammatical errors, and duplicated words in both
407 documentation and code comments have been corrected.
408 (merge dc6068df67 wy/docs-typofixes later to maint).
409
410 * The subprocess handshake during startup has been made gentler by using
411 packet_read_line_gently() instead of packet_read_line() to prevent the
412 parent Git process from dying abruptly when a configured subprocess
413 (e.g., a clean/smudge filter) fails to start.
414 (merge 061a68e443 mm/subprocess-handshake-fix later to maint).
415
416 * The TSAN race in transfer_debug() within transport-helper.c has been
417 resolved by initializing the debug flag early in
418 bidirectional_transfer_loop() before spawning worker threads, allowing
419 the removal of a TSAN suppression.
420 (merge 85704eda18 ps/transport-helper-tsan-fix later to maint).
421
422 * 'git describe' has been taught to pass the 'refs/tags/' prefix down to
423 the ref iterator when '--all' is not requested, avoiding unnecessary
424 iteration over non-tag refs.
425 (merge 55088ac8a4 td/describe-tag-iteration later to maint).
426
427 * compute_reachable_generation_numbers() in commit-graph used a 32-bit
428 integer to accumulate parent generations, which is OK for generation
429 number v1 (topological levels), but with generation number v2
430 (adjusted committer timestamps), it truncated timestamps beyond
431 2106. Fixed by widening the accumulator to timestamp_t.
432 (merge fbcc5408fc en/commit-graph-timestamp-fix later to maint).
433
434 * Other code cleanup, docfix, build fix, etc.
435 (merge 80f4b802e9 ja/doc-difftool-synopsis-style later to maint).
436 (merge b96490241e jc/doc-timestamps-in-stat later to maint).
437 (merge ef85286e51 ss/t7004-unhide-git-failures later to maint).
438 (merge 7584d10bc2 mf/format-patch-cover-letter-format-docfix later to maint).
439 (merge 8547908eb3 pw/rename-to-get-current-worktree later to maint).
440 (merge 890229b3f3 sg/t6112-unwanted-tilde-expansion-fix later to maint).
441 (merge ab9753e7bc kh/doc-restore-double-underscores-fix later to maint).
442 (merge 4a9e097228 za/t2000-modernise-more later to maint).
443 (merge b635fd0725 kh/doc-log-decorate-list later to maint).
444 (merge 65ea197dca jk/commit-sign-overflow-fix later to maint).
445 (merge 3ccb16052a jk/apply-leakfix later to maint).
446 (merge 5e6e8dc786 tb/pseudo-merge-bugfixes later to maint).
447 (merge 6d09e798bc pb/doc-diff-format-updates later to maint).
448 (merge 34a891a2d3 rs/trailer-fold-optim later to maint).
449 (merge 499f9048e0 ps/t3903-cover-stash-include-untracked later to maint).
450 (merge b56ab270aa jk/sq-dequote-cleanup later to maint).
451 (merge 29d9fdcf10 rs/use-builtin-add-overflow-explicitly-on-clang later to maint).
452 (merge d9982e8290 ed/check-connected-close-err-fd-2.53 later to maint).
453 (merge 1740cc35d0 ed/check-connected-close-err-fd later to maint).
454 (merge f4d7eb3d1c sp/doc-range-diff-takes-notes later to maint).
455 (merge 83e7f3bd2b kh/free-commit-list later to maint).
456 (merge d1b72b29e9 am/doc-tech-hash-typofix later to maint).
457 (merge 014c454799 ak/typofixes later to maint).
458 (merge 522ea8ef7d js/osxkeychain-build-wo-rust later to maint).
459 (merge e8f12e0e95 jc/t1400-fifo-cleanup later to maint).
460 (merge 0bf506efd4 kw/gitattributes-typofix later to maint).