Skip to contentSkip to conversation

What's cooking in git.git (Nov 2026, #02)

DISCUSSION Junio C Hamano 3 participants 5 messages Nov 5

lore
Share & tools
lore
#0 lore raw

Here are the topics that have been cooking in my tree. Commits prefixed with '+' are in 'next' (being in 'next' is a sign that a topic is stable enough to be used and is a candidate to be in a future release). Commits prefixed with '-' are only in 'seen', and aren't considered "accepted" at all. Each topic is annotated with one-line comment of its status (e.g., "Waiting for response", "Will merge to 'master'") and may be annotated with URLs of messages that explain the status, but these references are by no means exhaustive. A topic without enough support may be discarded after a long period of no activity (of course, it can be resubmitted when new interest arises).

Copies of the source code to Git live in many repositories, and the following is a list of the ones I push into or their mirrors. Some repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-scm/git/

With all the integration branches and topics broken out:

https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format are not sources, they are published in these repositories for convenience (replace "htmldocs" with "manpages" for the manual pages):

git://git.kernel.org/pub/scm/git/git-htmldocs.git/
https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* dk/stash-completion-updates (2026-10-23) 5 commits (merged to 'next' on 2026-10-29 at 4a67bc13b9)
+ completion: drop "stash save" completion altogether
+ doc: drop usage mentions of "git stash save"
+ completion: fix Zsh handling of stash names
+ Completion: extract common stash listing code
+ completion: simplify stash subcommand completion

The command-line completion for 'git stash' has been updated to dynamically discover subcommands and to correct a Zsh-specific formatting issue where stash references were improperly unquoted. Additionally, the deprecated 'save' subcommand has been removed from completions and synopsis documentation.

Graduated to 'master'.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* jc/advice-config-set-global (2026-09-14) 1 commit (merged to 'next' on 2026-10-28 at fa03554666)
+ advice: give cut-and-pasteable advice to squelch

The advice subsystem has been updated to suggest using the '--global' option when recommending a command snippet to squelch future advice messages, since global configuration is generally more appropriate for user-level preferences than per-repository settings.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* jc/myfirstcontribution-discuss-then-reroll (2026-10-22) 2 commits (merged to 'next' on 2026-10-28 at 3dd1e326b6)
+ MyFirstContribution: clarify that "reviewing" is a discussion
+ MyFirstContribution: move "how to send v2" after discussing reviews

The documentation on contributing has been updated to emphasize the importance of discussing review feedback before sending the next iteration, and the section on sending an updated version has been moved to appear after the discussion of the review process.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* je/doc-merge-conflicts (2026-10-26) 6 commits (merged to 'next' on 2026-10-29 at db87520bda)
+ doc: git-pull: link to new merge conflicts guide
+ doc: git-cherry-pick: link to new merge conflicts guide
+ doc: git-revert: link to new merge conflicts guide
+ doc: git-rebase: link to new merge conflicts guide
+ doc: git-merge: link to new merge conflicts guide
+ doc: add new gitmergeconflicts man page

A new user manual page on how to resolve merge conflicts has been introduced, and other commands that could encounter conflicts have been updated to link to it.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>

* je/doc-remove-gittutorial-2 (2026-10-26) 2 commits (merged to 'next' on 2026-10-29 at 51f726e5ce)
+ doc: remove references to gittutorial-2
+ doc: remove gittutorial-2

The obsolete 'gittutorial-2' documentation and all references to it have been removed from the documentation tree and 'command-list.txt'.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>

* kf/archive-zip-msg-i18n (2026-10-26) 1 commit
(merged to 'next' on 2026-10-29 at ae25f6f799)
+ archive-zip: refactor 'path too long' error message to use Q_()

The error message given when pathname is too long has been updated to use the pluralized translation function, Q_().

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* ks/unit-tests-ignore-long-tests (2026-10-26) 2 commits (merged to 'next' on 2026-10-29 at fec3e11e70)
+ unit-tests: ignore --long-tests
+ unit-tests: reshuffle NOOP arguments to maintain order

The 'unit-test' runner has been taught to safely ignore the '--long-tests' ('-l') option, preventing it from failing when the same compatibility arguments are passed to both unit and integration tests. The list of ignored arguments has also been sorted.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <20261026-ks-unit-tests-ignore-long-tests-v2-0-fdbbefbd19fb@gmail.com>

* lb/reflog-expire-dry-run-fix (2026-10-23) 1 commit (merged to 'next' on 2026-10-29 at 31d1e57fa9)
+ builtin/reflog: say "would prune" for named refs with --dry-run

The --dry-run option of git reflog expire has been corrected to report "would prune" instead of "prune" when refs are named on the command line, bringing it in line with the behavior of the --all option.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* oa/diffcore-break-remove-use-the-repository-variable (2026-10-14) 1 commit (merged to 'next' on 2026-10-29 at b67ae59c5c)
+ diffcore-break: remove USE_THE_REPOSITORY_VARIABLE

The unused 'USE_THE_REPOSITORY_VARIABLE' macro has been removed from 'diffcore-break.c'.

Graduated to 'master'.
source: <[email protected]>

* oa/diffcore-rename-no-the-repository (2026-10-24) 1 commit (merged to 'next' on 2026-10-29 at 69cfbbd316)
+ diffcore-rename: stop using the_repository

The global state 'the_repository' in 'diffcore-rename.c' has been removed by utilizing the repository pointer available within the 'diff_options' context structure.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>

* pw/allow-compound-literals (2026-10-26) 1 commit (merged to 'next' on 2026-10-29 at 2352a16417)
+ CodingGuidelines: allow compound literals

The coding guidelines have been updated to officially allow the use of C99 compound literals, as the test balloon has been flying without issues since late 2024.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <a4b382c0373e1b410c4c1ef74b313f86076d48aa.1793024062.git.phillip.wood@dunelm.org.uk>

* ss/t0081-test-path-is-file (2026-10-15) 1 commit (merged to 'next' on 2026-10-28 at f88a9040e1)
+ t0081: modernize the code testing whether a file exists

The test script 't0081-find-pack.sh' has been updated to use the 'test_path_is_file' helper instead of the raw 'test -f' command.

Graduated to 'master'.
source: <[email protected]>

* tb/ci-pin-actions (2026-10-26) 1 commit
(merged to 'next' on 2026-10-29 at 1017f505f0)
+ ci: pin actions in the main workflow to full commit IDs

The CI workflow has been updated to pin GitHub Actions to their full commit IDs rather than version tags, which secures the CI environment against potential supply-chain attacks.

Graduated to 'master'.
cf. <[email protected]>
source: <67057c2277e38a675ffbe0206bf249c24efdd6b6.1793038091.git.ttaylorr@openai.com>

* tb/t1450-use-mv-f (2026-10-25) 1 commit (merged to 'next' on 2026-10-29 at f7acecb63b)
+ t1450: use 'mv -f' when overwriting a read-only file

A test in 't1450-fsck.sh' failed on older macOS when overwriting a read-only loose object, which has been corrected by using 'mv -f'.

Graduated to 'master'.
source: <[email protected]>

* tk/t7104-test-path-is-file (2026-10-26) 1 commit (merged to 'next' on 2026-10-29 at 69c9713470)
+ t7104: use test_path_is_file instead of test -f

A test script 't7104' has been modernized to use 'test_path_is_file' instead of 'test -f'.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>

--------------------------------------------------
[New Topics]

* kk/connectivity-check-ignore-replace (2026-11-02) 1 commit
- rev-list: ignore replacements in the connectivity check

The connectivity check algorithm has been updated to ignore replacement objects, aligning its behavior with operations like 'fsck' and 'pack-objects' that also require the original underlying objects to be present.

Will merge to 'next'?
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* tc/security-boundary-doc (2026-10-30) 1 commit
- Documentation: clarify Git's security boundary

A new document, gitsecurityboundary(7), has been added to clarify the security boundaries Git guarantees and the responsibilities of the user, aiming to provide a clear reference for what constitutes a security vulnerability in Git.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* kk/quarantine-alternate-refs (2026-11-02) 1 commit
- odb: do not list our own refs as alternate refs in the quarantine

The connectivity check in 'git-receive-pack(1)' has been optimized to not list the repository's own refs as alternate refs when running inside the object quarantine, avoiding redundant traversal of hidden refs.

Expecting a reroll.
cf. <CAL71e4OreARF+dbCU3S8-_umrFEptPLPUiPDH3SYBx6OYjVpfg@mail.gmail.com>
source: <[email protected]>

* jc/freeze-repo-config-values (2026-11-02) 1 commit
- repo_config_values: freeze the structure for now

The 'struct repo_config_values' structure has been documented to explicitly discourage adding new members to it, pending a wider cleanup of repository configuration and settings.

Will merge to 'next'?
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* rm/http-retry-improvements (2026-11-03) 4 commits
- remote-curl: retry transient HTTP errors in post_rpc()
- http: add http.retryStatusCodes config option
- http: add exponential backoff without Retry-After
- http: fix retry count and Retry-After timing

The HTTP retry mechanism has been enhanced to implement exponential backoff when a 'Retry-After' header is missing, to allow configuring additional transient HTTP status codes (like 502 or 503) for retries, and to extend these retry capabilities to HTTP POST operations such as 'git-upload-pack'.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* ep/pack-objects-streamed-large-blobs-fix (2026-11-01) 1 commit
- pack-objects: use size_t for streamed large blobs

