Thread (5 messages) 5 messages, 3 authors, 2d ago

What's cooking in git.git (Oct 2026, #01)

From: Junio C Hamano <hidden>
Date: 2026-10-01 22:48:11

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.  They may be annotated with a URL
to a message that raises issues but they 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).

The symbolic ref 'maint' now points at 'maint-2.56'; the
GIT-VERSION-GEN script in 'master' identifies the in-development
version as v2.56.GIT to signal that we are in the post-2.56 era.  As
agreed at the Contributors' Summit, the next release due by the end
of this year will be called Git 2.98 to prepare for Git 2.99 that is
to come sometime in the spring.

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']

* ak/refs-files-root-ref-lock (2026-09-11) 1 commit
  (merged to 'next' on 2026-09-16 at c8568ea3e1)
 + refs/files: avoid packed-refs lock for root ref deletion

 The files backend has been updated to avoid unconditionally locking
 the 'packed-refs' file when deleting a root ref (which are never
 packed).

 Graduated to 'master'.
 cf. [ref]
 source: [ref]


* dk/use-nsec-runtime (2026-09-11) 3 commits
  (merged to 'next' on 2026-09-15 at 67ef6d82ef)
 + core: convert build-time USE_NSEC into runtime core.useNanosec
 + environment: align repo_config_values_init with struct declaration
 + meson: expose knob for xmlto relative links in manuals

 The build-time knob 'USE_NSEC' for nanosecond stat precision has been
 converted to a runtime configuration 'core.useNanosec', allowing
 distributions to bundle one binary that adapts to filesystem
 capabilities dynamically.

 Graduated to 'master'.
 cf. [ref]
 source: [ref]


* hn/history-squash (2026-09-08) 8 commits
  (merged to 'next' on 2026-09-15 at 28dd773b8b)
 + history: support editing squashed commit messages
 + history: create squashed commits without editing
 + history: protect branches when squashing a range
 + history: validate squash revision ranges
 + history: add skeleton for squash subcommand
 + sequencer: share the squash message marker helpers and flags
 + history: give commit_tree_ext a message template
 + history: extract helper for a commit's parent tree

 The experimental 'git history' command has been taught a new 'squash'
 subcommand to fold a range of commits into a single commit, with any
 descendants replayed on top.

 Graduated to 'master'.
 cf. <xmqqik4fv4v1.fsf@gitster.g>
 source: [ref]


* jc/cocci-free-updates (2026-09-11) 2 commits
  (merged to 'next' on 2026-09-16 at 35b8bafa06)
 + cocci: FREE_AND_NULL(E) is safe to call on NULL
 + cocci: remove risky "if (!E) free(E)" conversion

 Updates to Coccinelle semantic patches to correctly handle the
 'FREE_AND_NULL()' macro and avoid generating broken transformations
 for negated pointer checks.

 Graduated to 'master'.
 cf. [ref]
 source: <xmqqld978mok.fsf@gitster.g>
 source: <xmqqh5jv8m4w.fsf@gitster.g>


* kn/receive-report-hook (2026-09-14) 5 commits
  (merged to 'next' on 2026-09-15 at aa6cbdb87e)
 + receive-pack: coccinelle fix
 + hook: introduce the receive-report hook
 + receive-pack: move message generation to separate function
 + receive-pack: drop static variables to track report status version
 + doc: add proc-receive hook info in 'git-receive-pack.adoc'

 A new hook 'report' is added to 'git receive-pack', which runs after
 reference updates and allows the server to filter or modify the
 packet-line status report sent back to the client.

 Graduated to 'master'.
 source: [ref]
 source: <xmqqwlsn31gq.fsf_-_@gitster.g>


* ps/odb-alternates-at-creation (2026-09-10) 9 commits
  (merged to 'next' on 2026-09-15 at 4acaa6a8aa)
 + odb/source: remove the ability to write alternates
 + builtin/clone: write alternates via `odb_create_on_disk()`
 + odb/source: support writing alternates when creating the database
 + builtin/clone: move setup of alternates for non-shared local clones
 + builtin/clone: move setup of alternates for shared local clones
 + builtin/clone: refactor handling of "--reference{,-if-able}"
 + builtin/clone: move around `setup_reference()`
 + builtin/clone: defer setup of the object database
 + setup: split up concerns of `init_db()`
 + Merge branch 'ps/odb-eagerly-load-alternates' into ps/odb-alternates-at-creation
 (this branch is used by ps/setup-enforce-repo-passed-to-create-repository-has-no-state.)

 The setup of alternates has been deferred to object database
 creation time during clone, which drops the unused ad-hoc alternate
 writing API, simplifying the object database backend interface.

 Graduated to 'master'.
 cf. [ref]
 source: [ref]


