Raw
1 To: git@vger.kernel.org
2 Subject: What's cooking in git.git (Aug 2026, #01)
3 X-master-at: 5b2471720c93ee30e5764a19f3d3b3ae9ec9712a
4 X-next-at: 6767b8d81c83adffcd5ce7f852af5e071b7b07f7
5 Bcc: lwn@lwn.net, gitster@pobox.com
6
7 What's cooking in git.git (Aug 2026, #01)
8 -----------------------------------------
9
10 Here are the topics that have been cooking in my tree. Commits
11 prefixed with '+' are in 'next' (being in 'next' is a sign that a
12 topic is stable enough to be used and is a candidate to be in a
13 future release). Commits prefixed with '-' are only in 'seen', and
14 aren't considered "accepted" at all. They may be annotated with a URL
15 to a message that raises issues but they are by no means exhaustive.
16 A topic without enough support may be discarded after a long period
17 of no activity (of course, it can be resubmitted when new interest
18 arises).
19
20 The 10th batch of topics have now graduated to the 'master' branch.
21
22 Copies of the source code to Git live in many repositories, and the
23 following is a list of the ones I push into or their mirrors. Some
24 repositories have only a subset of branches.
25
26 With maint, master, next, seen, todo:
27
28 git://git.kernel.org/pub/scm/git/git.git/
29 git://repo.or.cz/alt-git.git/
30 https://kernel.googlesource.com/pub/scm/git/git/
31 https://github.com/git/git/
32 https://gitlab.com/git-scm/git/
33
34 With all the integration branches and topics broken out:
35
36 https://github.com/gitster/git/
37
38 Even though the preformatted documentation in HTML and man format
39 are not sources, they are published in these repositories for
40 convenience (replace "htmldocs" with "manpages" for the manual
41 pages):
42
43 git://git.kernel.org/pub/scm/git/git-htmldocs.git/
44 https://github.com/gitster/git-htmldocs.git/
45
46 Release tarballs are available at:
47
48 https://www.kernel.org/pub/software/scm/git/
49
50 --------------------------------------------------
51 [New Topics]
52
53 * hn/ci-cancel-stale-pr-runs (2026-07-31) 1 commit
54 - ci: cancel stale pull request workflow runs
55
56 GitHub Actions CI workflow runs triggered by pull requests have
57 been configured to cancel older runs when a new push is made to the
58 same pull request.
59
60 Needs review.
61 source: <pull.2369.git.git.1785492641983.gitgitgadget@gmail.com>
62
63
64 * kh/doc-refs-migrate-limitations (2026-07-31) 2 commits
65 - doc: refs: linkgit to git-maintenance(1)
66 - doc: refs: put ref migration warning under the command
67
68 The known limitations of the ref format migration in 'git refs' have
69 been moved to be displayed as a caution admonition directly under the
70 description of the 'migrate' subcommand, improving visibility. A
71 reference to 'git-maintenance' has also been corrected to use the
72 'linkgit' macro.
73
74 Will merge to 'next'?
75 cf. <xmqqbjbncdv5.fsf@gitster.g>
76 source: <CV_git_ref_migration_warning.b09@msgid.xyz>
77
78
79 * jc/complete-diff-tracked-paths (2026-08-02) 1 commit
80 - completion: complete tracked paths for git diff
81
82 "git -C <dir> diff fi<TAB>" did not complete dir/file, which has
83 been corrected.
84
85 Will merge to 'next'?
86 cf. <anAqfqcEueSKmAH+@szeder.dev>
87 cf. <xmqqpkzzyzq4.fsf@gitster.g>
88 source: <xmqqcxw010me.fsf@gitster.g>
89
90
91 * kh/trailers-no-urls (2026-08-02) 2 commits
92 - trailers: stop recognizing URLs as trailers
93 - Merge branch 'kh/doc-trailers' into kh/trailers-no-urls
94 (this branch uses kh/doc-trailers.)
95
96 The trailers code has been taught to avoid mistaking a line that has
97 <token>:// at the beginning as a trailer line.
98
99 Will merge to 'next'?
100 cf. <20260803152025.GA189075@coredump.intra.peff.net>
101 cf. <xmqqmrv42lrg.fsf@gitster.g>
102 cf. <xmqqtspbz00x.fsf@gitster.g>
103 source: <URLs_not_trailers.b13@msgid.xyz>
104
105
106 * kl/t7528-ssh-agent-for-csh-users (2026-08-02) 1 commit
107 - t7528: fix failure under csh
108
109 The 'ssh-agent' tests in 't7528' have been fixed to work when the
110 user's login shell is csh-like, by explicitly passing '-s' to
111 'ssh-agent' to force Bourne shell syntax.
112
113 Will merge to 'next'?
114 cf. <am_5YymI-UnCT_s1@fruit.crustytoothpaste.net>
115 cf. <xmqqy0enz2o4.fsf@gitster.g>
116 source: <20260803004105.36913-2-keni@his.com>
117
118 --------------------------------------------------
119 [Graduated to 'master']
120
121 * af/clone-revision-v0-segfault-fix (2026-07-24) 1 commit
122 (merged to 'next' on 2026-07-27 at 57c0e98bfb)
123 + builtin/clone: fix segfault when using --revision with protocol v0
124
125 A segfault when 'git clone --revision' talks to a server that does not
126 support protocol v2 (falling back to protocol v0) has been corrected.
127
128 Graduated to 'master'.
129 cf. <xmqqldb08jcd.fsf@gitster.g>
130 source: <20260724124138.666877-1-adrian.friedli@mt.com>
131
132
133 * en/submodule-insteadof-remote-match (2026-07-22) 1 commit
134 (merged to 'next' on 2026-07-27 at a1cbd7aa11)
135 + submodule: resolve insteadOf aliases when matching remote
136
137 The remote-matching logic for submodules has been corrected to resolve
138 'url.*.insteadOf' aliases before comparing the inventoried URL from
139 '.gitmodules' with the URLs of configured remotes.
140
141 Graduated to 'master'.
142 cf. <xmqqldb05dlo.fsf@gitster.g>
143 source: <20260723002132.3989727-1-ccjmne@gmail.com>
144
145
146 * hn/url-push-tracking (2026-07-22) 2 commits
147 (merged to 'next' on 2026-07-25 at 9b776656fc)
148 + remote: find tracking branches for URL push destinations
149 + remote: pass repository to push tracking helper
150
151 When the push remote is specified as a URL, the fetch refspec of a
152 uniquely matching configured remote is now used to find and update
153 the remote-tracking branch (e.g., '@{push}').
154
155 Graduated to 'master'.
156 cf. <xmqqpl0eoniz.fsf@gitster.g>
157 source: <pull.2358.v4.git.git.1784743738.gitgitgadget@gmail.com>
158
159
160 * jc/exclude-first-parent-seen (2026-07-22) 1 commit
161 (merged to 'next' on 2026-07-25 at 85755d1d45)
162 + revision: honor --exclude-first-parent-only with SEEN first parent
163
164 Traversals with '--exclude-first-parent-only' have been corrected
165 to properly stop after the first parent even when it has already
166 been marked as 'SEEN'.
167
168 Graduated to 'master'.
169 source: <xmqqbjbzq7n2.fsf@gitster.g>
170
171
172 * jc/remote-insteadof-leakfix (2026-07-25) 1 commit
173 (merged to 'next' on 2026-07-27 at 8cf88af88b)
174 + remote: plug memory leaks
175
176 rewrites_release() in 'remote.c' has been updated to free 'struct
177 rewrite' instances, their '.instead_of' arrays, and their contents.
178
179 Graduated to 'master'.
180 cf. <20260725161819.GA2343104@coredump.intra.peff.net>
181 source: <xmqqpl0b12gj.fsf@gitster.g>
182
183
184 * jt/config-lock-timeout (2026-05-17) 1 commit
185 (merged to 'next' on 2026-07-24 at 3cb8da6b6a)
186 + config: retry acquiring config.lock, configurable via core.configLockTimeout
187
188 Configuration file locking has been updated to retry for a short
189 period, avoiding failures when multiple processes attempt to update
190 the configuration simultaneously.
191
192 Graduated to 'master'.
193 cf. <agrIrGwSMFlKTx9x@pks.im>
194 cf. <xmqqzf1xbl4i.fsf@gitster.g>
195 source: <20260517132111.1014901-1-joerg@thalheim.io>
196
197
198 * ps/cat-file-remote-object-info (2026-07-24) 13 commits
199 (merged to 'next' on 2026-07-24 at e436a42272)
200 + cat-file: make remote-object-info allow-list adapt to the server
201 + cat-file: add remote-object-info to batch-command
202 + transport: add client support for object-info
203 + serve: advertise object-info feature
204 + protocol-caps: check object existence regardless of the attributes requested
205 + fetch-pack: move fetch initialization
206 + connect: make write_fetch_command_and_capabilities() more generic
207 + fetch-pack: move write_fetch_command_and_capabilities() to connect.c
208 + fetch-pack: use unsigned int for hash_algo variable
209 + fetch-pack: drop the static advertise_sid variable
210 + t1006: extract helper functions into new 'lib-cat-file.sh'
211 + cat-file: declare loop counter inside for()
212 + transport-helper: fix memory leak of helper on disconnect
213 (this branch is used by ps/cat-file-remote-object-info-type.)
214
215 The 'remote-object-info' command has been added to 'git cat-file
216 --batch-command', allowing clients to request object metadata
217 (currently size) from a remote server via protocol v2 without
218 downloading the entire object. Format placeholders are dynamically
219 filtered on the client based on server-advertised capabilities,
220 returning empty strings for inapplicable or unsupported fields.
221
222 Graduated to 'master'.
223 source: <20260724-ps-eric-work-rebase-v21-0-ba67f024fdff@gmail.com>
224
225
226 * ps/odb-move-loose-object-writing (2026-07-17) 10 commits
227 (merged to 'next' on 2026-07-25 at 244d577d93)
228 + object-file: move logic to write loose objects
229 + object-file: move `force_object_loose()`
230 + object-file: force objects loose via generic interface
231 + object-file: fix memory leak in `force_object_loose()`
232 + odb: support setting mtime when writing objects
233 + odb: lift object existence check out of the "loose" backend
234 + odb: compute object hash in `odb_write_object_ext()`
235 + t/u-odb-inmemory: implement wrapper for writing objects
236 + odb: compute compat object ID in `odb_write_object_ext()`
237 + Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD
238
239 The logic to write loose objects has been refactored and moved from
240 'object-file.c' to the loose backend source file 'odb/source-loose.c',
241 making the loose backend more self-contained. This is achieved by
242 first refactoring force_object_loose() to use generic ODB write
243 interfaces instead of loose-backend internals.
244
245 Graduated to 'master'.
246 cf. <xmqqecgzpm0y.fsf@gitster.g>
247 source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
248
249
250 * rs/tempfile-wo-the-repository (2026-07-14) 5 commits
251 (merged to 'next' on 2026-07-22 at 968a116891)
252 + use repo_hold_lock_file_for_update{,_mode,_timeout}() with custom repos
253 + tempfile: stop using the_repository
254 + lockfile: add repo_hold_lock_file_for_update{,_timeout}{,_mode}()
255 + refs/packed: use repo_create_tempfile()
256 + tempfile: add repo_create_tempfile{,_mode}()
257
258 The tempfile and lockfile APIs have been refactored to stop depending
259 on the 'the_repository' global variable, and their callers have been
260 updated to use the repository-aware variants.
261
262 Graduated to 'master'.
263 cf. <xmqq8q7ds3ld.fsf@gitster.g>
264 cf. <xmqqmrvmn6a5.fsf@gitster.g>
265 source: <20260714175956.54601-1-l.s.r@web.de>
266
267
268 * sk/userdiff-swift (2026-07-20) 1 commit
269 (merged to 'next' on 2026-07-23 at 45dbcc6307)
270 + userdiff: add support for Swift
271
272 Userdiff patterns for Swift have been added, with support for
273 Swift-specific constructs such as attributes, modifiers, failable
274 initializers, and generics.
275
276 Graduated to 'master'.
277 cf. <2a3a73c5-5e90-44a3-bf6a-6e98ce5e5a59@kdbg.org>
278 cf. <7b541cd5-bd66-4675-818d-8e23eb1c9530@kdbg.org>
279 source: <20260721065736.8747-1-diy2903@gmail.com>
280
281
282 * tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit
283 (merged to 'next' on 2026-07-25 at 5b92e8a325)
284 + gitweb: shorten index hashes with trailing file modes
285
286 The object ID shortening and linking in the 'commitdiff' view of
287 'gitweb' has been corrected to work even when the index line carries
288 a trailing file mode.
289
290 Graduated to 'master'.
291 cf. <xmqqjyqu6u7i.fsf@gitster.g>
292 source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com>
293
294
295 * tn/stash-avoid-sparse-index-expansion (2026-07-20) 2 commits
296 (merged to 'next' on 2026-07-23 at 8ccf28493e)
297 + stash: avoid sparse-index expansion for in-cone paths
298 + pathspec: use match for sparse-index expansion checks
299
300 The 'git stash push' command has been optimized to avoid
301 unnecessary sparse index expansion when pathspecs are wholly inside
302 the sparse-checkout cone. Also, a potential out-of-bounds read in
303 the sparse-index expansion check helper
304 pathspec_needs_expanded_index() has been fixed by consistently
305 using the parsed, prefixed path.
306
307 Graduated to 'master'.
308 cf. <al61UTM0aK9j9eiP@com-79390>
309 cf. <al61ERa3fS2MerHp@com-79390>
310 source: <20260720223118.62821-4-tnyman@openai.com>
311
312
313 * ty/migrate-excludes-file (2026-07-13) 10 commits
314 (merged to 'next' on 2026-07-23 at 749560a29c)
315 + repository: adjust the comment of config_values_private_
316 + environment: move object_creation_mode into repo_config_values
317 + environment: move autorebase into repo_config_values
318 + environment: move push_default into repo_config_values
319 + environment: migrate apply_default_whitespace and apply_default_ignorewhitespace
320 + environment: move askpass_program into repo_config_values
321 + environment: move pager_program into repo_config_values
322 + environment: move editor_program into repo_config_values
323 + environment: move excludes_file into repo_config_values
324 + repository: introduce repo_config_values_clear()
325
326 The 'excludes_file' and various other global configuration variables
327 (including 'editor_program', 'pager_program', 'askpass_program', and
328 'push_default') have been migrated into the per-repository structure.
329
330 Graduated to 'master'.
331 cf. <xmqqa4ruyhbh.fsf@gitster.g>
332 source: <20260714032525.1611141-1-cat@malon.dev>
333
334
335 * ty/migrate-trust-executable-bit (2026-07-20) 4 commits
336 (merged to 'next' on 2026-07-23 at 4873f289dd)
337 + environment: move has_symlinks into repo_config_values
338 + environment: move trust_executable_bit into repo_config_values
339 + read-cache: pass 'repo' to 'ce_mode_from_stat()'
340 + read-cache: remove redundant extern declarations
341
342 The 'trust_executable_bit' (coming from the 'core.filemode'
343 configuration) has been migrated into 'struct repo_config_values' to
344 tie it to a specific repository instance.
345
346 Graduated to 'master'.
347 cf. <alvNq8rXF/jofqUc@szeder.dev>
348 cf. <xmqq8q7961xe.fsf@gitster.g>
349 source: <20260720105335.3202013-1-cat@malon.dev>
350
351 --------------------------------------------------
352 [Stalled]
353
354 * bl/t7412-use-test-path-helpers (2026-06-29) 1 commit
355 - submodule absorbgitdirs tests: use test_* helper functions
356
357 The test script 't7412' that tests 'git submodule absorbgitdirs' has
358 been modernized to use test_path_is_file(), test_path_is_dir(), and
359 test_path_is_missing() helper functions instead of raw 'test -[fde]'
360 commands.
361
362 Waiting for response for too long, stalled.
363 cf. <akTKHfKPsP3-Rn31@pks.im>
364 cf. <xmqqik60o22y.fsf@gitster.g>
365 source: <20260630020220.1559190-1-bblima@usp.br>
366
367
368 * tb/repack-geometric-cruft (2026-06-28) 11 commits
369 - SQUASH??? bare grep !???
370 - repack: support combining '--geometric' with '--cruft'
371 - pack-objects: support '--refs-snapshot' with 'follow-reachable'
372 - pack-objects: introduce '--stdin-packs=follow-reachable'
373 - pack-objects: extract `stdin_packs_add_all_pack_entries()`
374 - repack-geometry: drop unused redundant-pack removal
375 - repack: delete geometric packs via existing_packs
376 - repack: teach MIDX retention about geometric rollups
377 - repack: mark geometric progression of packs as retained
378 - repack: extract `locate_existing_pack()` helper
379 - repack: unconditionally exclude non-kept packs
380
381 'git repack' has been taught to accept '--geometric' and '--cruft'
382 together. When both are given, non-cruft packs are rolled up by the
383 geometric repack as usual, while a separate cruft pack is written to
384 collect unreachable objects.
385
386 Waiting for response for too long, stalled.
387 cf. <xmqqwlugo4nk.fsf@gitster.g>
388 source: <cover.1782500507.git.me@ttaylorr.com>
389
390
391 * hn/checkout-track-fetch (2026-06-24) 2 commits
392 - checkout: extend --track with a "fetch" mode to refresh start-point
393 - branch: expose helpers for finding the remote owning a tracking ref
394
395 The 'git checkout --track=...' command has been taught to optionally
396 fetch the branch from the remote that the new branch will work with.
397
398 Will discard.
399 cf. <xmqq8q71clob.fsf@gitster.g>
400 source: <pull.2281.v15.git.git.1782338098.gitgitgadget@gmail.com>
401
402
403 * za/completion-hide-dotfiles (2026-06-20) 2 commits
404 - completion: hide dotfiles by default for path completion
405 - completion: hide dotfiles for selected path completion
406
407 Path completion for commands like 'git rm' and 'git mv' has been
408 updated to hide dotfiles by default unless the user explicitly starts
409 the path with a dot, matching standard shell-completion behavior.
410
411 Waiting for response for too long, stalled.
412 cf. <xmqq1pe0g08t.fsf@gitster.g>
413 cf. <xmqq4ihpclo8.fsf@gitster.g>
414 source: <pull.2311.v3.git.git.1781978156.gitgitgadget@gmail.com>
415
416 --------------------------------------------------
417 [Cooking]
418
419 * kh/doc-trailers (2026-07-30) 11 commits
420 - doc: interpret-trailers: document comment line treatment
421 - doc: interpret-trailers: rewrite new-trailers paragraphs
422 - doc: interpret-trailers: commit to “trailer block” term
423 - doc: interpret-trailers: join new-trailers again
424 - doc: interpret-trailers: add key format example
425 - doc: interpret-trailers: explain key format
426 - doc: interpret-trailers: explain the format after the intro
427 - doc: interpret-trailers: not just for commit messages
428 - doc: interpret-trailers: use “metadata” in Name as well
429 - doc: interpret-trailers: replace “lines” with “metadata”
430 - doc: interpret-trailers: stop fixating on RFC 822
431 (this branch is used by kh/trailers-no-urls.)
432
433 Documentation for 'git interpret-trailers' has been updated to explain
434 the format of trailer keys (alphanumeric characters and hyphens),
435 replace outdated terminology, define key terms upfront, and document
436 how comment lines in the input are treated.
437
438 Needs review.
439 source: <V4_CV_doc_int-tr_key_format.ae2@msgid.xyz>
440
441
442 * kh/doc-replay-config (2026-07-30) 4 commits
443 (merged to 'next' on 2026-08-03 at 5450adb2e1)
444 + doc: replay: move “default” to the right-hand side
445 + doc: replay: use a nested description list
446 + doc: replay: improve config description
447 + doc: link to config for git-replay(1)
448
449 Documentation for 'git replay' has been updated to refer to its
450 configuration variables.
451
452 Will merge to 'master'.
453 cf. <xmqq4ihfduxi.fsf@gitster.g>
454 source: <V4_CV_doc_replay_config.af3@msgid.xyz>
455
456
457 * sk/test-commit-body-helper (2026-07-27) 2 commits
458 (merged to 'next' on 2026-08-03 at ce42e63135)
459 + t: use commit_body to extract commit message bodies
460 + test-lib-functions: add commit_body helper
461
462 A new test helper commit_body() has been introduced to print the
463 message body of a commit, and various tests have been updated to use
464 it instead of spelling out the command pipeline manually and losing
465 the exit status of the 'git cat-file' command on the upstream of the
466 pipe.
467
468 Will merge to 'master'.
469 cf. <xmqqpl05o5n7.fsf@gitster.g>
470 source: <20260727095656.75496-1-diy2903@gmail.com>
471
472
473 * jk/cat-file-batch-wo-type-fix (2026-07-28) 1 commit
474 (merged to 'next' on 2026-07-31 at 2d67bd3ccf)
475 + cat-file: handle content request for --batch-command without type
476
477 'git cat-file --batch-command' that asked for 'contents' without
478 'type' segfaults, which has been corrected.
479
480 Will merge to 'master'.
481 cf. <xmqqjyqfdnie.fsf@gitster.g>
482 source: <20260728150031.GA41931@coredump.intra.peff.net>
483
484
485 * tc/merge-default-to-upstream-leakfix (2026-07-28) 1 commit
486 (merged to 'next' on 2026-07-31 at b10497d8a4)
487 + merge: fix leak with merge.defaultToUpstream
488
489 A memory leak in 'git merge' when run without arguments (which
490 triggers the default-to-upstream path) has been fixed. A test has
491 been added to cover this case.
492
493 Will merge to 'master'.
494 cf. <20260728151959.GC41931@coredump.intra.peff.net>
495 cf. <xmqqfr13dlv8.fsf@gitster.g>
496 source: <20260728-toon-fix-merge-leak-v1-1-d6bd161a3acf@iotcl.com>
497
498
499 * cl/regexec-macos-leak (2026-07-28) 2 commits
500 - SQUASH???
501 - regexec: work around macOS TRE leak on invalid UTF-8
502
503 A compatibility workaround has been introduced for macOS to address
504 a memory leak in the system regex engine when it encounters invalid
505 multibyte sequences. The workaround segments the input buffer at
506 invalid byte boundaries and searches each valid segment separately
507 using regexec(), avoiding the leaking path.
508
509 Waiting for response.
510 cf. <xmqqse52bpa9.fsf@gitster.g>
511 source: <20260728052538.12429-1-chungmin@chungminlee.com>
512
513
514 * dl/pack-bitmap-position-zero (2026-07-28) 1 commit
515 (merged to 'next' on 2026-07-31 at b200bed995)
516 + pack-bitmap: handle objects at bitmap position zero
517
518 A boundary case check in reachability bitmap traversal has been
519 corrected to properly handle the object at position zero, which was
520 previously skipped, leading to redundant bitmap loading.
521
522 Will merge to 'master'.
523 cf. <amk75SuhyHBbx-E8@com-79390>
524 cf. <xmqq5x1yd968.fsf@gitster.g>
525 source: <20260728135248.61304-1-davidlin@stripe.com>
526
527
528 * hn/checkout-m-autostash-refine (2026-07-25) 2 commits
529 - checkout -m: refine autostash fallback
530 - sequencer: teach autostash apply to report conflicts
531
532 The autostash fallback in 'git checkout -m' has been refined to only
533 retry when there are local changes. Additionally, a blank line now
534 visually separates autostash conflict advice from the subsequent
535 branch-switch message.
536
537 Needs review.
538 cf. <xmqqwluebuhb.fsf@gitster.g>
539 source: <pull.2364.git.git.1784993669.gitgitgadget@gmail.com>
540
541
542 * jk/t0014-dynamic-deprecated-cmds (2026-07-28) 2 commits
543 (merged to 'next' on 2026-07-29 at 39a86632e6)
544 + t0014: generate deprecated command names dynamically
545 + t0014: factor out choice of deprecated commands
546
547 The alias tests in 't/t0014-alias.sh' have been updated to dynamically
548 query the list of deprecated commands using 'git
549 --list-cmds=deprecated' to avoid test failures when running with
550 'WITH_BREAKING_CHANGES' in a build directory that contains stale
551 executables of formerly deprecated commands.
552
553 Will merge to 'master'.
554 source: <20260728143653.GB11894@coredump.intra.peff.net>
555
556
557 * js/mingw-symlink-net-share-leak (2026-07-28) 1 commit
558 (merged to 'next' on 2026-07-29 at 250fe7f194)
559 + mingw: skip symlink type auto-detection for network share targets
560
561 Git for Windows has been updated to avoid auto-detecting the symlink
562 type if the target path starts with a slash, preventing NTLM
563 credential leaks when checking out repositories with crafted
564 symbolic links pointing to network shares.
565
566 Will merge to 'master'.
567 source: <pull.2189.git.1785239196007.gitgitgadget@gmail.com>
568
569
570 * ns/merge-base-is-ancestor-tests (2026-07-29) 1 commit
571 (merged to 'next' on 2026-08-03 at cf2c4e00eb)
572 + merge-base: add tests for --is-ancestor
573
574 Tests for 'git merge-base --is-ancestor' have been added to cover
575 exit codes (0 for success, 1 for non-ancestor, 128 for errors) and
576 to ensure it cannot be combined with '--all'.
577
578 Will merge to 'master'.
579 cf. <xmqq8q6slb2t.fsf@gitster.g>
580 source: <pull.2186.v2.git.1785392350660.gitgitgadget@gmail.com>
581
582
583 * jc/add-resolved (2026-07-31) 4 commits
584 - add: introduce '--resolved' option
585 - read-cache: add remove_file_from_index_with_flags()
586 - merge-ll: consolidate conflict marker scanning logic
587 - read-cache: reindent
588
589 'git add' has been taught a new '--resolved' option to stage
590 conflict-resolved paths, while leaving unrelated local changes
591 unstaged. It scans the unmerged paths for leftover conflict
592 markers and aborts if any are found.
593
594 Will merge to 'next'?
595 cf. <20260801141414.GD2041176@coredump.intra.peff.net>
596 source: <20260731125605.3638938-1-gitster@pobox.com>
597
598
599 * tb/pack-with-duplicates (2026-07-24) 5 commits
600 - pack-bitmap: handle duplicate pack entries during MIDX reuse
601 - test-tool bitmap: reject packs with duplicate objects
602 - midx: verify duplicate pack entries by OID and offset
603 - packfile: recover delta cycles through duplicate entries
604 - t5308: test reverse indexes with duplicate objects
605
606 The handling of packfiles with duplicate object entries has been
607 hardened. Specifically, reverse index lookup, delta cycle
608 recovery, multi-pack-index verification, and pack reuse paths have
609 been updated to correctly handle or gracefully reject duplicate
610 entries.
611
612 Needs review.
613 cf. <xmqqecgs3vg6.fsf@gitster.g>
614 source: <cover.1784927134.git.ttaylorr@openai.com>
615
616
617 * ps/cat-file-remote-object-info-type (2026-08-03) 9 commits
618 - cat-file: unify default format
619 - serve: advertise type capability
620 - fetch-object-info: parse type from server response
621 - protocol-caps: add type support to object-info
622 - fetch-object-info: use dedicated struct for the results
623 - fetch-object-info: pass arguments directly instead of a struct
624 - fetch-object-info: detect truncated server responses
625 - t5701: use test_file_size() to get the size of a file
626 - Merge branch 'ps/cat-file-remote-object-info' into ps/cat-file-remote-object-info-type
627
628 The 'remote-object-info' command for 'git cat-file --batch-command'
629 has been extended to support the '%(objecttype)' placeholder.
630
631 Needs review.
632 source: <20260803-objecttype-support-v3-0-7176fecf7950@gmail.com>
633
634
635 * rs/branch-delete-bisect-warning (2026-07-25) 1 commit
636 (merged to 'next' on 2026-07-28 at c0e15e73b6)
637 + branch: report active bisect run when rejecting delete
638
639 'git branch -d' has been taught to report when a branch cannot be
640 deleted because it is being used in an active bisect run.
641
642 Will merge to 'master'.
643 cf. <xmqqbjbtyd80.fsf@gitster.g>
644 cf. <871pcndynd.fsf@emacs.iotcl.com>
645 source: <590382fb-731b-4e14-911e-ff68356d1082@web.de>
646
647
648 * jk/ci-static-analysis-image-bump (2026-07-26) 2 commits
649 (merged to 'next' on 2026-07-29 at 457a175861)
650 + ci: bump ubuntu image version for static-analysis job
651 + bloom: silence CHECK_ASSERTION_SIDE_EFFECTS false positive
652
653 The image version used by the static-analysis CI job has been bumped
654 to ubuntu-latest (Ubuntu 24.04), which brings in a newer Coccinelle
655 version that resolves a severe performance regression. A false
656 positive warning from the 'CHECK_ASSERTION_SIDE_EFFECTS' build with
657 GCC 15 in the Bloom filter code has also been silenced to facilitate
658 the image upgrade.
659
660 Will merge to 'master'.
661 cf. <xmqqo6ftvhed.fsf@gitster.g>
662 source: <20260726083254.GA3528497@coredump.intra.peff.net>
663
664
665 * jk/diff-relative-cached-unmerged-more (2026-07-26) 3 commits
666 (merged to 'next' on 2026-07-30 at d8636bd744)
667 + diff-lib: skip paths outside prefix in oneway_diff()
668 + diff-lib: drop stale comment about advancing o->pos
669 + Merge branch 'jk/diff-relative-cached-unmerged' into jk/diff-relative-cached-unmerged-more
670 (this branch uses jk/diff-relative-cached-unmerged.)
671
672 The code path that deals with relative paths in the diff-lib has
673 been cleaned up.
674
675 Will merge to 'master'.
676 cf. <xmqqo6frdqy5.fsf@gitster.g>
677 cf. <20260728171249.GA643101@coredump.intra.peff.net>
678 source: <20260726084550.GC2366012@coredump.intra.peff.net>
679
680
681 * lo/mv-missing-dest-dir-check (2026-07-30) 2 commits
682 (merged to 'next' on 2026-08-03 at 7643cf1c2a)
683 + mv: reject a destination whose leading path is missing or a symlink
684 + mv: name both source and destination when rename fails
685
686 'git mv' has been updated to check for a missing destination
687 leading directory during the checking phase, allowing 'git mv -n'
688 to report the failure. The error message when the rename(2)
689 syscall fails has also been improved to name both the source and
690 the destination.
691
692 Will merge to 'master'.
693 cf. <xmqqtspgjkwb.fsf@gitster.g>
694 source: <pull.2356.v5.git.git.1785410884.gitgitgadget@gmail.com>
695
696
697 * ps/odb-make-creation-pluggable (2026-07-23) 5 commits
698 - odb: make creation of on-disk structures pluggable
699 - odb/source: introduce function to map source type to name
700 - setup: defer object database creation
701 - setup: detangle loading of loose object maps
702 - loose: load loose object map for the correct source
703
704 The creation of the on-disk data structures for the object database
705 has been made pluggable, allowing future backends to customize their
706 setup. As part of this, the initialization of the object database
707 has been deferred, and the loading of the loose-object map has been
708 detangled from repository initialization.
709
710 Waiting for response.
711 cf. <87pl04d03q.fsf@emacs.iotcl.com>
712 source: <20260724-pks-odb-create-on-disk-v1-0-3b3d265d979b@pks.im>
713
714
715 * hs/rebase-continue-edit (2026-07-21) 1 commit
716 - rebase: add --[no-]edit to --continue
717
718 Support for skipping the editor when continuing a rebase after
719 conflict resolution has been added with the '--no-edit' option, and
720 forcing it with '--edit'. A new configuration variable
721 'rebase.noEdit' can be used to set the default behavior.
722
723 Waiting for a response.
724 cf. <xmqqldb4xlqa.fsf@gitster.g>
725 cf. <db7edc66-9b2a-47bc-98db-87d01885cef0@gmail.com>
726 source: <20260721140443.1809379-2-hugo@hsal.es>
727
728
729 * td/fsmonitor-darwin-cookie-flush (2026-07-21) 1 commit
730 - fsmonitor: flush pending FSEvents before cookie wait
731
732 The 'fsmonitor' daemon on macOS has been updated to flush pending
733 FSEvents before waiting for the cookie file, to avoid premature
734 timeouts on busy systems.
735
736 Waiting for response.
737 cf. <CAOTNsDy4pKbPHdK1T688Ax6Mgz15K-qfZR-8fAvTk48z3E43Rg@mail.gmail.com>
738 source: <20260721-fsmonitor-darwin-cookie-flush-v1-1-357dc5e32040@gmail.com>
739
740
741 * sn/rebase-update-refs-symrefs (2026-07-22) 2 commits
742 - rebase: guard non-branch symref targets
743 - rebase: skip branch symref aliases
744
745 'git rebase --update-refs' has been taught to resolve local branch
746 symrefs to their referents before queuing updates, ensuring aliases of
747 the current branch are skipped and duplicate updates are avoided to
748 prevent failures when branch aliases are present.
749
750 Waiting for response.
751 cf. <0844b4e0-679b-4c0a-bea1-5779b4d0489d@gmail.com>
752 source: <pull.2126.v3.git.1784708107.gitgitgadget@gmail.com>
753
754
755 * ja/doc-synopsis-style-yet-more (2026-07-23) 4 commits
756 (merged to 'next' on 2026-08-03 at c744bba04e)
757 + doc: convert git-request-pull synopsis and options to new style
758 + doc: convert git-send-email synopsis and options to new style
759 + doc: convert git-format-patch synopsis and options to new style
760 + doc: convert git-imap-send synopsis and options to new style
761
762 Synopsis and options in the documentation for 'git format-patch',
763 'git imap-send', 'git send-email', and 'git request-pull' have been
764 updated to the modern style.
765
766 Will merge to 'master'.
767 cf. <xmqqldato56l.fsf@gitster.g>
768 source: <pull.2185.v2.git.1784841567.gitgitgadget@gmail.com>
769
770
771 * kj/repo-info-more-path-keys (2026-07-26) 7 commits
772 - repo: add path.git-prefix path key
773 - repo: add path.grafts with absolute and relative suffix formatting
774 - repo: add path.index with absolute and relative suffix formatting
775 - repo: add path.hooks with absolute and relative suffix formatting
776 - repo: add path.objects with absolute and relative suffix formatting
777 - repo: add path.superproject-working-tree with absolute and relative suffixes
778 - repo: add path.toplevel with absolute and relative suffix formatting
779
780 The 'git repo info' command has been taught more keys to output
781 paths of various repository components (such as the working tree
782 root, superproject working tree, object database, etc.), supporting
783 both absolute and relative path formats.
784
785 Expecting a reroll.
786 cf. <CA+rGoLfJ5Kc_HV7YfJ-y5SpMjb7t7f5ifUKcd=39eTjqzzQF5w@mail.gmail.com>
787 source: <20260726104343.16933-1-jayatheerthkulkarni2005@gmail.com>
788
789
790 * pw/rebase-fixup-fixes (2026-07-26) 2 commits
791 (merged to 'next' on 2026-07-28 at 736307fae5)
792 + rebase: remember fixup -c after skipping fixup/squash
793 + rebase -i: fix counting of fixups after rebase --skip
794
795 Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'
796 commands have been fixed. One bug caused an incorrect commit count to
797 be shown in the template message when multiple commands were skipped,
798 and another prevented the editor from opening when the final command
799 in a chain containing 'fixup -c' was skipped.
800
801 Will merge to 'master'.
802 cf. <xmqqtspo3x31.fsf@gitster.g>
803 cf. <xmqqse55tp1k.fsf@gitster.g>
804 source: <cover.1785080337.git.phillip.wood@dunelm.org.uk>
805
806
807 * tc/last-modified-bloom (2026-07-17) 4 commits
808 - last-modified: keep per-path Bloom filters for wildcard pathspecs
809 - last-modified: check pathspec against Bloom filter first
810 - revision: expose check for paths maybe changed in Bloom filter
811 - revision: move bloom keyvec precondition into function
812
813 The 'git last-modified' command has been optimized by using Bloom
814 filters. It now reuses revision walk filtering logic from 'git log'
815 to pre-filter commits, and maintains per-path Bloom filters even when
816 wildcard pathspecs are used.
817
818 Expecting a reroll.
819 cf. <87cxwl1lb4.fsf@emacs.iotcl.com>
820 source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com>
821
822
823 * hn/bisect-reset-when-found (2026-08-02) 2 commits
824 - bisect: add --reset-when-found to leave when done
825 - bisect: let bisect_reset() optionally check out quietly
826
827 The 'git bisect' command has been taught a
828 '--reset-when-found[=<where>]' option that tells the command to
829 automatically run 'git bisect reset' to jump back to the original
830 state or to the found culprit.
831
832 Waiting for a response.
833 cf. <xmqqjyq812wr.fsf@gitster.g>
834 source: <pull.2335.v6.git.git.1785705860.gitgitgadget@gmail.com>
835
836
837 * js/coverity-unchecked-returns-fix (2026-07-14) 11 commits
838 - bisect: handle dup() failure when redirecting stdout
839 - bisect: check get_terms return at all call sites
840 - bisect: check strbuf_getline_lf return when reading terms
841 - transport-helper: warn when export-marks file cannot be finalized
842 - transport-helper: check dup() return in get_exporter
843 - compat/pread: check initial lseek for errors
844 - last-modified: handle repo_parse_commit() failures
845 - reftable tests: check reftable_table_init_ref_iterator() return
846 - reftable/block: check deflateInit() return value
847 - config: propagate launch_editor() failure in show_editor()
848 - http: die on curl_easy_duphandle failure in get_active_slot
849
850 A handful of code paths have been corrected to check return values
851 from functions like curl_easy_duphandle(), deflateInit(), lseek(),
852 dup(), and strbuf_getline_lf(), resolving several Coverity warnings
853 about unchecked returns.
854
855 Waiting for response.
856 cf. <xmqqh5lui6wg.fsf@gitster.g>
857 cf. <xmqqcxwii6wd.fsf@gitster.g>
858 cf. <alcvnm0xiOv5W0w_@pks.im>
859 source: <pull.2179.git.1784069325.gitgitgadget@gmail.com>
860
861
862 * jk/diff-relative-cached-unmerged (2026-07-28) 2 commits
863 (merged to 'next' on 2026-07-28 at 1ac873b5f9)
864 + diff-lib: add idx/tree sanity check to oneway_diff
865 (merged to 'next' on 2026-07-25 at 8829f9b348)
866 + diff: ignore unmerged paths outside prefix with --relative --cached
867 (this branch is used by jk/diff-relative-cached-unmerged-more.)
868
869 'git diff --relative' running with '--cached' has been corrected to
870 avoid a segfault when encountering unmerged paths outside the
871 prefix.
872
873 Will merge to 'master'.
874 source: <20260728151458.GB41931@coredump.intra.peff.net>
875
876
877 * ds/trace2-tolerate-failed-timestamp (2026-07-15) 1 commit
878 - trace2: tolerate failed timestamp formatting
879
880 The 'trace2' telemetry library has been updated to tolerate failures
881 from system calls like gettimeofday() and datetime formatting
882 functions, replacing potential program crashes with blank placeholder
883 timestamps in the traces.
884
885 Expecting a reroll.
886 cf. <alpXW5U6sndZtgqV@com-79390>
887 cf. <fbb118df-7c82-49a5-90bb-4458b7e9a850@gmail.com>
888 cf. <xmqqpl03cfua.fsf@gitster.g>
889 source: <pull.2178.git.1784131932489.gitgitgadget@gmail.com>
890
891
892 * mm/revision-pure-get-commit-action (2026-07-15) 1 commit
893 (merged to 'next' on 2026-07-31 at ae6730749f)
894 + revision: make get_commit_action() a pure predicate
895
896 The get_commit_action() function has been refactored to be a pure
897 predicate by moving the side-effecting line-level log range folding to
898 simplify_commit(). This ensures that evaluating a commit's action
899 before the walk reaches it does not prematurely mutate its tracked
900 line ranges, making it safer for potential lookahead evaluations.
901
902 Will merge to 'master'.
903 cf. <xmqq8q6wpmuy.fsf@gitster.g>
904 source: <pull.2169.git.1784143793613.gitgitgadget@gmail.com>
905
906
907 * cc/fast-import-usage (2026-07-16) 7 commits
908 - fast-import: use struct option for usage string
909 - fast-import: move command state globals into 'struct fast_import_state'
910 - fast-import: introduce 'struct fast_import_state'
911 - fast-import: localize 'i' into the 'for' loops using it
912 - api-parse-options.adoc: document hidden and OPT_*_F option macros
913 - api-parse-options.adoc: document per-option flags
914 - parse-options: introduce OPT_HIDDEN_GROUP
915
916 The usage string of 'git fast-import' has been updated to use the
917 parse_options() API for displaying help, and its SYNOPSIS in the
918 documentation has been standardized to match.
919
920 Waiting for response.
921 cf. <xmqq4ihyehyb.fsf@gitster.g>
922 source: <20260716165517.433849-1-christian.couder@gmail.com>
923
924
925 * ps/writev (2026-07-16) 5 commits
926 - fast-import: use writev(3p) to send cat-blob responses
927 - sideband: use writev(3p) to send pktlines
928 - wrapper: properly handle MAX_IO_SIZE in writev(3p)
929 - wrapper: introduce writev(3p) wrappers
930 - compat/posix: introduce writev(3p) wrapper
931
932 A compatibility wrapper for writev(3p) has been reintroduced,
933 including fixes for CMake build and 'MAX_IO_SIZE' limits on NonStop.
934 Calls to write(3p) in send_sideband() and cat_blob() have been
935 refactored to use writev(3p) wrappers to reduce syscall overhead.
936
937 Waiting for response.
938 cf. <f8050598-392f-44c9-8d66-0454740a7a12@kdbg.org>
939 cf. <xmqqo6fso2s8.fsf@gitster.g>
940 source: <20260716-pks-reintroduce-writev-v1-0-ea9038c884bc@pks.im>
941
942
943 * tb/send-pack-no-ref-delta (2026-07-12) 4 commits
944 - send-pack: honor `no-ref-delta` capability
945 - pack-objects: support reuse with `--no-ref-delta`
946 - pack-objects: introduce `--no-ref-delta`
947 - t/helper: teach pack-deltas to list delta entries
948
949 'git send-pack' has been taught to refrain from sending 'REF_DELTA'
950 encoded packfiles when the other side asks it to.
951
952 Needs review.
953 source: <alQ7WKITYDXfiVn9@com-79390>
954
955
956 * tn/packfile-uri-concurrency (2026-07-26) 6 commits
957 - fetch-pack: accept "pack" output for packfile URIs
958 - http: permit unlinking partial packs on Windows
959 - http: avoid concurrent appends to partial packs
960 - http: accept HTTP 416 for complete partial packs
961 - http: avoid closing index-pack input twice
962 - http-fetch: correct --index-pack-arg documentation
963
964 Concurrent downloads of packfiles via packfile URIs and dumb HTTP have
965 been made safer by avoiding concurrent appends to the staging file.
966 Opening the file in read-write mode and maintaining separate file
967 offsets prevents corruption while preserving resumability. The
968 'fetch-pack' command has also been updated to tolerate pre-existing
969 '.keep' files.
970
971 Will merge to 'next'?
972 cf. <20260801135313.GA2041176@coredump.intra.peff.net>
973 source: <cover.1785111375.git.tnyman@openai.com>
974
975
976 * js/pack-objects-delta-size-t (2026-07-09) 12 commits
977 - git-zlib: widen `git_deflate_bound()` to `size_t`
978 - t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t`
979 - http-push: widen `start_put()`'s size local from `ssize_t` to `size_t`
980 - diff: widen `deflate_it()`'s bound local from int to `size_t`
981 - archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t`
982 - packfile, git-zlib: widen `use_pack()` and zstream avail fields to `size_t`
983 - delta: widen `create_delta()` and `diff_delta()` to `size_t`
984 - pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t`
985 - pack-objects: widen `free_unpacked()` return to `size_t`
986 - pack-objects: widen delta-cache accounting to `size_t`
987 - delta: widen `create_delta_index()` parameter to `size_t`
988 - diff-delta: widen `struct delta_index`' size fields to `size_t`
989
990 The 'pack-objects' and delta-encoding code paths have been updated to
991 use 'size_t' instead of 'unsigned long' for object sizes and offset
992 limits, avoiding potential truncation issues on 64-bit Windows.
993
994 Needs review.
995 source: <pull.2175.git.1783615780.gitgitgadget@gmail.com>
996
997
998 * pz/fetch-submodule-errors-config (2026-07-16) 2 commits
999 - fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
1000 - submodule: fix premature failure in recursive submodule fetch
1001
1002 The 'git fetch' command has been updated to allow configuring how
1003 submodule fetch errors are handled. A new configuration variable
1004 'fetch.submoduleErrors' and a corresponding '--submodule-errors'
1005 command-line option have been introduced, allowing users to make
1006 submodule fetch errors non-fatal (warn instead of fail).
1007 Additionally, a premature failure during recursive submodule fetches
1008 has been fixed by deferring the error until the OID-based retry phase
1009 also fails.
1010
1011 Needs review.
1012 cf. <xmqq7bmwm5g6.fsf@gitster.g>
1013 source: <20260716140956.1023740-1-paulius.zaleckas@gmail.com>
1014
1015
1016 * gr/add-e-use-apply-api (2026-07-10) 1 commit
1017 - builtin/add.c: replace run_command() with direct apply_all_patches() call
1018
1019 The application of the edited patch in 'git add -e' has been
1020 refactored to use the internal apply API directly, avoiding the need
1021 to spawn a 'git apply' subprocess.
1022
1023 Needs review.
1024 cf. <xmqq8q6to4em.fsf@gitster.g>
1025 source: <20260711061246.58079-1-gatlavishweshwarreddy26@gmail.com>
1026
1027
1028 * fz/rebase-autosquash-empty (2026-07-11) 1 commit
1029 . sequencer: honor --empty when a fixup!/squash! empties its target
1030
1031 A commit that is emptied by melding a 'fixup!' or 'squash!' commit
1032 during 'git rebase --autosquash' is now handled according to the
1033 '--empty' option, allowing it to be dropped, kept, or to halt the
1034 rebase.
1035
1036 Ejected due to conflicts with 'pw/rebase-drop-notes-with-commit'.
1037
1038 Waiting for response.
1039 cf. <690b965e-5f07-4aa4-a64c-96e60a86d73b@gmail.com>
1040 cf. <xmqqh5m494yh.fsf@gitster.g>
1041 source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com>
1042
1043
1044 * mm/lib-httpd-cgi-safe (2026-07-10) 3 commits
1045 - t/README: document writing concurrency-safe helpers
1046 - t/lib-httpd: make http-429 first-request check atomic
1047 - t/lib-httpd: fix apply-one-time-script race under concurrent requests
1048
1049 CGI helper scripts used by HTTP-related test scripts have been updated
1050 to use atomic filesystem operations, preventing race conditions when
1051 Apache handles concurrent requests.
1052
1053 Needs review.
1054 cf. <CAC2QwmLWkk4JS2XKLdj4i4CAtr7zZo=9tV_=pPQ77zR+R=pGUw@mail.gmail.com>
1055 source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com>
1056
1057
1058 * ps/odb-pluggable-housekeeping (2026-07-12) 12 commits
1059 (merged to 'next' on 2026-07-28 at 1e622f0e29)
1060 + odb: make optimizations pluggable
1061 + builtin/gc: fix signedness issues in ODB-related functionality
1062 + builtin/gc: refactor ODB optimizations to operate on "files" source
1063 + builtin/gc: introduce `odb_optimize_required()`
1064 + builtin/gc: move geometric repacking into `odb_optimize()`
1065 + builtin/gc: introduce object database optimization options
1066 + builtin/gc: inline config values specific to the "files" backend
1067 + builtin/gc: make repack arguments self-contained
1068 + builtin/gc: extract object database optimizations into separate function
1069 + builtin/gc: move worktree and rerere tasks before object optimizations
1070 + odb: run "pre-auto-gc" hook for all maintenance tasks
1071 + t7900: simplify how we check for maintenance tasks
1072
1073 Object database housekeeping in 'git gc' and 'git maintenance' has
1074 been refactored to be pluggable. The files-backend-specific logic,
1075 including incremental and geometric repacking as well as object
1076 pruning, has been moved out of the command implementation and into the
1077 files object database source, enabling future alternative object
1078 database backends to implement their own housekeeping services.
1079
1080 Will merge to 'master'.
1081 cf. <xmqqh5m2yhkm.fsf@gitster.g>
1082 source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
1083
1084
1085 * ds/sparse-index-ita-crash (2026-07-06) 1 commit
1086 (merged to 'next' on 2026-07-31 at 21b8a5bc05)
1087 + sparse-index: avoid crash on intent-to-add entry outside the cone
1088
1089 A crash in the 'sparse-index' collapse code when encountering an
1090 invalidated cache-tree node (due to an intent-to-add path) has been
1091 fixed by avoiding collapsing such subtrees.
1092
1093 Will merge to 'master'.
1094 cf. <xmqq33x1o465.fsf@gitster.g>
1095 source: <pull.2167.git.1783345853272.gitgitgadget@gmail.com>
1096
1097
1098 * ij/subtree-reject-v2-config (2026-07-06) 2 commits
1099 - git-subtree: Bail out if we find output from Rust rewrite (test)
1100 - git-subtree: Bail out if we find output from Rust rewrite
1101
1102 The shell script implementation of 'git subtree' has been updated to
1103 check for the presence of the configuration file of the new Rust
1104 implementation, preventing users from accidentally running the old
1105 script on repositories already managed by the new tool.
1106
1107 Expecting a reroll.
1108 cf. <27219.20156.438730.881821@chiark.greenend.org.uk>
1109 source: <20260706115816.20267-1-ijackson@chiark.greenend.org.uk>
1110
1111
1112 * jm/t0213-skip-emulated-ancestry-tests (2026-07-06) 1 commit
1113 - t0213: skip ancestry tests under user-mode emulation
1114
1115 The 'TRACE2_ANCESTRY' prerequisite in the 't0213' test script has been
1116 refined to avoid failures under user-mode emulation by verifying that
1117 the ancestry collector reports the expected process names rather than
1118 the emulator binary name.
1119
1120 Needs review.
1121 cf. <xmqq33xcz2i7.fsf@gitster.g>
1122 source: <pull.2168.git.1783359242130.gitgitgadget@gmail.com>
1123
1124
1125 * zy/apply-abandoned-header-fix (2026-07-01) 1 commit
1126 - apply: avoid leaking abandoned git-header state
1127
1128 A candidate 'git diff' header parsed by 'git apply' has been isolated
1129 in a temporary structure, preventing any partially parsed state from
1130 polluting the main patch structure and causing assertions to trip if
1131 the header is ultimately rejected.
1132
1133 Needs review.
1134 source: <20260702041759.51572-1-zhihao.yao@njit.edu>
1135
1136
1137 * ps/libgit-in-subdir (2026-07-12) 3 commits
1138 . Move libgit.a sources into separate "lib/" directory
1139 . t/helper: prepare "test-example-tap.c" for introduction of "lib/"
1140 . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir
1141
1142 The source files for 'libgit.a' have been moved into a new 'lib/'
1143 directory to clean up the top-level directory and clearly separate
1144 library code.
1145
1146 Ejected for now, as it causes too many evil merges with other topics.
1147
1148 Waiting for response, stalled.
1149 cf. <xmqqqzkx9t95.fsf@gitster.g>
1150 cf. <al6yCTDjBRn2HGq0@com-79390>
1151 source: <20260713-pks-libgit-in-subdir-v4-0-696240876eb1@pks.im>
1152
1153
1154 * mm/line-log-limited-ops (2026-06-27) 7 commits
1155 - diffcore-pickaxe: scope -G to the -L tracked range
1156 - diff: support --check with -L line ranges
1157 - line-log: support diff stat formats with -L
1158 - diff: extract a line-range diff helper for reuse
1159 - diff: emit -L hunk headers via xdiff's formatter
1160 - diff: simplify the line-range filter by classifying removals immediately
1161 - diff: rename and group the line-range filter for clarity
1162 (this branch is used by mm/diff-process-hunks.)
1163
1164 The 'git log -L<range>:<path>' command has been taught to limit
1165 various 'diff' operations, such as '--stat', '--check', and '-G', to
1166 the specified range and path.
1167
1168 Needs review.
1169 source: <pull.2152.v2.git.1782581342.gitgitgadget@gmail.com>
1170
1171
1172 * hn/history-squash (2026-07-31) 4 commits
1173 - history: add squash subcommand to fold a range
1174 - sequencer: share the squash message marker helpers and flags
1175 - history: give commit_tree_ext a message template
1176 - history: extract helper for a commit's parent tree
1177
1178 The experimental 'git history' command has been taught a new 'squash'
1179 subcommand to fold a range of commits into a single commit, with any
1180 descendants replayed on top.
1181
1182 Needs review.
1183 source: <pull.2337.v11.git.git.1785567209.gitgitgadget@gmail.com>
1184
1185
1186 * tb/midx-incremental-custom-base (2026-06-12) 3 commits
1187 - midx-write: include packs above custom incremental base
1188 - midx: pass custom '--base' through incremental writes
1189 - t5334: expose shared `nth_line()` helper
1190
1191 The 'git multi-pack-index write --incremental' command has been
1192 corrected to properly honor the '--base' option. Previously, the
1193 custom base was ignored by the normal write path; packs from layers
1194 above the selected base were incorrectly skipped by the pack exclusion
1195 logic, and reachability closure for bitmaps was broken.
1196
1197 Needs review.
1198 source: <cover.1781294771.git.me@ttaylorr.com>
1199
1200
1201 * tc/replay-linearize (2026-07-28) 3 commits
1202 - replay: offer an option to linearize the commit topology
1203 - replay: resolve the replay base outside pick_regular_commit()
1204 - replay: add helper to put entry into replayed_commits
1205
1206 The 'git replay' command has been taught the '--linearize' option to
1207 drop merge commits and linearize the replayed history, mimicking 'git
1208 rebase --no-rebase-merges'.
1209
1210 Needs review.
1211 cf. <xmqqy0evc6n9.fsf@gitster.g>
1212 source: <20260728-toon-git-replay-drop-merges-v8-0-ced11dffe749@iotcl.com>
1213
1214
1215 * mm/diff-process-hunks (2026-08-01) 11 commits
1216 - diff: consult oid-only hunk providers via diff.<driver>.process
1217 - userdiff: add diff.<driver>.process config
1218 - sub-process: add a gentle status read
1219 - sub-process: separate process lifecycle from hashmap management
1220 - blame: read precomputed hunks
1221 - diff: read precomputed hunks for stat output
1222 - diff: record precomputed hunks during stat output
1223 - diff-hunks: add the store format, library, and command
1224 - diff: introduce a hunk provider interface
1225 - gitattributes: document how external diff drivers relate to diff features
1226 - Merge branch 'mm/line-log-limited-ops' into mm/diff-process-hunks
1227 (this branch uses mm/line-log-limited-ops.)
1228
1229 A new 'diff.<driver>.process' configuration has been introduced to
1230 allow a long-running external process to act as a hunk provider,
1231 enabling external tools to control which lines Git considers changed
1232 while leaving all output formatting (word diff, color, blame, etc.) to
1233 Git's standard pipeline.
1234
1235 Needs review.
1236 source: <20260801174156.2998808-1-mmontalbo@gmail.com>
1237
1238
1239 * ec/commit-fixup-options (2026-05-26) 2 commits
1240 - commit: allow -c/-C for all kinds of --fixup
1241 - commit: allow -m/-F for all kinds of --fixup
1242
1243 Support for '-m', '-F', '-c', or '-C' options to supply a commit log
1244 message from outside the editor has been added for all 'git commit
1245 --fixup' variations.
1246
1247 Needs review.
1248 source: <cover.1779792311.git.erik@cervined.in>
1249
1250
1251 * hn/branch-delete-merged (2026-07-30) 7 commits
1252 - branch: add --dry-run for --delete-merged
1253 - branch: add branch.<name>.deleteMerged opt-out
1254 - branch: add --delete-merged <pattern>
1255 - branch: prepare delete_branches for a bulk caller
1256 - branch: let delete_branches skip unmerged branches on bulk refusal
1257 - branch: convert delete_branches() to a flags argument
1258 - branch: add --forked filter for --list mode
1259
1260 The 'git branch' command has been taught the '--delete-merged' option
1261 to remove local branches that are already merged into their tracked
1262 remote-tracking branches.
1263
1264 Needs review.
1265 cf. <2574f79a-f04e-449f-aeb4-10d68cdc9437@gmail.com>
1266 source: <pull.2285.v24.git.git.1785419916.gitgitgadget@gmail.com>
1267
1268
1269 * kk/merge-base-exhaustion (2026-07-11) 11 commits
1270 - commit-reach: remove commit-date ordering fallback
1271 - commit-reach: move min_generation check into paint_queue_get()
1272 - commit-reach: terminate merge-base walk when one paint side is exhausted
1273 - commit-reach: introduce struct paint_state with per-side counters
1274 - t6600: add clock-skew topologies and step counts for edge cases
1275 - commit-reach: add trace2 instrumentation to paint_down_to_common()
1276 - t6099, t6600: add side-exhaustion regression tests
1277 - t6600: add test cases for side-exhaustion edge cases
1278 - test-lib-functions: improve diagnostic output for trace2 data assertions
1279 - Documentation/technical: add paint-down-to-common doc
1280 - Merge branch 'kk/commit-reach-find-all-fix' into kk/merge-base-exhaustion
1281
1282 The merge-base computation has been optimized by stopping the walk
1283 early when one side's exclusive commits in the queue are exhausted,
1284 yielding significant speedups for queries with one-sided histories.
1285
1286 Waiting for review.
1287 cf. <CAL71e4PwoJ4fxKBNuf3HB3Po92WRaV4yDBUDcuEYiggiDD=+Ew@mail.gmail.com>
1288 cf. <CABPp-BGATrNJyT7trzUzAMB_v-1ssVe_SRqp+281X5GzU=2eow@mail.gmail.com>
1289 source: <pull.2149.v6.git.1783776466.gitgitgadget@gmail.com>