The code in 'git pack-objects' used to truncate object sizes on platforms where 'long' is 32-bit but 'size_t' is larger (like 64-bit Windows) when handling large objects exceeding 4GiB, which has been corrected by using 'size_t' and 'off_t' appropriately.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* hn/ci-ubuntu-26.04-fixes (2026-11-01) 3 commits
- ci: pin linux32 to ubuntu-24.04 to restore networking
- install-dependencies: work around a permission problem
- ci: use apt-get in the linux32 job

The GitHub Actions CI jobs have been updated to fix breakages caused by the move to Ubuntu 26.04 runner images, including using 'apt-get' instead of 'apt' for stable CLI output, elevating permissions when replacing system binaries, and temporarily pinning the 'linux32' job to Ubuntu 24.04 to avoid seccomp-related networking failures.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* ps/odb-loose-stale-cache (2026-11-04) 2 commits
- odb/source-loose: fix existence checks for newly written objects
- odb/source-loose: extract logic to retrieve subdirectory bitmap

The loose object cache has been updated to track newly written loose objects to prevent stale cache entries from causing existence checks to fail, which previously caused issues when lazy-fetching missing objects during a partial clone.

Will merge to 'next'?
cf. <[email protected]>
cf. <CAL71e4ONN4OQUZ2S==0TRWqZgA8ogT0smRL3Rk46voTm+0Tihw@mail.gmail.com> cf. <[email protected]>
source: <[email protected]>

* cd/shift-root-in-graph-fix (2026-11-03) 1 commit
- graph: do not indent visual roots with columns to their right

The graph drawing logic has been updated to avoid indenting visual roots when there are columns to their right, which prevents rendering artifacts.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* ds/fsmonitor-invalidate-untracked (2026-11-04) 1 commit
- fsmonitor: invalidate untracked cache after losing history

The 'fsmonitor' integration with the untracked cache has been updated to fully invalidate the untracked cache when 'fsmonitor' loses its event history. This prevents stale untracked cache entries from being incorrectly trusted when 'fsmonitor' is later re-enabled.

Needs review.
source: <[email protected]>

* ds/path-walk-tagged-tree-revisit (2026-11-04) 1 commit
- path-walk: allow revisiting paths from tagged trees

The 'path-walk' traversal has been corrected to allow revisiting paths from tagged trees by removing processed paths from the queue suppression set, ensuring objects introduced by tagged trees at previously visited paths are no longer skipped.

Needs review.
source: <[email protected]>

* jc/branch-doc-consistently-promote-switch (2026-11-03) 1 commit
- branch doc: consistently promote 'switch'

The documentation for 'git branch' has been updated to consistently use 'git switch -c' instead of 'git checkout -b' in its examples, aligning with the earlier promotion of 'git switch'.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* je/doc-git-diff-examples (2026-11-03) 1 commit
- doc: git-diff: rewrite EXAMPLES section

The EXAMPLES section of the 'git diff' manual page has been rewritten to use a more readable cheat-sheet format, incorporating commonly used examples while preserving historical examples.

Expecting a reroll.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* oa/negotiator-default-no-the-repository (2026-11-03) 1 commit
- negotiator/default: stop using the_repository

The default fetch negotiator has been updated to stop relying on the global 'the_repository' variable and instead use the repository context passed during its initialization.

Needs review.
source: <[email protected]>

* ps/commit-graph-write-refactor (2026-11-04) 10 commits
- commit-graph: modernize function names
- odb/source-files: verify commit-graphs as part of fsck
- builtin/commit-graph: set flags directly
- commit-graph: fix mixup of write/verify flags
- commit-graph: move remaining write parameters into options
- commit-graph: merge the two commit graph writers
- commit-graph: drop redundant flags in write context
- commit-graph: drop NULL checks for write options
- commit-graph: pass writer flags via options
- commit-graph: rename struct commit_graph_opts
- Merge branch 'ps/commit-graph-cleanups' into ps/commit-graph-write-refactor (this branch uses ps/commit-graph-cleanups.)

Various refactoring patches around the commit-graph writing code have been applied to modernize interfaces and consolidate parameters into a single options structure, in preparation for pluggable commit-graph backends.

Will merge to 'next'?
cf. <[email protected]>
source: <20261104-pks-commit-graph-write-refactorings-v1-0-d013d9401a59@pks.im>

* tc/push-multiple-force-with-lease (2026-11-04) 1 commit
- push: fix --force-with-lease forwarding in push_multiple()

The forwarding of the '--force-with-lease' option when pushing to a remote group has been fixed to ensure that both bare '--force-with-lease' and '--force-with-lease=<ref>:' forms are correctly passed to the underlying push commands.

Needs review.
source: <[email protected]>

--------------------------------------------------
[Stalled]

* mh/rust-crate-subdir (2026-09-16) 1 commit . move rust gitcore crate to a different subdirectory

The Rust code and its 'Cargo.toml' file have been moved from the top-level repository root and 'src/' directory into a dedicated 'rust/' subdirectory. This avoids confusing Cargo's packaging mechanism when the Git repository is included as a submodule in other Rust projects.

Will discard, as it has been stalled without much interest. cf. <4brq3bxkdq6ewviznwrg7uqgpp2j6xf2bladpmdrpaypcjp63t@lqfpwwagpbss> cf. <[email protected]>
source: <[email protected]>

* tb/midx-incremental-custom-base (2026-06-12) 3 commits . midx-write: include packs above custom incremental base . midx: pass custom '--base' through incremental writes . t5334: expose shared nth_line() helper

The 'git multi-pack-index write --incremental' command has been corrected to properly honor the '--base' option. Previously, the custom base was ignored by the normal write path; packs from layers above the selected base were incorrectly skipped by the pack exclusion logic, and reachability closure for bitmaps was broken.

Expecting a reroll for too long, stalled.
cf. <an4uIQA09rDCwwBp@com-79390>
cf. <[email protected]>
source: <[email protected]>

* mm/diff-process-hunks (2026-08-13) 11 commits
. fixup! diff: consult oid-only hunk providers via diff.<driver>.process . diff: consult oid-only hunk providers via diff.<driver>.process . userdiff: add diff.<driver>.process config
. sub-process: add a gentle status read
. sub-process: separate process lifecycle from hashmap management . blame: read precomputed hunks
. diff: read precomputed hunks for stat output
. diff: record precomputed hunks during stat output
. diff-hunks: add the store format, library, and command
. diff: introduce a hunk provider interface
. gitattributes: document how external diff drivers relate to diff features . Merge branch 'mm/line-log-limited-ops' into mm/diff-process-hunks (this branch uses mm/line-log-limited-ops.)

A new 'diff.<driver>.process' configuration has been introduced to allow a long-running external process to act as a hunk provider, enabling external tools to control which lines Git considers changed while leaving all output formatting (word diff, color, blame, etc.) to Git's standard pipeline.

Expecting a reroll for too long, stalled.
cf. <CAC2Qwm+kzT_3_GKrpay=JLGYsxS10oWCg2MJPHrCVogFHA0OdA@mail.gmail.com>
source: <[email protected]>

* ij/subtree-reject-v2-config (2026-07-06) 2 commits
. git-subtree: Bail out if we find output from Rust rewrite (test) . git-subtree: Bail out if we find output from Rust rewrite

The shell script implementation of 'git subtree' has been updated to check for the presence of the configuration file of the new Rust implementation, preventing users from accidentally running the old script on repositories already managed by the new tool.

Expecting a reroll for too long, stalled.
cf. <[email protected]>
source: <[email protected]>

* pm/replay-add-signing-support (2026-09-25) 2 commits . replay: add the -S option
. replay: handle failure to create commits

The experimental 'git replay' command has been taught to GPG-sign commits, fixing an existing limitation and plugging a bug where intermediate commit creation failures were silently ignored.

Waiting for response for too long, stalled. cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* mc/refs-rename-transaction (2026-10-08) 4 commits
. refs: remove backend-specific copy and rename callbacks . refs: run copy and rename through ordinary transactions . refs: support replacing reflogs in a transaction
. refs: distinguish internal transactions from logical updates

Both reference rename and copy operations have been refactored to use the generic reference transaction API, ensuring that hooks observe the updates as unified logical operations rather than piece-meal internal deletions and additions.

Waiting for response for too long, stalled. Breaks 'seen' when merged. cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

--------------------------------------------------
[Cooking]

* ot/t5300-test-path-is-file (2026-10-29) 1 commit (merged to 'next' on 2026-11-01 at 499e382c9f)
+ t5300: modernize test path checks in t5300

Test updates (in 't5300') to use the 'test_path_is_file' helper for checking file existence.

Will merge to 'master'.
source: <[email protected]>

* tk/t0410-test-path-exists (2026-10-29) 1 commit
(merged to 'next' on 2026-11-01 at d86ae8198b)
+ t0410: use test_path_exists instead of test -e

A test script has been updated to use the test_path_exists helper instead of a raw test -e command, improving diagnostic output on failure.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* fd/check-ref-format-onelevel-tests (2026-10-29) 1 commit (merged to 'next' on 2026-11-01 at cc117c8364)
+ t1402: test --no-allow-onelevel option precedence