* ps/ref-storage-format (2026-09-09) 13 commits
  (merged to 'next' on 2026-09-16 at 8937a6240b)
 + setup: allow "--ref-storage-format=" to specify a payload
 + setup: rename "init.defaultRefFormat" to "init.defaultRefStorageFormat"
 + t: rename GIT_TEST_DEFAULT_REF_FORMAT
 + setup: rename ref storage format environment variables
 + setup: refactor how we configure the ref storage format
 + refs: expose function to parse reference URIs
 + help: rename "default-ref-format" to "default-ref-storage-format"
 + builtin/rev-parse: rename "--show-ref-format" to "--show-ref-storage-format"
 + builtin/submodule: rename "--ref-format=" to "--ref-storage-format="
 + builtin/refs: rename "--ref-format=" to "--ref-storage-format="
 + builtin/clone: rename "--ref-format=" to "--ref-storage-format="
 + builtin/init: rename "--ref-format=" to "--ref-storage-format="
 + parse-options: allow for hidden aliases

 The terminology regarding reference storage formats has been unified
 across command-line options, environment variables, configuration
 variables, and source code, standardizing on the phrase "ref storage
 format" (e.g., `--ref-storage-format`, `'GIT_REF_STORAGE_FORMAT'`).
 Additionally, the `--ref-storage-format` option has been updated to
 accept payloads in the form `<format>://<payload>`.

 Graduated to 'master'.
 cf. [ref]
 cf. [ref]
 source: [ref]

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

* jk/http-curl-strip-creds (2026-09-27) 1 commit
 - http: handle curl stripping creds from effective url

 The HTTP transport has been updated to handle changes in recent curl
 versions that strip credentials from the effective URL, preventing
 unnecessary credential prompts during redirects.

 Will merge to 'next'.
 cf. <xmqqo6dho1xj.fsf@gitster.g>
 cf. [ref]
 source: [ref]


* jk/name-rev-update-hash-descriptions (2026-09-27) 1 commit
  (merged to 'next' on 2026-09-30 at 66cac248cb)
 + name-rev: update hash descriptions

 The documentation for 'git-name-rev' has been updated to refer to
 object IDs instead of SHA-1, to more accurately reflect that the
 active hash algorithm is used.

 Will merge to 'master'.
 cf. [ref]
 cf. <xmqqbj9iqp27.fsf@gitster.g>
 source: [ref]


* js/p5551-fetch-rescan-fix (2026-09-26) 1 commit
 - p5551: fix repeated runs with update-ref --no-deref

 The performance test for `git fetch` pack-dir rescans has been
 updated to use the `--no-deref` option when cleaning up
 remote-tracking branches.  This prevents `git update-ref` from
 failing with a multiple updates error when both a symref and its
 target are deleted in the same transaction.

 Will merge to 'next'.
 cf. [ref]
 source: [ref]


* kh/doc-trailers-cmd-examples (2026-09-27) 1 commit
 - doc: interpret-trailers: fix cmd examples

 The documentation for 'git interpret-trailers' has been updated to
 fix the grammatical errors in the descriptions of command examples.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* 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: [ref]


* hn/ci-leak-sanitizer-annotations (2026-10-01) 2 commits
 - ci: point test failures and fixed known breakages at their file and line
 - ci: annotate leaks and stop a leak-sanitizer script at its first failure

 CI on GitHub Actions gets a better annotation experience.  Leak test
 scripts are stopped at their first failure with --immediate to
 prevent flooding the log, and failures are correctly annotated with
 their file and line number.

 Waiting for response.
 cf. [ref]
 cf. <xmqqld8h41vm.fsf@gitster.g>
 source: [ref]