Tests for the option precedence of '--allow-onelevel' and its negated form have been added to 'git check-ref-format', establishing the current behavior before a planned migration to the 'parse_options()' API.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* tk/t5402-test-path-helper (2026-10-29) 1 commit (merged to 'next' on 2026-11-02 at 506a7eabc5)
+ t5402: use test_path_* helpers instead of test -e and test -f

Use of "test -e" and "! test -e" in t5402 have been updated to use test_path_exists and test_path_missing.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* hn/ccache-sloppiness-for-pch (2026-10-29) 1 commit
- Makefile: let ccache cache objects built with the precompiled header

The build procedure using GNU Make has been updated to export the 'CCACHE_SLOPPINESS' variable with 'pch_defines' and 'time_macros' when the precompiled header is in use, which allows 'ccache' to actually cache the objects built with it.

Needs review.
source: <[email protected]>

* hk/config-log-typofix (2026-10-29) 1 commit
(merged to 'next' on 2026-10-31 at f6aea0fb84)
+ doc: config/log: fix typo in git config docs

A typo in the 'git config' documentation has been corrected.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* jc/doc-gitignore-wildcard (2026-11-03) 1 commit
- gitignore: rewrite wildcard description

The documentation for '.gitignore' has been updated to clarify how wildcard characters like the asterisk and question mark behave, without relying on external references to the fnmatch(3) or glob(7) manuals.

Needs review.
source: <[email protected]>

* jc/mark-static (2026-10-30) 4 commits
(merged to 'next' on 2026-11-03 at 1fea0f626a)
+ unpack-trees: hide verify_uptodate()
+ read-cache: hide refresh_cache_entry()
+ add -i: hide init/clear_add_i_state() functions
+ ident: remove unused author_ident_sufficiently_given()

Various functions and data structures that no longer need to be globally visible, such as those exposed for the now-removed 'recursive' merge strategy, have been made file-scope static or removed entirely to shrink the public API surface.

Will merge to 'master'.
cf. <[email protected]> cf. <[email protected]> cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* ps/grep-recurse-submodules-fix (2026-11-03) 3 commits
- builtin/grep: read ".gitmodules" via passed-in repository
- builtin/grep: read sparse directory trees via passed-in repository
- builtin/grep: read submodule trees via their repository

A regression where 'git grep --recurse-submodules' failed to read nested trees in a submodule has been fixed by passing the correct repository context pointer instead of relying on the global 'the_repository' variable. Additional latent bugs where grep_cache() and grep_objects() incorrectly referenced the global state have also been corrected.

Needs review.
source: <[email protected]>

* hn/remote-simple-push-triangular (2026-10-31) 2 commits (merged to 'next' on 2026-11-04 at 3d87058231)
+ remote: resolve "simple" @{push} when pushing to another remote
+ remote: move "simple" @{push} resolution into a helper

The 'simple' push resolution in 'git rev-parse @{push}' has been updated to mirror the behavior of 'git push'. When the configured push remote differs from the fetch remote, it now resolves to the branch of the same name on the push remote instead of failing.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* jk/test-env-quoting-fix (2026-10-30) 1 commit
(merged to 'next' on 2026-11-04 at a009c20290)
+ t5702: be more resilient to env quoting

Tests in 't5702' that grep the output of 'env' to check for the 'GIT_PROTOCOL' environment variable have been updated to explicitly echo the variable instead, making them resilient to quoting changes introduced in newer GNU coreutils.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* lt/describe-commit-date-skew (2026-10-30) 1 commit
- describe: count the distance correctly when commit dates are skewed

'git describe' has been taught to use commit generation numbers when available to accurately calculate commit distance even when commit dates are skewed.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
cf. <CAHk-=wh6X3V49_RmYadHe-9+vEML1jDp2coy2YGBzrDqyDF1rg@mail.gmail.com> cf. <[email protected]>
cf. <CAL71e4PqEQkGoont3tL5wJWd1_itsaaxfX+DOkLj64x-S7xR1A@mail.gmail.com>
source: <[email protected]>

* oa/range-diff-repo (2026-10-29) 1 commit (merged to 'next' on 2026-11-04 at ab1018250d)
+ range-diff: use diffopt->repo instead of the_repository

The 'range-diff' command has been updated to use the repository context pointer from 'diff_options' instead of relying on the global 'the_repository' and 'the_hash_algo' variables, as part of the libification effort.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* tb/merge-ort-valueless-rename-config (2026-10-31) 1 commit (merged to 'next' on 2026-11-04 at 345086619a)
+ merge-ort: accept rename settings given without a value

The configuration parsing in the 'merge-ort' backend has been updated to accept valueless settings for 'diff.renames', 'merge.renames', and 'merge.directoryRenames', which are now properly treated as true.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* sp/submodule-abbrev-fix (2026-11-03) 1 commit
- submodule: use the submodule repository to abbreviate commits

The abbreviation of commit IDs in submodule diff headers has been corrected to use the submodule's object database instead of the superproject's, avoiding potential ambiguity.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* ep/pack-objects-streamed-large-blobs (2026-11-01) 1 commit (merged to 'next' on 2026-11-04 at 1e64290722)
+ pack-objects: use size_t for streamed large blobs

The code in 'git pack-objects' used to truncate object sizes on platforms where 'long' is 32-bit but 'size_t' is larger (like 64-bit Windows) when handling large objects exceeding 4GiB, which has been corrected by using 'size_t' and 'off_t' appropriately.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* ta/cg-require-perl-5.26.0 (2026-11-01) 1 commit
- CodingGuidelines: update the required Perl version

CodingGuidelines has been updated to state that Perl 5.26.0 is required these days, which is the case since late 2024.

Waiting for review.
cf. <[email protected]>
cf. <20261104193450.XvTBf%[email protected]>
source: <[email protected]>

* sa/submodule-root-relative-url (2026-10-26) 2 commits
- SQUASH??? test number conflict resolution
- submodule: make '^/' work like '../' but with an absolute path

A new ^/ URL syntax has been introduced for submodules to specify paths relative to the superproject's remote's server root, allowing submodules to remain reachable when the superproject is forked into a subgroup or different hierarchy depth.

Waiting for response.
cf. <CA+P7+xo8J_+3QECoGHnN1AxXPpjaKaHp3VoN9EEcyhZ+Q1fzew@mail.gmail.com> cf. <[email protected]>
source: <[email protected]>

* ps/rerere-subcommands (2026-10-29) 12 commits
- builtin/rerere: introduce proper usage strings for subcommands
- builtin/rerere: use OPT_SUBCOMMAND()
- builtin/rerere: turn "gc" into a proper subcommand
- builtin/rerere: turn "diff" into a proper subcommand
- builtin/rerere: turn "remaining" into a proper subcommand
- builtin/rerere: turn "status" into a proper subcommand
- builtin/rerere: turn "clear" into a proper subcommand
- builtin/rerere: turn "forget" into a proper subcommand
- builtin/rerere: stop passing flags to subcommands that ignore them
- builtin/rerere: drop the_repository
- rerere: convert flags into an enum
- rerere: rename repo_rerere()
- Merge branch 'ps/rerere-remove-global-state' into ps/rerere-subcommands

The subcommand parsing of 'git rerere' has been converted to use the standard 'OPT_SUBCOMMAND()' API, removing custom ad-hoc parsing logic and bringing it in line with other Git commands.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* pw/sequencer-delete-rebase-head (2026-10-27) 3 commits (merged to 'next' on 2026-10-30 at 478c76fef9)
+ sequencer: remove AUTO_MERGE at the end of a rebase
+ sequencer: remove REBASE_HEAD at the end of a rebase
+ test_ref_missing(): improve error message

The sequencer has been fixed to ensure that the 'REBASE_HEAD' and 'AUTO_MERGE' refs are properly removed after a rebase finishes, even when the final pick stops for conflicts and is later resumed or skipped.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* sm/test-chmtime-parse-options (2026-11-02) 1 commit
- test-chmtime: use parse_options() to parse command-line flags

The 'test-chmtime' test helper has been updated to use the standard 'parse_options()' API for command-line argument parsing, simplifying the code and standardizing option handling.

Needs review.
source: <[email protected]>

* jk/unit-tests-via-test-lib (2026-10-27) 8 commits
- test-lib: drop the shell JUnit XML reporting code
- test-tool: drop the run-command testsuite mode
- t: drop redundant unit-test invocations
- t: run clar unit tests through test-lib.sh
- test-lib: allow an external program to supply TAP output
- test-lib: stop inventing a JUnit testcase for empty suites
- test-lib: drop unused test_external_has_tap variable
- unit-tests: report the correct unexpected argument

The unit-test execution has been refactored to run inside a regular 'test-lib.sh' shell script, which allows unit tests to benefit from standard test setup like sanitizer options and logging. The test suite's interaction with external TAP generators and JUnit XML reporting has also been cleaned up and simplified.

Needs review.
source: <[email protected]>

* ps/ci-consolidate-test-variables (2026-11-02) 7 commits
- ci: don't override initial branch name in testbed job
- ci/lib: add another NO_RUST build using glibc
- t: honor default ref storage format
- ci/lib: merge switches for specific job names
- ci/lib: deduplicate test variables by pattern matching
- ci/lib: always set GIT_TEST_USE_SET_E on Linux jobs
- ci: consolidate setup of test environment

The test environment setup in the CI scripts has been consolidated and deduplicated to remove redundancies and simplify test flag management.

Will merge to 'next'?
cf. <[email protected]>
cf. <[email protected]>
source: <20261102-b4-pks-ci-test-vars-consolidation-v2-0-a5485c437c62@pks.im>

* sm/prune-packed-libification (2026-10-27) 1 commit (merged to 'next' on 2026-11-03 at 936609cfa0)
+ prune-packed: remove USE_THE_REPOSITORY_VARIABLE

The prune_packed_objects() API and its callbacks have been updated to take a 'struct repository' pointer instead of relying on the global 'the_repository' variable, moving the subsystem closer to being fully libified.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* oa/bundle-uri-drop-the-repository (2026-10-29) 1 commit (merged to 'next' on 2026-11-01 at 1e9fed4ae1)
+ bundle-uri: stop using the_repository

The 'bundle-uri' subsystem has been updated to stop using the global 'the_repository' variable by passing down the repository context to helper functions, allowing the removal of the 'USE_THE_REPOSITORY_VARIABLE' macro.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* hk/test-t1467-refs-rename (2026-10-28) 1 commit (merged to 'next' on 2026-11-03 at 7204b09aee)
+ t/t1467: use test_must_fail in place of NOT operator

The 't1467-refs-rename.sh' test script has been updated to use the 'test_must_fail' helper instead of the '!' operator when checking for expected command failures, ensuring that crashes are not silently ignored.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* ps/commit-graph-cleanups (2026-10-28) 7 commits (merged to 'next' on 2026-11-03 at 6ccffba740)
+ builtin/commit-graph: de-globalize options handling
+ builtin/commit-graph: de-globalize write options handling
+ builtin/commit-graph: simplify how we wire up common options
+ builtin/commit-graph: drop global "--object-dir=" switch
+ builtin/commit-graph: get rid of the_repository
+ builtin/commit-graph: drop declaration for read_replace_refs
+ builtin/commit-graph: rename subcommand functions (this branch is used by ps/commit-graph-write-refactor.)

Various cleanups in the 'commit-graph' builtin command, removing global state and updating to not rely on the implicit 'the_repository' variable, in preparation for making the commit-graph subsystem pluggable.

Will merge to 'master'.
cf. <[email protected]>
cf. <[email protected]>
cf. <CAOLa=ZRVhZjv3yXA76wK+fZ0o=FrwScHcT3=xJOOgYvjG6cSiQ@mail.gmail.com>
source: <[email protected]>

* hn/reflog-operations (2026-10-27) 2 commits
- pretty: add %gb to name the branch of each reflog entry
- reflog: name the strings that mark switches, renames and rebase steps

The 'git reflog' and 'git log -g' commands have learned the '%gb' format placeholder, which decorates each reflog entry with the name of the branch HEAD was on when the entry was recorded, parsing the historical branch name even during a rebase.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* iy/sigchain-recover-concurrent-pops (2026-10-16) 1 commit
- sigchain: recover from concurrent double-pops of the same signal

The signal handler chaining mechanism has been updated to recover from concurrent deliveries of the same signal to multiple threads, which previously could corrupt the handler stack and cause the process to enter an infinite loop.

Waiting for response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* ms/reftable-alloc-size-truncation (2026-10-21) 2 commits
- reftable/basics: widen allocation size arguments to uintmax_t
- Makefile: build the reftable record unit tests

The allocation size validation and memory allocation functions in the reftable backend have been updated to use 'uintmax_t' for their size and element count arguments. This prevents wide values from being truncated to 'size_t' on 32-bit platforms before the allocation size overflow check is performed.

Needs review.
source: <[email protected]>

* sp/t2030-modernize-test-path-checks (2026-10-17) 1 commit
- t2030: modernize test path checks

A test script has been modernized to use 'test_path_is_file' and 'test_path_is_missing' helpers.

Needs review.
source: <[email protected]>

* ak/root-refs-vs-pseudorefs (2026-11-01) 5 commits
- t: stop calling root refs pseudorefs
- refs: stop calling root refs pseudorefs
- doc: stop calling root refs pseudorefs
- doc: glossary: update per-worktree refs
- doc: glossary: add root ref and clarify pseudorefs

The terminology in the documentation and tests has been updated to consistently distinguish between root refs (like 'HEAD' and 'ORIG_HEAD' that are stored in the ref backends) and pseudorefs (like 'FETCH_HEAD' and 'MERGE_HEAD' that are not).

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* jt/tmp-objdir-loose-idx-merge (2026-10-29) 4 commits
- tmp-objdir: merge loose object index when migrating tmpdir
- loose: lift loose object index writing logic into helper
- loose: lift loose object index parsing logic into helper
- loose: use finite timeout when locking "loose-object-idx" file

The temporary object directory migration logic, used for batch fsyncing, has been updated to correctly merge the loose object index file ('loose-object-idx') when migrating to the primary object directory, fixing a migration failure when a compatibility hash is enabled.

Will merge to 'next'?
cf. <[email protected]>
cf. <CAOLa=ZRBdgNZ2D9B2ZFhMAOJc11ENZCcw2a7NhKtkv07t4VE-Q@mail.gmail.com>
source: <[email protected]>

* ag/reflog-count-plural (2026-10-24) 1 commit
- object-name: use Q_() for the reflog entry count

The error message given when a reflog entry is requested that is out of bounds has been updated to use the pluralized translation function, Q_().

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* sp/t0001-avoid-pipe (2026-10-29) 1 commit
(merged to 'next' on 2026-11-01 at c34f3ac17b)
+ t0001: avoid pipes in test scripts

The test script 't0001-init' has been updated to avoid piping the output of 'git version' directly into 'sed', ensuring command failures are properly caught.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* oa/checkout-wo-the-repository (2026-11-04) 2 commits
- checkout: pass the repository to unique_tracking_name()
- remote: add repo_for_each_remote()

The unique_tracking_name() function in checkout.c was the only function that still assumed it works on 'the_repository'; the function and its dependencies have been updated to take an instance of 'struct repository' to work on an arbitrary repository.

Needs review.
source: <[email protected]>

* hn/ci-fail-on-missing-deps (2026-10-27) 2 commits (merged to 'next' on 2026-10-30 at 77e1329871)
+ ci: fail the build if perforce, git-lfs, or JGit fail to install
+ ci: drop quarantine removal for macos perforce binaries

The CI scripts have been updated to fail the build immediately when optional dependencies like Perforce, Git-LFS, or JGit fail to install, instead of silently skipping their tests..

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* tj/drop-no-parseopt (2026-10-29) 2 commits
- git.c: drop NO_PARSEOPT from builtins that use parse-options
- parse-options: answer --git-completion-helper before command runs

The 'NO_PARSEOPT' macro has been removed from a few commands that have migrated to use the parse_options() API, so that they will be included in the output of 'git --list-cmds=parseopt' for shell completion, and 'git fast-import' has been updated to handle shell completion requests without blocking on standard input.

Expecting a reroll.
cf. <CAKrRMNoAALZ0V5fdKjZPQnCXuMP8y49vfUmxYnRt7UEeUTE7kA@mail.gmail.com> cf. <CAKrRMNogw6rUsZzDsEPLmLAmjB6fvcH4njga+_qBz554x8oEwg@mail.gmail.com> cf. <[email protected]>
source: <[email protected]>

* sj/oss-fuzz-commit-graph-gitdir (2026-10-24) 1 commit (merged to 'next' on 2026-11-01 at 485e72bba4)
+ oss-fuzz: set a gitdir in the commit-graph fuzzer

The commit-graph fuzzer has been updated to supply a placeholder '.gitdir' to the repository. This prevents early failures when prepare_repo_settings() is called, allowing the fuzzer to proceed and test optional chunks such as generation data and Bloom filters.

Will merge to 'master'.
cf. <[email protected]>
source: <CAOJ8FdeyJp4ZOfp99DBSp4brWzngdqzrkSY36ByEh=4UPw28Mg@mail.gmail.com>

* sp/diff-delta-safe-arithmetic (2026-10-27) 1 commit
- diff-delta: use safe integer arithmetic

The integer arithmetic used to compute the memory allocation size for the delta index has been updated to use safe helpers. While current limits prevent wrap-around on 32-bit platforms, this provides defensive hardening.

Needs review.
source: <[email protected]>

* mc/status-index-lock (2026-10-22) 2 commits
(merged to 'next' on 2026-10-30 at 045fb0434f)
+ status: lock the index only to write it
+ read-cache: verify skipHash index by stat data

The 'git status' command has been optimized to acquire the index lock only when writing the updated index, rather than holding it during the entire working tree traversal, avoiding lock contention. Index validation has also been improved to use stat data to detect concurrent modifications when 'index.skipHash' is enabled.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* ch/remote-defer-follow-remote-head-validation (2026-10-24) 2 commits
- SQUASH??? factor out parsing of follow-remote-head-raw into a helper
- remote.c: defer remote.<name>.followRemoteHEAD validation