* mg/doc-remote-set-head (2026-09-29) 1 commit
 - doc: remote: say that it only affects the local repository

 The documentation for 'git remote set-head' has been updated to
 clarify that it only modifies the local repository's remote-tracking
 symbolic reference, and does not alter the target remote
 repository's own 'HEAD'.

 Looking good.
 cf. <xmqqld8khviu.fsf@gitster.g>
 source: [ref]


* 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.
 cf. [ref]
 cf. <xmqqcxtxo0vx.fsf@gitster.g>
 source: [ref]


* tb/t5520-reflog-expire (2026-10-01) 1 commit
 - t5520: don't expire reflogs where it matters
 (this branch is used by dk/stash-apply-index-incore.)

 The t5520 test script has been updated to disable reflog expiration.
 This prevents test flakiness caused by auto-maintenance running
 geometric repack which would otherwise immediately expire the test's
 reflogs due to them carrying hardcoded timestamps from 2005.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* jk/xdiff-size_t (2026-09-30) 7 commits
 - merge-ll: report an error when reading external merge results fails
 - merge-ll: handle external driver status before reading result
 - merge-ll: use read_mmfile() to read external merge results
 - xdiff: NUL-terminate buffers read by read_mmfile()
 - xdiff: use size_t for buffer sizes
 - xdiff: replace mmbuffer_t with mmfile_t
 - xdiff: clean up read_mmfile() allocations on error

 The internal diff and merge machinery has been updated to use
 standard size_t types rather than signed longs for buffer
 allocations and offsets, preventing subtle overflow issues on LLP64
 architectures, and plugging uninitialized memory leaks along error
 paths.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* ps/reftable-reflog-timezone (2026-09-30) 3 commits
 - refs/reftable: fix on-disk representation of reflog timezones
 - t/helper: fix segfault in "dump-reftable -t"
 - date: add helpers to convert between "+HHMM" timezones and minutes

 The internal representation of timezones in the reflog for the
 reftable format has been fixed to match the specification, which
 dictates an offset in minutes rather than the parsed "+HHMM" integer
 representation.

 Will merge to 'next'?
 cf. [ref]
 cf. <xmqq33up73dm.fsf@gitster.g>
 source: [ref]


* je/doc-remove-gittutorial-2 (2026-09-28) 3 commits
 - Delete translations of gittutorial-2 description
 - Remove references to gittutorial-2
 - Remove gittutorial-2

 An outdated tutorial 'gittutorial-2' has been removed.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* kz/doc-add-rm-typofix (2026-09-29) 1 commit
  (merged to 'next' on 2026-10-01 at 5f775693b6)
 + doc: remove unnecessary commas in git-add and git-rm documentation

 Typofixes.

 Will merge to 'master'.
 source: [ref]


* pw/checkout-m-conflict-labels (2026-09-30) 2 commits
 - merge: remember conflict labels
 - remove_branch_state: convert boolean argument to flags

 When recreating a merge conflict using 'git checkout -m', the
 original conflict labels (such as branch names) were lost and
 replaced with generic ones.  The merge machinery has been updated to
 record the original labels in '.git/MERGE_LABELS', allowing 'git
 checkout -m' to restore them.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* 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.

 Needs review.
 source: [ref]


* hn/object-name-push-short (2026-09-30) 1 commit
 - object-name: accept @{p} as short for @{push}

 The @{upstream} notation had short-hand @{u} from the beginning,
 and @{push} learned corresponding @{p} to match.

 Waiting for response.
 cf. <xmqq7bk28i88.fsf@gitster.g>
 source: [ref]


* gm/filter-branch-state-map-fix (2026-09-30) 1 commit
 - filter-branch: fix commit map init from state branch

 The commit map populated from the state branch in 'git
 filter-branch' has been corrected to parse the map using the
 original-to-rewritten order.

 Waiting for response.
 cf. [ref]
 cf. [ref]
 cf. <xmqqh5j57677.fsf@gitster.g>
 source: [ref]


* hn/fetch-refmap (2026-10-01) 5 commits
 - SQUASH???
 - 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: add remote.<name>.refmap

 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>.refmap rather than
 remote.<name>.fetch, pulling only those remote branches tracked by
 local branches.

 Waiting for response.
 cf. <xmqqzewzerrh.fsf@gitster.g>
 source: [ref]

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