The configuration validation for 'remote.<name>.followRemoteHEAD' has been deferred from parse time to execution time, preventing commands that do not use the setting (like 'git push' or 'git remote -v') from emitting spurious warnings about unrecognized values.

Expecting a reroll.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
cf. <CAHeTm9NOqLA=BfTU9ABDFt8+jOzaRDPRrMNP8thzAQN2NVZAew@mail.gmail.com> cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* tc/test-greplint-in-chainlint (2026-10-24) 4 commits
- t/chainlint: add --greplint to run greplint
- t/greplint: move parsing and token check to library
- t/greplint: skip test bodies without the word grep
- t/interop: replace bare grep with test_grep

The 'test-lint' target in the test suite has been optimized. The parsing effort of test scripts is now amortized by having the 'chainlint' script perform 'greplint' checks during its tokenization phase, significantly speeding up the linting process.

Needs review.
source: <[email protected]>

* os/rebase-doc-incompatible-options (2026-11-01) 1 commit
- doc: git-rebase: update incompatible options

Outdated cross-references to the 'INCOMPATIBLE OPTIONS' section in the 'git rebase' documentation have been removed, and a missing one for the '--onto' option has been added.

Needs review.
source: <[email protected]>

* jc/config-honor-file-permission (2026-10-26) 1 commit
- config: honor file permission bits

The configuration file writing machinery has been updated to inspect the permission bits of the original configuration file and refrain from overwriting a read-only file using its lockfile renaming mechanism.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* je/doc-new-git-tutorial (2026-10-30) 2 commits
(merged to 'next' on 2026-11-03 at 28eda1de12)
+ doc: add new Git tutorial for beginners
+ doc: remove gittutorial

The beginner's tutorial in 'gittutorial.adoc' has been rewritten to focus on a minimal set of commands needed to create a repository, make commits, and push to a remote host, optimizing for a quick one-hour learning experience.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* tb/negotiator-skipping-parse-parents (2026-10-26) 2 commits
- negotiator/skipping.c: parse parents before queueing
- negotiator/default.c: mark commits seen only after parsing

The default and skipping fetch negotiators have been updated to parse parent commits before adding them to the priority queue. This ensures they are sorted by actual commit date rather than being delayed as old commits, and leaves unparsable commits out of the priority queue without incorrectly marking them as seen.

Needs review.
source: <[email protected]>

* mh/init-show-abspath (2026-10-27) 1 commit
(merged to 'next' on 2026-11-03 at 63303464d4)
+ init: show absolute path of (re)initialized repository
+ Merge branch 'ps/odb-alternates-at-creation' into mh/init-show-abspath

The output from 'git init' has been corrected to display the absolute path of the created repository, addressing a recent regression.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* ag/fsck-connectivity-count (2026-10-20) 1 commit
- fsck: report the real object count in the connectivity message
- Merge branch 'ag/fsck-connectivity-msg-i18n' into ag/fsck-connectivity-count

The verbose "Checking connectivity" message in 'git fsck' has been updated to report the actual number of objects instead of the size of the object hash bucket array.

Needs review.
source: <[email protected]>

* hn/fetch-shallow-v2-fix (2026-10-20) 1 commit
- upload-pack: fix slow fetches from a shallow repository

The server-side computation of shallow boundaries for a protocol v2 fetch from a shallow repository has been optimized by directly sending all known shallow roots, avoiding expensive commit history walks and matching protocol v0 behavior. Additionally, local commit history traversal for 'git fetch --unshallow' has been corrected to visit each commit exactly once, preventing hangs on repositories with long histories.

Needs review.
source: <[email protected]>

* ps/odb-reload-alternates (2026-10-28) 6 commits
(merged to 'next' on 2026-11-03 at 295bac407e)
+ odb/source-files: only reload alternates when the file has changed
+ odb/source-files: avoid stat'ing already-known alternates
+ odb/source-files: simplify directory duplication detection
+ odb/source-files: reload alternates on retry
+ odb/source-files: always load alternates via primary object directory
+ odb/source-files: rename alternates-related functions
+ Merge branch 'ps/odb-files-alternates-cleanups' into ps/odb-reload-alternates

The object database files backend has been updated to reload alternates when an object lookup fails on retry. This restores a lost capability to find objects moved to a newly added alternate during a concurrent repository rewrite, with caching and deduplication optimizations to avoid performance regressions.

Will merge to 'master'.
cf. <CAP8UFD2Os79AwJrFvoPti-AD=v6wDf7BVWy4o9dQxQriFD3FzQ@mail.gmail.com> cf. <[email protected]>
cf. <[email protected]>
source: <20261028-pks-odb-files-reload-alternates-v3-0-011ddb64b626@pks.im>

* rk/mktree-batch-tests (2026-10-20) 1 commit
- t1010: add basic tests for mktree --batch

Basic tests for the batch mode of 'git mktree' have been added.

Needs review.
source: <[email protected]>

* cc/pack-index-v3 (2026-10-23) 13 commits
- doc: move pack index v3 documentation
- packfile: allow looking up compat object IDs in packs
- loose: map object IDs using pack index v3
- packfile: validate pack index v3 tables
- packfile: add support for reading pack index v3
- object-file: handle compatibility algorithm
- builtin: populate pack index v3 fields when indexing
- pack-write: add support for pack index v3
- object-file-convert: implement mapping in terms of object DB
- odb: implement interoperability functions
- loose: add a flag to control whether we write mapped OIDs
- loose: rename repo_add_loose_object_map
- loose: allow looking up in object map with source

The third part of the SHA-1/SHA-256 interoperability work has been added, implementing support for reading and writing pack index v3. This allows packed objects to be mapped between hash algorithms by storing object IDs in both the main and compatibility hash algorithms.

Needs review.
source: <[email protected]>

* cr/doc-gpg-ssh-key-lifetime (2026-10-29) 1 commit (merged to 'next' on 2026-11-02 at bda724db1d)
+ doc: gpg: say which date SSH key lifetimes are checked against

The documentation for SSH signature verification has been updated to clarify that key lifetime checks depend on spoofable dates.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* ep/status-missing-upstream (2026-10-21) 1 commit
- status: reword message for a missing upstream branch

The message given by 'git status' and 'git checkout' when the upstream branch does not exist has been reworded to explicitly say so, and to suggest running 'git push' if pushing would create it, instead of claiming that the upstream is gone.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* hn/imap-send-header-fix (2026-11-01) 4 commits
- imap-send: match header names case insensitively
- imap-send: check git send-email copies like other messages
- imap-send: accept messages with Subject before Date
- imap-send: wait for the tunnel command to finish

The 'git imap-send' command has been updated to accept message headers in any order and to match header names case-insensitively, allowing it to properly process messages saved by 'git send-email'. A memory leak in the IMAP tunnel initialization has also been plugged.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* hn/status-compare-branches-default (2026-10-25) 1 commit
- status: compare against both upstream and push branch by default

The default behavior of 'git status' has been updated to compare the current branch against both its upstream and push tracking counterparts. This makes it easier for users with triangular workflows to see all relevant comparisons without needing to configure 'status.compareBranches'.

Needs review.
cf. <CALnO6CBD2aGg_wDZZsT-mWJ99MXYUycx32JfsK8zJXfcmjTBDw@mail.gmail.com>
source: <[email protected]>

* jg/t3429-test-path-is-file (2026-10-21) 1 commit
- t3429: use test_path_is_file helper

A test script has been modernized to use 'test_path_is_file' instead of 'test -e' to verify the existence of a file.

Waiting for response.
cf. <CAPSxiM9SuRiRA6Xixp_zx=fFf_a6S8Mp327FP82Pg7mJdzQ3Kw@mail.gmail.com>
source: <[email protected]>

* ps/odb-object-storage-extension (2026-10-26) 7 commits
(merged to 'next' on 2026-11-01 at 32d7b72031)
+ builtin/submodule: propagate "--object-storage-format="
+ builtin/clone: introduce "--object-storage-format="
+ builtin/init: introduce handling of object storage format
+ builtin: expose the object storage format
+ setup: allow overriding object storage format via environment
+ setup: introduce object storage extension
+ loose: drop unused repo_write_loose_object_map()
+ Merge branch 'ps/setup-enforce-repo-passed-to-create-repository-has-no-state' into ps/odb-object-storage-extension
+ Merge branch 'ps/odb-files-alternates' into ps/odb-object-storage-extension

The object storage format has been made configurable via the 'extensions.objectStorage' configuration variable, allowing users to specify the storage backend and an optional payload, mirroring the design of 'extensions.refStorage'.

Will merge to 'master'.
cf. <[email protected]>
cf. <CAOLa=ZRWktyBmeeiMbPqnX_OkizqPA2mmGrnTABW7Pkk7DcKpA@mail.gmail.com>
source: <[email protected]>

* hn/branch-delete-merged-squash (2026-11-01) 4 commits
- branch: let --delete-integrated find branches merged onto changed files
- branch: add --delete-integrated to delete rebase and squash merged branches
- branch: let delete_branches() name where a branch landed
- branch: move the deleteMerged opt-out check into a helper

A new '--delete-integrated' option has been added to 'git branch' to find and remove branches whose work has been squash-merged or rebase-merged into the upstream, by comparing the blobs of changed files.

Needs review.
source: <[email protected]>

* oa/merge-blobs-stop-using-the-repository (2026-10-17) 1 commit
- merge-blobs: stop using the_repository

The merge-blobs subsystem has been updated to remove its reliance on the global the_repository variable by threading the repository context available from the index_state down to its helper functions.

Needs review.
cf. <CAPSxiM-OyrVEzYgja0nwa8PikfU1WpsCYbiNiXpcxb4TM4=mOA@mail.gmail.com>
source: <[email protected]>

* ss/t2403-modernize-test-d (2026-10-15) 1 commit
- t2403: modernize test for directory existence

The test for worktree removal in 't/t2403-worktree-move.sh' has been modernized to use the 'test_path_is_dir' helper instead of the raw 'test -d' shell command.

Needs review.
cf. <CAPSxiM_gCkW3gvgF-ebK64bUS5za9CQgTFLAn-PnHS12o4afbA@mail.gmail.com>
source: <[email protected]>

* tb/sideband-skip-unrecognized-allow-control-characters (2026-10-16) 1 commit
- sideband: skip unrecognized allowControlCharacters keywords

The configuration parser for 'sideband.allowControlCharacters' has been updated to correctly advance past unrecognized values, preventing an infinite loop when an unknown control character keyword is encountered.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* ak/pretty-wrap-fix (2026-10-17) 1 commit
- pretty: fix lost indent after newline in %w()

The string-wrapping logic used by the '%w()' formatting directive has been corrected to stop skipping a whitespace character that immediately follows a hard line break.

Needs review.
source: <[email protected]>

* js/coverity-overflow-fixes (2026-10-13) 5 commits
- date: avoid overflow in approxidate relative-time multiplication
- git-compat-util: add signed_mult_overflows and mult_overflows macros
- wrapper: reject insanely large byte counts when reading/writing
- http: use size_t for byte position in fwrite_sha1_file
- archive-tar: guard get_path_prefix against zero-length input

Various integer overflow and bounds-checking issues reported by Coverity have been fixed, including adding robust compile-time macros for overflow detection in integer multiplication and using them to protect time offset calculations.

Waiting for response.
cf. <[email protected]> cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* dt/t0410-missing-tree-test (2026-10-20) 2 commits
- t0410: keep git's exit code in test_grep calls
- t0410: use rev-parse to get the subtree OID

The missing-tree test in 't0410' has been cleaned up to avoid dropped exit codes and hardcoded assumptions about the length of object names.

Needs review.
source: <[email protected]>

* iw/connected-deepen-fetch-no-alternate-refs (2026-10-19) 2 commits (merged to 'next' on 2026-11-01 at 9fe72d6c2d)
+ odb: ignore refs of shallow and grafted alternates
+ connected: negate alternate refs in deepening fetches too

The post-fetch connectivity check in 'git fetch' has been corrected to avoid passing alternate refs as positive revisions during a deepening fetch, plugging a severe performance bug.

Will merge to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* yn/worktree-repair-fix (2026-10-17) 5 commits
- worktree repair: avoid breaking unrelated .git file and gitdir
- worktree repair: reduce .git file reads
- worktree repair: use read_gitfile_raw() in infer_backlink()
- worktree repair: centralize inferred backlink selection
- worktree repair: align .git file handling with repair_gitfile()

The 'git worktree repair' command learned to thoroughly validate the worktree ID and the inferred gitdir pathway, preventing it from corrupting unrelated '.git' files and gitdirs when repositories and their linked worktrees are moved or swapped.

Needs review.
source: <[email protected]>

* mc/repo-structure-filtering (2026-10-15) 1 commit . repo: add filtering options to "repo structure"

The 'git repo structure' command has been taught to accept standard revision arguments to filter the set of objects being counted.

Waiting for response for too long, stalled.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* mv/log-follow-speedup (2026-10-30) 6 commits
- log: fix --follow following an edit on a side the merge did not take
- log: speed up --follow following renames for non-linear history
- log: simplify --follow following renames for non-linear history
- log: fix -m --follow losing the history of later parents
- log: extract showing the remerge/combined diff of a merge commit
- t4219: test more --follow cases across merges

The rename detection logic in 'git log --follow' across non-linear history has been optimized by checking for unmodified paths in parents first, while safely falling back to rename detection when a path is absent, resolving a performance regression.

Needs review.
source: <[email protected]>

* oa/merge-without-the-repository (2026-10-15) 1 commit
- merge: stop using the_repository

The 'merge.c' code has been updated to eliminate its reliance on the global 'the_repository' and 'the_hash_algo' variables by passing down the repository context already available to its entry points.

Needs review.
cf. <CAPSxiM_2Dd86rBKPj7jaT8Wmazo3PFZajJaaL2bVhB1GFsfnbg@mail.gmail.com>
source: <[email protected]>

* ps/gitlab-ci-whitespace-job-shallow-clone-fix (2026-10-16) 1 commit (merged to 'next' on 2026-11-01 at f64c61c70b)
+ gitlab-ci: fix "check" jobs with large merge requests

The GitLab CI configuration has been updated to disable shallow clones for the 'check-whitespace' and 'check-style' jobs by setting 'GIT_DEPTH' to 0, preventing them from failing on large merge requests that exceed the default shallow clone depth.

Will merge to 'master'.
cf. <CAOLa=ZTwyGnWFa4U=8UDzEUuyhQ7jT555FCh-CBp_wos9rJG9w@mail.gmail.com>
source: <[email protected]>

* vs/refs-seek-fix (2026-10-15) 1 commit
- refs: fix loose-ref seeking across directory boundaries

The logic to seek through loose references across directory boundaries has been corrected by including the trailing slash when comparing directory components, and by properly adjusting the iterator position when leaf entries sort either strictly before or after the seek point.

Waiting for response.
cf. <CAFuK-oarU1rZOcDzYr=YA1SNvfAzyB6LaXXCjtZV6WWGswOnyw@mail.gmail.com> cf. <[email protected]>
source: <[email protected]>

* ab/describe-no-i18n-of-debug-messages (2026-10-16) 1 commit
- describe: do not translate --debug output

The debug output of 'git describe' has been updated not to localize the output to make it more helpful for developers.

Needs review.
source: <[email protected]>

* je/doc-detached-head (2026-10-16) 2 commits
- SQUASH???
- doc: checkout: rewrite detached HEAD state explanation

The description of the detached HEAD state in 'git help checkout' has been updated and moved to a standalone guide to make it easier for users to understand and reference.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* js/doc-test-fix-anti-pattern (2026-10-11) 1 commit
- SubmittingPatches: avoid add-failing-test-then-fix anti-pattern

The 'SubmittingPatches' document has been updated to discourage the anti-pattern of adding a failing test in one commit and fixing it in a subsequent one, advising contributors to combine the test and fix into a single commit for easier review

Needs review.
source: <[email protected]>

* js/push-refspec-match-speedup (2026-10-13) 12 commits
- remote: use strmap for apply_push_cas()
- remote: restructure apply_push_cas() loops
- t/perf: measure --force-with-lease in p5516
- remote: use strmap for match_explicit_refs()
- remote: reject duplicate destinations on an empty remote
- t5408: check refspec order with distinct destinations
- t5408, t5410: test duplicate updates without relying on the client
- send-pack: plug leak upon match_push_refs failure
- remote: use strmap for check_push_refs()
- refs: stop using mkpath() in refname_match()
- t/perf: add explicit delete refspec matching test
- remote: validate --force-with-lease <refname> argument

The client-side refspec matching during 'git push' has been optimized by replacing linear traversals with string map lookups, speeding up pushes with lots of delete refspecs against a server with many advertised refs.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* kn/fetch-tag-backfill-batch-fix (2026-10-29) 3 commits (merged to 'next' on 2026-11-01 at dbb6507bec)
+ fetch: advertise fetched refs when backfilling tags
+ transport: add transport_options_release()
+ t5510: cover upstream info update on fetch failure

The tag backfilling negotiation in 'git fetch' has been updated to explicitly include the in-flight fetched tips as 'haves', preventing the server from resending objects when batched reference updates are used.

Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>

* bb/imap-send-openssl-set-verify (2026-10-17) 3 commits
- imap-send: prepare for OpenSSL 4.0
- imap-send: let OpenSSL do the hostname verification
- imap-send: use the recommended TLS_method()

imap-send used to use hand coded peer hostname verification, which has been replaced with the native API OpenSSL offered since version 1.1.0.

Waiting for response.
cf. <CABtdbsnrQ61eJv4GhawiFSHkN01tJhV5tYj8MNQT8F3zf3PgYw@mail.gmail.com> cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* cs/read-cache-conversion-size (2026-10-13) 1 commit
- read-cache: do not trust a size change when conversion is active

The index refresh logic has been updated to no longer trust a file size change as conclusive proof of modification when the path is subject to conversion, preventing false dirty statuses for files with only line-ending changes.

Waiting for response.
cf. <[email protected]>
cf. <20261020205644.GB6367@tb-raspi4>
cf. <[email protected]>
source: <[email protected]>