* bc/git-contacts-stdin (2026-09-28) 2 commits
 - git-contacts: add stdin functionality to docs
 - git-contacts: allow inputting patch via stdin

 The 'git-contacts' program (in contrib/) has been taught to read
 patches from the standard input stream when an explicit dash ('-') is
 passed in place of a file.

 Waiting for response.
 cf. <xmqqv77ng8kk.fsf@gitster.g>
 cf. <xmqqh5j8hvfq.fsf@gitster.g>
 source: [ref]


* dk/stash-apply-index-incore (2026-09-30) 4 commits
 - builtin/stash: merge index in-core
 - t3903: test failed "stash apply --index"
 - stash: prepare merge options earlier
 - builtin/stash: remove unused header
 - Merge branch 'tb/t5520-reflog-expire' into dk/stash-apply-index-incore
 (this branch uses tb/t5520-reflog-expire.)

 The handling of index conflicts in 'git stash apply --index' has
 been optimized.  Instead of relying on expensive external
 subprocesses using 'git diff-tree' and 'git apply', the index is now
 merged in-core using the merge-ort machinery, which fixes a
 concurrent lock file issue with autostash.

 Will merge to 'next'?
 cf. [ref]
 cf. <xmqq4if55n3u.fsf@gitster.g>
 source: [ref]


* 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.
 source: [ref]


* mc/refs-rename-transaction (2026-09-23) 1 commit
 - refs: run copy and rename through transactions

 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.

 Needs review.
 source: [ref]


* yn/worktree-repair-completion (2026-09-14) 1 commit
  (merged to 'next' on 2026-09-27 at 7ddcdd6fbb)
 + completion: complete 'git worktree repair'

 The command-line completion script (in 'contrib/') has been taught
 to complete the 'repair' subcommand for 'git worktree'.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* td/ci-large-test-resources (2026-09-30) 2 commits
 - ci: use twice the CPU count on both providers
 - t4205: compare huge output without diff

 CI resource exhaustion during test runs on GitHub Actions has been
 mitigated by switching a comparison of a huge output to use a binary
 comparison, and by capping the parallel jobs on Linux to the number
 of available CPUs.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* rs/dir-skip-nested-repo-fix (2026-09-26) 1 commit
  (merged to 'next' on 2026-09-30 at b33b5cd0e7)
 + dir: skip excluded directory with nested repo on prefix match

 The directory traversal logic has been updated to correctly evaluate
 pathspecs for ignored directories containing nested repositories,
 and has been fortified to gracefully handle null pathspecs during
 checkout operations.

 Will merge to 'master'.
 source: [ref]


* jk/parse-revision-opt-fixes (2026-09-25) 2 commits
  (merged to 'next' on 2026-09-30 at 705a098926)
 + revision: handle argv movement in parse_revision_opt()
 + revision: avoid reporting known options as unknown on error

 The command-line parsing of revision options has been updated to
 properly distinguish between malformed and unknown options, and to
 correctly report the name of unknown options after they have been
 moved during the option parsing process.

 Will merge to 'master'.
 cf. <xmqqbj9lt1gn.fsf@gitster.g>
 source: [ref]


* jk/pull-null-merge-head (2026-09-21) 1 commit
  (merged to 'next' on 2026-09-25 at c12a88db84)
 + pull: avoid segfault when commit lookup fails

 'git pull' has been taught to fail more gracefully instead of
 segfaulting when lookup_commit_reference() fails on unparseable
 objects.

 Will merge to 'master'.
 cf. <xmqqld92xixa.fsf@gitster.g>
 source: [ref]


* je/doc-asciidoc-xrefs (2026-09-24) 1 commit
  (merged to 'next' on 2026-09-27 at 278ef7bb0b)
 + doc: add more AsciiDoc cross-references

 Various documentation files have been updated to use explicit
 '<<TARGET,TARGET>>' AsciiDoc cross-references instead of plain text
 references.  This improves rendering on the web and avoids broken
 links when manual pages are included into other pages.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* js/ci-debian-12-http2-workaround (2026-09-24) 1 commit
  (merged to 'next' on 2026-09-27 at 83e6342dc0)
 + ci: work around Debian 12's HTTP/2 authentication failures

 The Debian 12 CI job has been updated to skip a half-auth clone test
 that occasionally fails due to a bug in the packaged curl version
 handling early HTTP/2 responses.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* ps/reflog-expiry-fix (2026-09-24) 1 commit
  (merged to 'next' on 2026-09-27 at afa9ef2166)
 + reflog: fix default expiry periods

 The default expiry periods for both reachable and unreachable reflog
 entries have been corrected from a past regression that swapped
 them.

 Will merge to 'master'.
 cf. <xmqqwlsa1p5d.fsf@gitster.g>
 source: [ref]