* jw/wait-for-index-lock (2026-10-17) 4 commits
- reset: fix write race
- commit: fix write race
- repository: add core.indexLockTimeout
- repository: add repo_try_hold_locked_index()

A new configuration variable 'core.indexLockTimeout' has been introduced to allow commands to retry when the index file is locked by another process, and 'git commit' has been updated to take advantage of this feature.

Needs review.
source: <[email protected]>

* mf/complete-log-graph-indent (2026-11-02) 1 commit
- completions: add some missing options for git log

The command line completion script (in contrib/) has been taught to complete the '--[no-]graph-indent' and '--graph-lane-limit' options of 'git log'.

Needs review.
source: <5735bacbd5c2c48eddafb43f75f7ddcdf402ff17.1793656021.git.mroik@delayed.space>

* qs/repack-kept-pack-fix (2026-10-26) 3 commits
- repack: tell pack-objects which packs it may delete
- pack-objects: add --ignore-pack-keep-from
- pack-objects: reset kept-pack cache for cruft walk

The behavior of 'git repack' and 'git pack-objects' has been updated to avoid losing objects to a '.keep' file that appears mid-run. 'git repack' now tells 'git pack-objects' which packs may be deleted via a new '--ignore-pack-keep-from' option, allowing it to ignore their '.keep' files.

Needs review.
source: <[email protected]>

* hn/status-push-rebased-on-newer-upstream (2026-10-06) 6 commits
- push: suggest a force push after a clean rebase
- push: offer a force push after rewriting pushed commits
- push: name the branch to pull from when it is not the upstream
- status: suggest a force push after a clean rebase
- status: say when the push branch was rebased cleanly
- status: count push divergence outside the upstream

The 'git status' output and 'git push' rejection advice have been improved to recognize when a pushed branch was cleanly rebased onto a newer upstream, and now correctly suggest force-pushing instead of pulling.

Needs review.
source: <[email protected]>

* ik/fsmonitor-untracked-cache-trivial-response (2026-10-04) 1 commit
- fsmonitor: check the untracked cache after a trivial response

The index writer has been taught to check the untracked cache against the filesystem when an FSMonitor trivial response is received, preventing commands like 'git add' from saving a new token while leaving stale untracked cache entries intact.

Needs review.
source: <[email protected]>

* ps/repo-ref-storage-format-fix (2026-10-05) 1 commit (merged to 'next' on 2026-11-01 at db2983a541)
+ builtin/repo: rename "references.format" to "references.storageFormat"

The output of 'git repo info' has been updated to use 'references.storageFormat' instead of 'references.format' for consistency with recent ref-storage-format terminology updates.

Will merge to 'master'.
cf. <CAOLa=ZTNNY_XuixqZ96TK0zFfDpWvxSupxVGOnH1VGXK4KF_0w@mail.gmail.com> cf. <as61Dh7ui54gdzGV@denethor>
source: <[email protected]>

* pw/stash-change-check-only-once (2026-10-23) 7 commits
- stash: simplify reset_tree() function signature
- stash create: remove unnecessary index load and refresh
- stash create: rework temporary index creation
- stash push: avoid duplicate calls to preload_index()
- stash push: remove duplicate changes detection
- stash create: remove duplicate changes detection
- stash: use an enum for create status

The index loading and refreshing logic in 'git stash create' and 'git stash push' has been optimized by eliminating redundant change detection checks and preload_index() calls, saving several lstat() calls per changed path.

Needs review.
source: <[email protected]>

* dm/libsecret-explicit-load (2026-09-27) 1 commit
- credential/libsecret: load secrets explicitly

The 'libsecret' credential helper has been updated to explicitly load secrets instead of relying on the search flag, preventing assertion failures when items are concurrently deleted or locked.

Needs review.
source: <[email protected]>

* tb/repack-cruft-less-midx-corner-cases (2026-09-30) 8 commits
- repack: include required packs in incremental MIDX writes
- repack: defer allocating the append plan's write step
- repack: track the preferred pack explicitly in MIDX write steps
- repack: follow kept packs when omitting cruft from the MIDX
- repack: use a sorted list for explicitly kept packs
- repack: retain cruft packs in MIDXs after incremental repacks
- pack-objects: ensure tree/tag closure with '--stdin-packs=follow'
- pack-objects: introduce stdin_packs_context struct

Various corner cases in the cruft-less MIDX feature have been fixed to ensure reachability closure when writing reachability bitmaps, such as properly retaining cruft packs after incremental repacks or when containing kept packs.

Waiting for review.
cf. <[email protected]> cf. <[email protected]> cf. <auFD5f8IWEHwaFLD@com-79390>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* hn/fetch-refmap (2026-10-30) 6 commits
- remote: resolve @{push} through remote.<name>.fetchRefmap
- remote: default to --limited-fetch in a shallow repository
- remote: add "git remote add --limited-fetch"
- fetch: infer branches to fetch from a refmap-only remote
- fetch: extract collect_upstream_from_remote() helper
- fetch: add remote.<name>.fetchRefmap

In a shallow repository, adding a new remote and fetching from it used to eagerly fetch all remote branches. The default refspec configured for remotes added in shallow repositories has been changed to rely on 'remote.<name>.fetchRefmap' rather than 'remote.<name>.fetch', pulling only those remote branches tracked by local branches.

Needs review.
source: <[email protected]>

* am/p4-apply-commit-shell-injection-fix (2026-09-24) 1 commit
- git-p4: avoid shell interpretation of commit ids in applyCommit

The applyCommit() function inside 'git-p4.py' has been updated to use direct subprocess pipes in order to avoid shell interpolation, plugging a potential shell injection vulnerability when processing commit IDs.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* hn/shallow-history-advice (2026-09-23) 1 commit
- object-name: explain why <rev>~N fails in a shallow clone

Providing advice when '~<n>' or '^<n>' resolves to a commit whose parents are missing due to the repository being a shallow clone, instead of an unhelpful 'not a commit' error.

Needs review.
source: <[email protected]>

* mc/refs-hook-report-old-values (2026-09-24) 1 commit
- refs: report old values to transaction hooks

The 'reference-transaction' hook has been updated to report the observed old object IDs and symref targets for unconditional ref updates and deletions, instead of reporting the null object ID.

Needs review.
cf. <[email protected]>
source: <2af3eeadd18806c5298d53072428656885cff89d.1790269745.git.maciej.ciemborowicz@gmail.com>

* td/ls-files-untracked-cache (2026-10-23) 3 commits
- ls-files: use and update the untracked cache
- dir: share untracked caches across output modes
- dir: hash ignore files before appending newline

The git ls-files command has been optimized to reuse and populate the untracked cache for the working tree, and untracked cache implementations have been updated to share identical caches across -unormal and -uall outputs, avoiding redundant filesystem traversals.

Needs review.
source: <[email protected]>

* hn/range-diff-matched-only (2026-09-15) 1 commit
- range-diff: add --matched-only to skip one-sided commits

The 'git range-diff' command has been augmented with a '--matched-only' option to skip commits that are only present on one side, allowing users to easily focus on only the commits that have been retained.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* pp/midx-write-skip-empty (2026-10-29) 1 commit
(merged to 'next' on 2026-11-02 at 2afeb6d816)
+ midx-write: skip writes with no object entries

The 'git multi-pack-index write' command has been updated to silently return success when there are no object entries to index. This avoids writing empty 'multi-pack-index' layers, which previously caused subsequent incremental midx writes using the '--bitmap' option to fail when attempting to load the missing reverse index.

Will merge to 'master'.
cf. <auOtMGiGOvWVtkl7@com-79390>
source: <97eca05600afc5828e3f27c6fcfd3f7872ca326b.1793260625.git.pia@pierre.co>

* tc/push-force-if-includes-fixes (2026-10-18) 3 commits
- push: --force-if-includes should allow fast-forward
- push: fix --force-if-includes non-branch advice
- push: check pushed ref for --force-if-includes

The '--force-if-includes' protection for 'git push' has been updated to consult the reflog of the local branch being pushed, rather than incorrectly checking the reflog of a local branch that shares the name of the remote destination branch. The push advice for detached HEAD scenarios has also been adjusted to indicate that the remote ref cannot be verified locally. A regression that caused perfectly valid fast-forward pushes to be rejected when reflogs were expired has been fixed.

Needs review.
source: <[email protected]>

* cc/early-scan-options (2026-11-02) 4 commits
- fast-import: use early_scan_options() for --allow-unsafe-features
- parse-options: add early_scan_options()
- parse-options: extract lookup_long_opt() from parse_long_opt()
- parse-options: add parse_options_takes_argument()

The process of parsing command-line options in commands that perform an early scan over their arguments has been unified using a new early-scan sub-API. The 'git fast-import' command has been converted to use this API, safely parsing and skipping known options taking separate values to prevent logic bugs.

Will merge to 'next'?
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* ec/commit-fixup-options (2026-09-22) 2 commits
- commit: allow -c/-C for all kinds of --fixup
- commit: allow -m/-F for all kinds of --fixup

Support for '-m', '-F', '-c', or '-C' options to supply a commit log message from outside the editor has been added for all 'git commit --fixup' variations.

Waiting for response for too long, stalled. cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* ll/doc-pushcert-if-asked (2026-08-29) 1 commit
- doc: remote-helpers: option pushcert if-asked

The remote helper documentation for the 'pushcert' option has been updated to mention that it can also take 'if-asked', reflecting the existing implementation in the code.

Will merge to 'next'?
cf. <[email protected]>
source: <[email protected]>

* ws/squelch-svn-migrate (2026-08-27) 2 commits
- Makefile: add NO_GIT_SVN knob to skip building/installing git-svn
- git-svn: don't print v1-layout migration noise when there's nothing to migrate

The 'git svn' v1-layout migration message has been silenced when there is no legacy metadata to migrate, preventing noise on newly initialized repositories. Additionally, a new 'NO_GIT_SVN' Makefile knob has been added to skip building and installing 'git-svn' entirely.

Needs review.
source: <[email protected]>

* dw/config-read-both-global (2026-10-09) 2 commits
- config: read global scope via config_sequence
- t1300: test list with missing global config

The 'git config --global' read operations have been updated to respect both '$HOME/.gitconfig' and '$XDG_CONFIG_HOME/git/config', fixing an inconsistency where only the former was read when both configuration files are present.

Needs review.
source: <20261009-fix-config-list-global-home-and-xdg-v3-0-f936b9c8a0cc@microsoft.com>

* vv/branch-recurse-no-start-ref (2026-08-21) 2 commits
- branch: allow recursion with no tracking name
- branch: do not track a start point with no ref

The --recurse-submodules option in 'git branch' has been fixed to avoid a crash when the start point is not a reference (e.g., a raw object ID). The creation path now skips setting up tracking and properly forwards the absent tracking name to the submodule helper.

Needs review.
source: <20260822-vv-branch-recurse-no-start-ref-v1-0-46dc140acaa8@zitro.id>

* ap/http-preserve-wwwauth-redirect (2026-08-19) 1 commit
- http: preserve wwwauth_headers across redirects

When an HTTP request triggers a redirect and the target yields an authentication challenge, the WWW-Authenticate headers received during the redirect are now explicitly preserved across the credential URL update, fixing an issue where they were incorrectly cleared.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
source: <20260819-http-preserve-wwwauth-redirect-v2-1-4c61039432b0@nvidia.com>

* kh/format-rev-more-options (2026-08-18) 5 commits
- format-rev: learn --abbrev, --color, and --date
- doc: rev-list-options.adoc: factor out --date alts
- format-rev: factor option variables into a struct
- format-rev: place BUG calls first in callback
- format-rev: use lower case for opts description

The experimental 'git format-rev' has been taught a few more formatting options.

Waiting for review.
cf. <[email protected]>
source: <[email protected]>

* bc/restrict-hex-to-lowercase (2026-09-07) 7 commits
- hex: allow only lowercase object IDs in breaking changes mode
- t5324: adjust tests for corrupt commit-graph
- object-name: use hexval
- hex: label usages of hex parsing for object IDs
- hex: make hex_to_bytes accept kind of hex to use
- hex: allow specifying hex type with hex2chr
- hex: add functionality for lowercase-only hex

The parser for hex object names has been updated to reject uppercase hexadecimal characters when running in the breaking changes mode, in preparation for Git 3.0.

Needs review.
source: <[email protected]>

* kj/repo-info-more-path-keys (2026-09-27) 8 commits
- repo: add path.cdup
- repo: add path.git-prefix
- repo: add path.grafts with absolute and relative suffixes
- repo: add path.index with absolute and relative suffixes
- repo: add path.hooks with absolute and relative suffixes
- repo: add path.superproject-root with absolute and relative suffixes
- submodule: use repository to find superproject
- repo: add path.toplevel with absolute and relative suffix formatting

The 'git repo info' command has been taught more keys to output paths of various repository components (such as the working tree root, superproject working tree, object database, etc.), supporting both absolute and relative path formats.

Expecting a reroll.
cf. <auj3hhrRvyX9lus6@denethor>
cf. <aukCnmlJzZmOTihM@denethor>
cf. <aukHlEd5udC1gLYZ@denethor>
cf. <aukQWTUKWwmCQwi5@denethor>
cf. <aukYVs2nVla0yuSV@denethor>
cf. <CA+rGoLd8D7r45xZVDycpJG68kbo=14b2pr0SgyW2aQD0+7-dDQ@mail.gmail.com> cf. <CA+rGoLd7=sx61dWcC6RFD-Q-88KNd9YgEES-jLDqiTmKMMLf9g@mail.gmail.com> cf. <CA+rGoLdcO94KGFg-qeUmbXHmRPz5UaOjeBd4_c_HuppquM7XTw@mail.gmail.com> cf. <CA+rGoLeSfwSQs6hOyGxjRhyCLqjWBMQ4yfXUYWiCz+MHqsgWAA@mail.gmail.com> cf. <CA+rGoLdUU_uHq8rzuu9qkrv+iAp5Hb=JpcLLU6a7NUQ5VJPV4w@mail.gmail.com>
source: <[email protected]>

* pz/fetch-submodule-errors-config (2026-07-16) 2 commits
- fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
- submodule: fix premature failure in recursive submodule fetch

The 'git fetch' command can now configure how submodule fetch errors are handled via 'fetch.submoduleErrors' and '--submodule-errors', making them non-fatal. A premature failure during recursive submodule fetches has been fixed by deferring the error until the OID-based retry phase fails.

Needs review.
cf. <[email protected]>
source: <[email protected]>

* mm/line-log-limited-ops (2026-09-02) 7 commits
- diffcore-pickaxe: limit -G to the -L tracked range
- diff: support --check with -L line ranges
- diff: support stat formats with -L
- diff: extract a line-range diff helper for reuse
- diff: emit -L hunk headers via xdiff's formatter
- diff: simplify the line-range filter by classifying removals immediately
- diff: rename line-range filter struct and clarify fields (this branch is used by mm/diff-process-hunks.)

The 'git log -L<range>:<path>' command has been taught to limit various 'diff' operations, such as '--stat', '--check', and '-G', to the specified range and path.

Needs review.
source: <[email protected]>

#1 lore raw
Quoted 4 lines · Junio C Hamano

* os/rebase-doc-incompatible-options (2026-11-01) 1 commit
- doc: git-rebase: update incompatible options

Quoted 8 lines

Outdated cross-references to the 'INCOMPATIBLE OPTIONS' section in the 'git rebase' documentation have been removed, and a missing one for the '--onto' option has been added.

Needs review.
source: <[email protected]>

Reading <[email protected]>, I would have expected that this topic would've been rooted on the v2.56 tag, but that doesn't seem to be the case:

$ git log -2 --pretty=reference os/rebase-doc-incompatible-options 
ebbf0e59db (doc: git-rebase: update incompatible options, 2026-11-01)
47fdf2208c (The 7th batch, 2026-10-19)
#2 lore raw
Quoted 10 lines · Tuomas Ahola
Quoted 8 lines · Junio C Hamano

* os/rebase-doc-incompatible-options (2026-11-01) 1 commit
- doc: git-rebase: update incompatible options

Outdated cross-references to the 'INCOMPATIBLE OPTIONS' section in the 'git rebase' documentation have been removed, and a missing one for the '--onto' option has been added.

Quoted 7 lines
Quoted 4 lines

Needs review.
source: <[email protected]>

Reading <[email protected]>, I would have expected that this topic would've been rooted on the v2.56 tag, but that doesn't seem to be the case:

'master' has advanced since then, and this is not exactly a "fix" that is worth the trouble of including in a maintenance release, so...

#3 lore raw
In reply to Junio C Hamano
Quoted 14 lines · Junio C Hamano

* tc/push-force-if-includes-fixes (2026-10-18) 3 commits
- push: --force-if-includes should allow fast-forward
- push: fix --force-if-includes non-branch advice
- push: check pushed ref for --force-if-includes

The '--force-if-includes' protection for 'git push' has been updated to consult the reflog of the local branch being pushed, rather than incorrectly checking the reflog of a local branch that shares the name of the remote destination branch. The push advice for detached HEAD scenarios has also been adjusted to indicate that the remote ref cannot be verified locally. A regression that caused perfectly valid fast-forward pushes to be rejected when reflogs were expired has been fixed.

Quoted 2 lines

Needs review.
source: <[email protected]>

One note nit here: --force-if-includes rejecting fast-forward is not a regression. It's been a bug since the flag was introduced in 3b990aa645 (push: parse and set flag for "--force-if-includes", 2020-10-03).

That is, this has always been rejected:

   git init --bare r.git && git clone r.git wt && cd wt
   git commit --allow-empty -m A
   git push origin main
   git commit --allow-empty -m B
   git reflog expire --expire=all main
   git push --force-with-lease --force-if-includes origin main
#4 lore raw
Quoted 4 lines · Tyler Cipriani

One note nit here: --force-if-includes rejecting fast-forward is not a regression. It's been a bug since the flag was introduced in 3b990aa645 (push: parse and set flag for "--force-if-includes", 2020-10-03).

Quoted 8 lines

That is, this has always been rejected:

    git init --bare r.git && git clone r.git wt && cd wt
    git commit --allow-empty -m A
    git push origin main
    git commit --allow-empty -m B
    git reflog expire --expire=all main
    git push --force-with-lease --force-if-includes origin main

Thanks, will update the description.