* 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: [ref]


* 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.
 source: [ref]


* td/ls-files-untracked-cache (2026-09-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: [ref]


* je/doc-merge-conflicts (2026-09-24) 7 commits
 . ignore conflict markers in gitmergeconflicts.adoc
 . git-pull: link to new merge conflicts guide
 . git-cherry-pick: link to new merge conflicts guide
 . git-revert: link to new merge conflicts guide
 . git-rebase: link to new merge conflicts guide
 . git-merge: link to new merge conflicts guide
 . Add new gitmergeconflicts man page

 A new gitmergeconflicts(7) manual page has been added to provide a
 centralized guide for understanding and resolving merge conflicts.
 The documentation for commands that generate conflicts (like 'git
 merge', 'git rebase', and 'git cherry-pick') has been updated to
 link to this new guide instead of duplicating the instructions.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* kn/ci-unit-tests-on-windows-fix (2026-09-24) 1 commit
  (merged to 'next' on 2026-09-27 at 2d6f538729)
 + ci: fix unit tests not running on windows

 The CI script has been updated to check for one-indexed slice numbers
 when deciding to run unit tests on Windows, mirroring the behaviour in
 the modern GitHub and GitLab workflows.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* ps/meson-improvements (2026-09-24) 7 commits
 - gitlab-ci: fix hanging MSVC jobs
 - meson: update wrappers
 - meson: fix outdated completion helpers
 - meson: use precompiled headers for unit tests
 - meson: use precompiled headers for our test-helper
 - meson: don't recompile git-remote-http(1) multiple times for tests
 - meson: avoid recompiling HTTP sources several times

 The build configurations for Meson have been optimized to avoid
 recompiling HTTP sources multiple times and to utilize precompiled
 headers for test-helpers and unit tests, reducing clean build times.
 Additionally, the shell completion tests and GitLab CI MSVC runner
 jobs have been fixed.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* ps/setup-enforce-repo-passed-to-create-repository-has-no-state (2026-09-28) 7 commits
 - setup: enforce that passed-in repo does not carry relevant state
 - repository: adapt `repo_clear()` to fully reset the repository
 - builtin/clone: don't apply "core.sharedRepository" to leading dirs
 - builtin/init: move handling of "core.sharedRepository" into "setup.c"
 - builtin/init: refactor messy creation of leading directories
 - path: introduce `safe_create_leading_directories_no_share_const()`
 - path: drop useless `safe_create_leading_directories_1()`
 - Merge branch 'ps/odb-alternates-at-creation' into ps/setup-enforce-repo-passed-to-create-repository-has-no-state

 The repository initialization sequence has been refactored to treat
 the repository object passed to create_repository() purely as an
 out-parameter.

 Waiting for response.
 cf. [ref]
 cf. <xmqqtsn9mkog.fsf@gitster.g>
 cf. [ref]
 source: [ref]


* rr/upload-pack-swap-shallow-wanted-ref (2026-09-16) 1 commit
  (merged to 'next' on 2026-09-22 at af040867c8)
 + upload-pack: swap wanted-ref/shallow-info responses

 The server-side protocol v2 response order for 'wanted-refs' and
 'shallow-info' has been swapped to match the client's expectation,
 fixing a fetch failure when the server has 'uploadpack.allowRefInWant'
 enabled and the client performs a shallow fetch.

 Will merge to 'master'.
 source: [ref]


* bs/runtime-prefix-obsd-getexecpath (2026-09-16) 1 commit
 - exec_cmd: RUNTIME_PREFIX on OpenBSD systems

 Git on OpenBSD historically lacked an authoritative mechanism to
 resolve its executable path, as it doesn't support the
 KERN_PROC_PATHNAME sysctl.  With OpenBSD 8.0 introducing
 getexecpath(3), it is now utilized to provide proper RUNTIME_PREFIX
 resolution instead of relying on argv[0] fallback.

 Waiting for response.
 cf. <xmqq4ifio83d.fsf@gitster.g>
 source: [ref]


* js/coverity-fixes (2026-09-17) 7 commits
  (merged to 'next' on 2026-09-22 at bb99d71d99)
 + test-read-midx: check midx_fill_entry() result
 + oss-fuzz: handle reftable iterator initialization failures
 + t/unit-tests: check reftable iterator initialization
 + rerere: do not record failed conflict resolution data
 + midx: validate incremental MIDX pack IDs
 + gpg-interface: make signature-prefix matching length-aware
 + wrapper: guard writev_in_full() against signed overflow

 Assorted fixes for code paths that are not careful with boundary and
 error conditions.

 Will merge to 'master'.
 cf. <xmqq5x03u0xz.fsf@gitster.g>
 cf. <xmqq1parorz4.fsf@gitster.g>
 source: [ref]


* yt/winansi-die-lasterr-fix (2026-09-21) 1 commit
  (merged to 'next' on 2026-09-27 at c619c26b80)
 + compat/winansi: fix die_lasterr() argument formatting

 The error reporting machinery in the WinANSI compatibility layer has
 been simplified to pass the exact Windows error code and correctly
 format arguments for fatal errors.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* hd/diff-no-index-reverse-fix (2026-09-18) 1 commit
  (merged to 'next' on 2026-09-25 at c6cd42c625)
 + diff --no-index: fix -R with file/directory conflicts

 A bug in git diff --no-index that mishandled reverse (-R) output
 when conflicts existed between a file and a directory has been
 fixed.

 Will merge to 'master'.
 cf. [ref]
 cf. [ref]
 source: [ref]


* js/gitlab-ci-windows-rust (2026-09-24) 4 commits
  (merged to 'next' on 2026-10-01 at da393682d9)
 + ci(gitlab,windows): provide GNU Rust's host-linker support
 + ci(gitlab,windows): fix Rust setup for GitLab's MinGW build
 + ci(gitlab,windows): preserve exclusions during dependency setup
 + ci(gitlab,windows): provision GNU Rust for SDK-based MinGW builds

 The Windows GitLab CI job has been updated to provision and use the
 GCC-targeting Rust toolchain for MinGW builds, fixing job failures
 caused by incomplete Rust setup and missing linker support.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* jc/advice-config-set-global (2026-09-14) 1 commit
 - 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.

 Needs review.
 source: <xmqq33vb4hma.fsf@gitster.g>


* sg/precompile-git-compat-util (2026-09-14) 4 commits
  (merged to 'next' on 2026-09-21 at 68acceee5b)
 + Makefile: precompile "git-compat-util.h"
 + Makefile: reintroduce REFTABLE_OBJS
 + cmake: remove any "$(*_OBJS)" variables when parsing Makefile for sources
 + Makefile: remove XDIFF_OBJS initialization

 The 'Makefile' has been taught to precompile 'git-compat-util.h' to
 speed up overall compilation, while excluding sources that do not
 include the compatibility header.

 Will merge to 'master'.
 source: [ref]


* of/commit-reach-repo-awareness (2026-09-16) 1 commit
  (merged to 'next' on 2026-09-22 at 94fab2d79f)
 + commit-reach: parse commits in the given repository

 The can_all_from_reach() and can_all_from_reach_with_flag()
 functions have been updated to accept a repository context,
 preventing bugs where submodule merging incorrectly reads from the
 superproject's commit-graph.

 Will merge to 'master'.
 source: [ref]


* 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.

 Needs review.
 source: [ref]


* jt/object-file-batch-fsync-fix (2026-09-23) 2 commits
  (merged to 'next' on 2026-09-27 at 8fbe62ae27)
 + object-file: flush transaction packfile before migrating objects
 + object-file: lift ODB reprepare out of packfile flush

 When 'core.fsyncMethod' is set to 'batch', the ODB transaction
 failed to properly flush large blob packfiles residing in the
 temporary directory before migrating the directory's contents to the
 main object store.  The execution sequence has been corrected by
 performing the packfile flush before the temporary directory
 migration, averting failure.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* tb/rerere-wait-for-merge-rr-lock (2026-09-28) 3 commits
 - rerere: go on at a conflict when the lock stays busy
 - rerere: add "gc --auto" that skips a held lock
 - rerere: wait for MERGE_RR.lock before giving up

 Instead of failing to record conflicts to be resolved immediately,
 wait while "rerere gc" is ongoing.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* pp/midx-write-skip-empty (2026-09-08) 1 commit
 - 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.

 Waiting for review.
 cf. <aqAkfGZtLJ97nG1m@com-79390>
 cf. [ref]
 source: [ref]


* jk/merge-ll-tempfile-cleanup (2026-09-28) 2 commits
  (merged to 'next' on 2026-10-01 at b39a4cc5d8)
 + merge-ll: use tempfile API for external driver files
 + merge-ll: catch close() errors when writing external tempfiles

 The external merge driver in 'git merge' now uses the tempfile API
 to create its temporary files.  This ensures that these temporaries
 are reliably cleaned up even when the merge driver or its parent Git
 process is terminated abruptly.

 Will merge to 'next'?
 cf. <xmqqcxtwhufq.fsf@gitster.g>
 source: [ref]


* 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.

 Waiting for review.
 cf. <yc4bgjoyxnm6o7q4gwols4d6zvdrq3ydw2c65wjdwof3hjyde6@2osv37jtuxx3>
 source: [ref]


* ta/command-list-guides-sync-lint (2026-09-10) 2 commits
 - lint-docs: check the guide list in command-list.txt
 - command-list.txt: add gitformat-loose(5) and gitpacking(7)
 - Merge branch 'kh/doc-datamodel' into ta/command-list-guides-sync-lint

 A new linter test has been added to Documentation/lint-manpages.sh
 to ensure that all non-command manual pages (guides and developer
 interfaces) listed in Documentation/Makefile are present in
 command-list.txt, replacing an older comment that reminded
 developers to keep them in sync.

 Needs review.
 cf. <xmqq1pb2s33e.fsf@gitster.g>
 source: [ref]


* ap/var-broken-down-idents (2026-09-26) 4 commits
 - var: add broken-out identity variables
 - var: accept more than one variable
 - var: add "-z" output mode
 - var: represent multi-valued variables with a string_list

 The 'git var' command has been updated to output individual components
 of the author and committer identities, take multiple keys on the
 command-line, and support NUL-delimited output with the '-z' option.

 Needs review.
 source: [ref]


* tc/push-force-if-includes-fixes (2026-09-17) 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: [ref]


* as/push-force-if-includes-no-reflog (2026-09-29) 1 commit
 - push: fix --force-if-includes when remote-tracking ref has no reflog

 The timestamp used for checking the reflog of a remote-tracking
 branch during 'git push --force-if-includes' was left uninitialized
 when the reflog was completely empty, which has been corrected.

 Will merge to 'next'?
 cf. <xmqq8q4khuax.fsf@gitster.g>
 source: [ref]


* tb/rerere-lock-grace (2026-09-17) 3 commits
  (merged to 'next' on 2026-09-27 at e5c9d4eea7)
 + sequencer: disable auto maintenance in spawned commands
 + rebase, cherry-pick, revert: run auto maintenance when done
 + config: add git_config_append_parameter()

 The sequencer machinery (used by 'git rebase', 'git cherry-pick', and
 'git revert') has been updated to defer automatic maintenance tasks
 until the end of the operation, preventing nested 'git commit', 'git
 merge', and 'exec' commands from triggering GC operations that could
 contend for locks or delete open packs while the sequence is in
 progress.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* cc/lazy-fetch-trusted-bit (2026-09-28) 5 commits
 - builtin/upload-pack: don't disable lazy fetching on trusted repo
 - promisor-remote: prevent infinite recursion when lazy fetching
 - upload-pack: read uploadpack.lazyFetchTrusted
 - setup: extract path_allowlist_apply()
 - promisor-remote: factor out lazy_fetch_objects()

 A new 'uploadpack.lazyFetchTrusted' configuration variable has been
 introduced to allow 'upload-pack' to lazily fetch missing objects from
 configured promisor remotes when serving trusted repositories.

 Waiting for response.
 cf. <xmqqse2sgda6.fsf@gitster.g>
 cf. <xmqqy0ckgea3.fsf@gitster.g>
 source: [ref]


* cc/early-scan-options (2026-09-23) 3 commits
 - fast-import: use early_scan_options() for --allow-unsafe-features
 - parse-options: add early_scan_options()
 - parse-options: add parse_options_takes_argument()

 The process of parsing command-line options in commands that
 perform an early scan over their arguments (such as 'git bisect',
 'git rev-parse', and 'git fast-import') has been unified using a
 new early-scan sub-API, which parses and skips known options taking
 separate values to prevent logic bugs.

 Waiting for response.
 cf. [off-list ref]
 source: [off-list ref]


* 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.

 Needs review.
 source: [off-list ref]


* 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.

 Needs review.
 source: [off-list ref]


* 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

 Needs review.
 source: [off-list ref]


* dw/config-read-both-global (2026-08-23) 3 commits
 - config: read global scope via config_sequence
 - config: let sequence require a successful file
 - path: use forward slashes in XDG config on Windows

 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.

 Expecting a reroll.
 cf. [off-list ref]
 source: [off-list ref]


* 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: [off-list ref]


* 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.

 Needs review.
 source: [off-list ref]


* 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.

 Needs review.
 source: [off-list ref]


* gg/http-ssl-verify-status (2026-09-15) 1 commit
  (merged to 'next' on 2026-09-22 at e93bda5dfa)
 + http: add http.sslVerifyStatus to check stapled OCSP responses

 The HTTP transport has been taught to check the revocation status of
 the server certificate using the stapled OCSP response during the
 TLS handshake via a new 'http.sslVerifyStatus' configuration
 variable.

 Will merge to 'master'.
 cf. <xmqqv785uha7.fsf@gitster.g>
 source: [off-list ref]


* 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: [off-list ref]


* kj/repo-info-more-path-keys (2026-09-11) 7 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
 - 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. [off-list ref]
 source: [off-list ref]


* tc/last-modified-bloom (2026-09-01) 6 commits
 - last-modified: keep per-path Bloom filters for wildcard pathspecs
 - last-modified: check pathspec against Bloom filter first
 - revision: add Bloom check that includes parent directories
 - bloom: add helper to check if any key in a vector is present
 - revision: expose check for paths maybe changed in Bloom filter
 - revision: move bloom keyvec precondition into function

 The 'git last-modified' command has been optimized by using Bloom
 filters.  It now reuses revision walk filtering logic from 'git log'
 to pre-filter commits, and maintains per-path Bloom filters even when
 wildcard pathspecs are used.

 Waiting for response for too long, stalled.
 cf. [off-list ref]
 cf. [off-list ref]
 source: [off-list ref]


* ds/trace2-tolerate-failed-timestamp (2026-08-31) 7 commits
 - trace2: remove use of xcalloc()
 - trace2: remove use of ALLOC_GROW()
 - trace2: remove use of xstrfmt()
 - trace2: remove use of ALLOC_ARRAY()
 - trace2: remove use of xstrdup()
 - trace2: tolerate failed timestamp formatting
 - banned-die: create header for banning of functions

 Functions like `xstrfmt()` and `xcalloc()` have been banned from use
 in the trace2 API codebase to prevent calls to `die()` which lead to
 unwanted process exits and recursion when memory allocation fails.

 Needs review.
 source: [off-list ref]


* 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.
 source: [off-list ref]


* 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.
 cf. [off-list ref]
 source: [off-list ref]


* 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: [off-list ref]


* 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.
 cf. <an4uIQA09rDCwwBp@com-79390>
 cf. [off-list ref]
 source: [off-list ref]


* 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.
 cf. [off-list ref]
 source: [off-list ref]


* kh/format-patch-range-diff-notes (2026-09-26) 2 commits
 - format-patch: learn --[no-]range-diff-notes
 - format-patch: simplify get_notes_arg parameters

 The 'format-patch' command has been updated with options to
 configure notes specifically for range-diff output, allowing them to
 differ from the notes displayed on the patches themselves.

 Expecting a reroll.
 cf. [off-list ref]
 source: [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help