What's cooking in git.git (Sep 2026, #01)
From: Junio C Hamano <hidden>
Date: 2026-09-03 01:25:51
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 22nd batch of topics have now graduated to the 'master' branch.
We have 604 non-merge commits in 'master' since Git 2.55. There
are 49 non-merge commits cooking in 'next' (note that some have
been reverted), and 213 non-merge commits, including those in and
out of 'next', in 'seen' as of this writing.
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']
* jc/rerere-doc-typofix (2026-08-24) 1 commit
(merged to 'next' on 2026-08-25 at 62bdec98f9)
+ rerere: technical documentation typofix
A missing preposition in the rerere technical documentation has been
fixed.
Graduated to 'master'.
source: <xmqqtsojp4zf.fsf@gitster.g>
* ty/repository-fetch-if-missing (2026-08-14) 1 commit
(merged to 'next' on 2026-08-25 at 2cc77c1ca1)
+ repository: move fetch_if_missing into struct repository
(this branch is used by ps/odb-stop-registering-in-memory-sources.)
The global variable 'fetch_if_missing' has been moved to a member in
'struct repository', continuing the libification process and
allowing per-repository control (such as for submodules).
Graduated to 'master'.
cf. <xmqqmrun8jeu.fsf@gitster.g>
source: [off-list ref]
--------------------------------------------------
[New Topics]
* jk/rev-info-argv-to-free (2026-08-31) 2 commits
- revision: simplify mark_argv_for_free() callers
- revision: hang on to "freed" argv elements
The memory ownership of argv elements passed to the revision
machinery has been made more robust by keeping logically "freed"
elements alive until the rev_info struct is released, preventing
use-after-free bugs when options store references to them.
Will merge to 'next'?
cf. [off-list ref]
cf. [off-list ref]
cf. <xmqq8q5ksvd8.fsf@gitster.g>
source: [off-list ref]
* ps/ci-depends-on-ruby (2026-09-01) 1 commit
- ci: fix missing Ruby dependency in "documentation" job
The CI job that builds the documentation failed because it lacked
the 'gem' command. The 'asciidoc' package apparently stopped pulling
in the 'ruby' package as a transitive dependency. The CI script has
been updated to explicitly install 'ruby'.
Will merge to 'next'?
cf. [off-list ref]
source: [off-list ref]
* ps/odb-stop-registering-in-memory-sources (2026-09-02) 13 commits
- odb: remove the ability to link sources ad-hoc
- t/helper: stop registering alternates in "ref-store" command
- t/helper: adapt read-midx to not link ad-hoc source anymore
- builtin/multi-pack-index: refuse unknown sources with "--object-dir="
- odb/packed: fix memory leaks when freeing source
- tmp-objdir: drop unused function to register alternate
- odb: remove infrastructure to register submodule sources
- builtin/grep: stop registering submodule ODB as source
- submodule-config: stop registering submodule sources
- submodule-config: stop using `the_hash_algo`
- submodule-config: remove uses of `the_repository`
- cache-tree: remove dependency on `the_repository`
- cache-tree: drop `the_repository` in `cache_tree_fully_valid()`
- Merge branch 'ty/repository-fetch-if-missing' into ps/ps/odb-stop-registering-in-memory-sources
The mechanism to register in-memory alternate object sources has
been removed, as submodule object databases are now accessed
natively via their own repository structures. This simplifies
object database management and prepares the codebase for migrating
alternate tracking into the files backend.
Needs review.
source: [off-list ref]
* jk/ci-use-system-asciidoctor (2026-09-02) 2 commits
- ci: drop ALREADY_HAVE_ASCIIDOCTOR variable
- ci: fix missing Ruby dependency in "documentation" job
The CI script to install dependencies for the documentation build
has been updated to install asciidoctor directly via the system
package manager instead of pinning to an older version via gem.
Additionally, an obsolete variable used for retired Azure Pipelines
environments has been removed.
Will merge to 'next'?
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* jk/submodule-error-leak (2026-09-01) 2 commits
- submodule--helper: free URL when repository setup fails
- repository: make repo_clear() idempotent
The error path in 'git submodule--helper' has been updated to plug a
memory leak when a repository handle could not be obtained,
leveraging an updated idempotent repo_clear().
Will merge to 'next'?
cf. [off-list ref]
source: [off-list ref]
* sa/rev-list-missing-only (2026-09-01) 1 commit
- rev-list: add --missing-only option to filter output
The git rev-list command has been augmented with a '--missing-only'
option that filters the output to only show missing objects,
stripping the leading '?' character and suppressing present objects,
which is useful when used in combination with '--missing=print' or
'--missing=print-info'.
Expecting a reroll.
cf. [off-list ref]
source: [off-list ref]
* wf/imap-send-draft (2026-09-01) 1 commit
- imap-send: add --draft to set IMAP \Draft flag
The 'git imap-send' command has been taught to take the '--draft'
option to mark uploaded messages as drafts, which helps some email
clients render them properly for editing and sending.
Will merge to 'next'?
source: <761c3f1b-e280-48b1-a2ad-770b68be3434@slotpi01m90>
* yt/pathspec-negative-prefix (2026-09-02) 1 commit
- dir: do not apply prefix to negative pathspecs
The pathspec matching logic has been updated to avoid out-of-bounds
memory accesses when a negative pathspec is shorter than the common
prefix of positive pathspecs.
Needs review.
source: [off-list ref]
* cc/early-scan-options (2026-09-02) 6 commits
- fast-import: use early_scan_options() for --allow-unsafe-features
- parse-options: build early scan options from a struct option array
- parse-options: add parse_options_takes_argument()
- rev-parse: fix "--" detection when it is an option value
- bisect: fix "--" detection when a term name is "--"
- parse-options: add early_scan_options()
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. <xmqqpkyviizc.fsf@gitster.g>
source: [off-list ref]
--------------------------------------------------
[Stalled]
* ps/libgit-in-subdir (2026-07-12) 2 commits
. Move libgit.a sources into separate "lib/" directory
. t/helper: prepare "test-example-tap.c" for introduction of "lib/"
. Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir
The source files for 'libgit.a' have been moved into a new 'lib/'
directory to clean up the top-level directory and clearly separate
library code. This topic has been ejected for now, as it causes too
many evil merges with other topics.
Waiting for response for too long, stalled.
cf. <xmqqqzkx9t95.fsf@gitster.g>
cf. <al6yCTDjBRn2HGq0@com-79390>
cf. <xmqqqzk2t7sm.fsf@gitster.g>
cf. <xmqq7blo4g7g.fsf@gitster.g>
source: [off-list ref]
* hs/rebase-continue-edit (2026-07-21) 1 commit
- rebase: add --[no-]edit to --continue
Support for skipping the editor when continuing a rebase after
conflict resolution has been added with the '--no-edit' option, and
forcing it with '--edit'. A new configuration variable
'rebase.noEdit' can be used to set the default behavior.
Waiting for response for too long, will discard.
cf. <xmqqldb4xlqa.fsf@gitster.g>
cf. [off-list ref]
source: [off-list ref]
* sn/rebase-update-refs-symrefs (2026-07-22) 2 commits
- rebase: guard non-branch symref targets
- rebase: skip branch symref aliases
'git rebase --update-refs' has been taught to resolve local branch
symrefs to their referents before queuing updates, ensuring aliases of
the current branch are skipped and duplicate updates are avoided to
prevent failures when branch aliases are present.
Waiting for response for too long, will discard.
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* tb/pack-with-duplicates (2026-07-24) 5 commits
- pack-bitmap: handle duplicate pack entries during MIDX reuse
- test-tool bitmap: reject packs with duplicate objects
- midx: verify duplicate pack entries by OID and offset
- packfile: recover delta cycles through duplicate entries
- t5308: test reverse indexes with duplicate objects
The handling of packfiles with duplicate object entries has been
hardened. Specifically, reverse index lookup, delta cycle
recovery, multi-pack-index verification, and pack reuse paths have
been updated to correctly handle or gracefully reject duplicate
entries.
Waiting for response for too long, will discard.
cf. <xmqqecgs3vg6.fsf@gitster.g>
source: [off-list ref]
* cl/regexec-macos-leak (2026-07-28) 2 commits
- SQUASH???
- regexec: work around macOS TRE leak on invalid UTF-8
A compatibility workaround has been introduced for macOS to address
a memory leak in the system regex engine when it encounters invalid
multibyte sequences. The workaround segments the input buffer at
invalid byte boundaries and searches each valid segment separately
using regexec(), avoiding the leaking path.
Waiting for response for too long, will discard.
cf. <xmqqse52bpa9.fsf@gitster.g>
cf. [off-list ref]
source: [off-list ref]
* cc/lazy-fetch-trusted-bit (2026-08-13) 5 commits
- builtin/upload-pack: set GIT_NO_LAZY_FETCH to 0 on trusted repo
- upload-pack: read uploadpack.lazyFetchTrusted
- setup: add 'allow_dot' arg to path_allowlist_apply()
- 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 for too long, stalled.
cf. <xmqq1pc0mr5i.fsf@gitster.g>
cf. <xmqqecg0oabe.fsf@gitster.g>
cf. <xmqqy0e8mv0k.fsf@gitster.g>
cf. <xmqqjypsoami.fsf@gitster.g>
cf. <xmqq1pc0mr5i.fsf@gitster.g>
source: [off-list ref]
--------------------------------------------------
[Cooking]
* ec/commit-fixup-options (2026-05-26) 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.
cf. <xmqq1pbkefh0.fsf@gitster.g>
source: [off-list ref]
* tc/replay-linearize (2026-08-31) 3 commits
- replay: offer an option to linearize the commit topology
- replay: resolve the replay base outside pick_regular_commit()
- replay: add helper to put entry into replayed_commits
The 'git replay' command has been taught the '--linearize' option to
drop merge commits and linearize the replayed history, mimicking 'git
rebase --no-rebase-merges'.
Will merge to 'next'?
cf. [off-list ref]
source: [off-list ref]
* jc/checkout-refactor (2026-08-30) 8 commits
- checkout: move post_checkout_hook() to checkout.c
- checkout: wrap overly long lines
- checkout: restructure switch, restore, and checkout entrypoints
- checkout: extract branch setup and tracking helpers
- checkout: extract option validation and pathspec helpers
- checkout: validate stage and merge option compatibility in checkout_paths()
- checkout: validate new branch name in checkout_branch()
- checkout: pass cb_option explicitly to branch name parsers
The front-end code for 'git checkout', 'git switch', and 'git
restore' has been restructured to cleanly separate their pathspec
and branch handling, eliminating a common bottleneck and paving the
way to libify utility helpers.
Waiting for response.
cf. [off-list ref]
source: [off-list ref]
* hk/typofix (2026-08-31) 1 commit
- versioncmp: fix typo in versioncmp.c, t/t0022-crlf-rename.sh
Various spelling mistakes in comments and test descriptions have
been corrected.
Will merge to 'next'?
source: [off-list ref]
* ll/doc-pushcert-if-asked (2026-08-29) 1 commit
- doc: remote-helpers: option pushcert if-asked
he 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]
* jc/you-still-use-that (2026-08-27) 1 commit
(merged to 'next' on 2026-08-30 at d8f3941368)
+ you_still_use_that(): reword the instructions
The instructions for deprecated commands emitted by
you_still_use_that() have been reworded to clarify that the removal
decision is final and to provide more assertive guidance on finding
a replacement.
Will merge to 'master'.
source: <xmqqse3z8m5g.fsf_-_@gitster.g>
* 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.
Waiting for response.
cf. <xmqqo6esti9o.fsf@gitster.g>
cf. <xmqqecfkhify.fsf@gitster.g>
cf. <xmqqy0dsg2vt.fsf@gitster.g>
cf. <xmqqse40g22c.fsf@gitster.g>
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]
* kn/reftable-optimize-reloading (2026-08-24) 4 commits
(merged to 'next' on 2026-08-28 at d714ed570a)
+ reftable/stack: avoid reloading the stack when already locked
+ reftable/stack: move list lock to `struct reftable_stack`
+ reftable/stack: rename reftable_stack_new_addition()
+ reftable/stack: remove `REFTABLE_STACK_NEW_ADDITION_RELOAD`
The reftable code has been optimized to avoid an unnecessary
stat/reload of the stack when an addition already holds the
list_file lock, reducing the number of newfstatat syscalls from
linear to constant when writing refs.
Will merge to 'master'.
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* ps/odb-alternates-at-creation (2026-08-31) 8 commits
- 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
- Merge branch 'ps/odb-eagerly-load-alternates' into ps/odb-alternates-at-creation
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.
Needs review.
source: [off-list ref]
* ps/odb-pluggable-fsck (2026-08-30) 10 commits
- builtin/fsck: move loose object verification into the loose source
- builtin/fsck: move multi-pack index verification into the packed source
- builtin/fsck: move bitmap verification into the packed source
- builtin/fsck: move reverse index verification into the packed source
- builtin/fsck: move packfile verification into the packed source
- odb: provide infrastructure for pluggable fsck checks
- builtin/fsck: don't check alternates with "--no-full"
- builtin/fsck: de-globalize option handling
- builtin/fsck: merge `fsck_obj_buffer()` and `fsck_obj()`
- builtin/fsck: use `fsck_obj_buffer()` when checking loose objects
- Merge branch 'ps/odb-eagerly-load-alternates' into ps/odb-pluggable-fsck
- Merge branch 'ps/odb-pluggable-pack-generation' into ps/odb-pluggable-fsck
The consistency checks for the object database (fsck) have been
decoupled from the generic builtin implementation and moved into the
backend-specific object source layers, making them pluggable for
different object storage formats.
Needs review.
cf. [off-list ref]
source: [off-list ref]
* rs/worktree-add-basename-fixes (2026-08-25) 4 commits
- worktree add: let worktree_basename() return string copy
- worktree add: trim slashes when deriving branch name from path
- worktree add: reject separator-only path
- worktree add: don't read out of bounds in worktree_basename()
The string extraction logic for the branch name and worktree name
from the given path in 'git worktree add' has been corrected and
simplified to avoid out-of-bounds reads and improper handling of
trailing slashes.
Will merge to 'next'?
cf. <xmqqfqzuw23a.fsf@gitster.g>
source: [off-list ref]
* en/no-amend-during-conflicts (2026-09-01) 5 commits
- commit: refuse partial commits during conflict resolution
- commit: refuse to amend during conflict resolution
- commit: reword the empty-commit rebase amend error
- commit: allow a partial commit when a rebase pick becomes empty
- commit: clarify FROM_REBASE_PICK and is_from_rebase() names
Teach 'am', 'revert', and 'rebase' that running 'commit --amend' or a
partial 'commit <paths>' makes no sense during operations that stop
and return control to the user to resolve conflicts left in the
working tree, just like 'cherry-pick' and 'merge' do.
Looking good.
(a newer iteration v4 exists as [off-list ref])
cf. [off-list ref]
source: [off-list ref]
* as/utimensat-utimes (2026-08-21) 3 commits
- compat/posix: drop legacy <utime.h> header and shims
- treewide: use utimensat(2) instead of legacy utime(3p)
- compat/posix: introduce utimensat(2) wrapper
The codebase has been updated to use the newer utimensat() POSIX
function instead of the obsolescent utime(), allowing
high-precision timestamps while preserving fallback compatibility.
Waiting for response.
cf. [off-list ref]
source: [off-list ref]
* kn/receive-report-hook (2026-09-01) 3 commits
- hook: introduce the receive-report hook
- receive-pack: move message generation to separate function
- 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.
Waiting for response.
cf. <xmqqik4nihyd.fsf@gitster.g>
source: [off-list ref]
* en/midx-missing-pack-fallback (2026-08-29) 4 commits
- packfile: recover when a multi-pack-index names a removed pack
- mktree: do not use OBJECT_INFO_QUICK when checking objects
- mktree: plug per-tree leak in --batch mode
- replay: fail gracefully when a merge input is unreadable
- Merge branch 'ps/odb-generic-corrupt-objects' into en/midx-missing-pack-fallback
The object lookup machinery has been taught to gracefully recover
when a multi-pack-index points to an owning pack that was removed
during a concurrent geometric repack, and 'git replay' has been
fixed to not segfault when reading such missing objects.
Will merge to 'next'?
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* ll/zsh-complete-git-potty-options (2026-08-19) 1 commit
(merged to 'next' on 2026-08-31 at fee97cc13c)
+ completion: zsh: support completion after "git -C <path>"
The zsh completion script (in 'contrib/') has been updated to
correctly locate the Git command after global options like '-C' by
properly skipping them, similar to how the bash completion does.
Will merge to 'master'.
cf. [off-list ref]
cf. <xmqqld9sczd0.fsf@gitster.g>
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/doc-datamodel (2026-08-23) 4 commits
- doc: datamodel: link to the glossary
- doc: glossary: link four of the terms to gitdatamodel(7)
- doc: git: link to the gitdatamodel(7) tutorial
- doc: git: list gitdatamodel(7) as a concept guide
The gitdatamodel documentation page has been linked from a handful
of key documentaiton pages.
Waiting for response.
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* yn/worktree-repair-relative (2026-08-28) 1 commit
(merged to 'next' on 2026-08-31 at 15072b025f)
+ worktree repair: detect relative path in .git file correctly
The git worktree repair command failed to rewrite the .git file of
a working tree from a relative path to an absolute path when the
command was run in the working tree itself. The
read_gitfile_gently() function was modified to also return whether
the path originally recorded in the file was absolute, and this new
capability is used to correctly detect such mismatches.
Will merge to 'master'.
cf. <xmqqh5ke3zxt.fsf@gitster.g>
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.
cf. <xmqqse40ei5f.fsf@gitster.g>
source: [off-list ref]
* ns/ref-symref-additional-tests (2026-08-20) 2 commits
- t1402: test forbidden characters in refnames
- t1401: check symbolic-ref failure and --quiet silence on a non-symbolic ref
A few tests for the reference handling subsystem have been added to
exercise the handling of forbidden characters and symbolic references.
Will merge to 'next'.
cf. [off-list ref]
source: [off-list ref]
source: [off-list ref]
* gg/http-ssl-verify-status (2026-08-18) 1 commit
- 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.
Waiting for response.
cf. <xmqqecfez7ie.fsf@gitster.g>
source: [off-list ref]
* ty/repo-config-cleanups (2026-08-07) 3 commits
- environment: remove inaccurate repo_config_values comments
- environment: clarify repository config getter documentation
- environment: drop redundant NULL checks in config getters
Repository configuration getters in 'environment.c' have been
simplified by removing redundant NULL checks. The documentation for
these getters in 'environment.h' has been clarified, and inaccurate
section comments inside 'struct repo_config_values' have been removed.
Needs review.
source: [off-list ref]
* dk/use-nsec-runtime (2026-08-31) 3 commits
- 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.
Waiting for response.
source: [off-list ref]
* bc/restrict-hex-to-lowercase (2026-07-29) 6 commits
- hex: allow only lowercase object IDs in breaking changes mode
- 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.
Expecting a reroll.
cf. [off-list ref]
cf. [off-list ref]
source: [off-list ref]
* js/mingw-build-updates (2026-08-12) 12 commits
- mingw: allow `git.exe` to be used instead of the "Git wrapper"
- mingw: ensure valid CTYPE
- mingw: always define `ETC_*` for MSYS2 environments
- windows: skip linking `git-<command>` for built-ins
- mingw: rely on MSYS2's metadata instead of hard-coding it
- mingw: only enable the MSYS2-specific stuff when compiling in MSYS2
- mingw: set the prefix and HOST_CPU as per MSYS2's settings
- mingw: avoid over-specifying `--pic-executable`
- mingw: only use -Wl,--large-address-aware for 32-bit builds
- mingw: drop the -D_USE_32BIT_TIME_T option
- mingw: stop hard-coding `CC = gcc`
- mingw: include the Python parts in the build
A collection of patches from Git for Windows has been upstreamed,
mostly focusing on simplifying and robustifying build configurations
for MinGW/MSYS2, dropping obsolete compatibility options, and allowing
the main 'git.exe' to be used directly without the extra wrapper
process on Windows.
Waiting for response.
cf. [off-list ref]
source: [off-list ref]
* yn/worktree-ambiguous-remote-advice (2026-08-27) 4 commits
(merged to 'next' on 2026-08-30 at 8e7670286a)
+ worktree add: treat multiple matches with --guess-remote as an error
+ worktree add: improve message for ambiguous remote branch name
+ checkout: improve message for ambiguous remote branch name
+ checkout: extract function to display advice for ambiguous remotes
'git worktree add' did not prevent DWIM behavior when '-b' or '-B' was
specified, which has been corrected.
Will merge to 'master'.
cf. <xmqq4igfa2pv.fsf@gitster.g>
source: [off-list ref]
* hn/ci-cancel-stale-pr-runs (2026-08-31) 1 commit
- ci: cancel stale pull request workflow runs
GitHub Actions CI workflow runs triggered by pull requests have
been configured to cancel older runs when a new push is made to the
same pull request.
Will merge to 'next'?
source: [off-list ref]
* hn/checkout-m-autostash-refine (2026-09-02) 2 commits
- checkout: separate autostash conflict advice from branch-switch message
- stash: reserve exit status 1 for conflicts
The autostash fallback in 'git checkout -m' has been refined to only
retry when there are local changes. Additionally, a blank line now
visually separates autostash conflict advice from the subsequent
branch-switch message.
Waiting for response.
cf. <xmqqse3rh1mp.fsf@gitster.g>
cf. <xmqqmrtzh0vx.fsf@gitster.g>
source: [off-list ref]
* kj/repo-info-more-path-keys (2026-08-25) 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.
Needs review.
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.
Needs review.
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]
* gr/add-e-use-apply-api (2026-07-10) 1 commit
(merged to 'next' on 2026-08-31 at 04ee2ac5c5)
+ builtin/add.c: replace run_command() with direct apply_all_patches() call
The application of the edited patch in 'git add -e' has been
refactored to use the internal apply API directly, avoiding the need
to spawn a 'git apply' subprocess.
Will merge to 'master'.
cf. <xmqqbjaoiyzx.fsf@gitster.g>
source: [off-list ref]
* fz/rebase-autosquash-empty (2026-08-27) 1 commit
- sequencer: honor --empty when a fixup!/squash! empties its target
A commit that is emptied by melding a 'fixup!' or 'squash!' commit
during 'git rebase --autosquash' is now handled according to the
'--empty' option, allowing it to be dropped, kept, or to halt the
rebase.
Waiting for response.
cf. [off-list ref]
source: [off-list ref]
* mm/lib-httpd-cgi-safe (2026-09-01) 3 commits
- t/lib-httpd: document writing concurrency-safe CGI helpers
- t/lib-httpd: make http-429 first-request check atomic
- t/lib-httpd: fix apply-one-time-script race under concurrent requests
CGI helper scripts used by HTTP-related test scripts have been updated
to use atomic filesystem operations, preventing race conditions when
Apache handles concurrent requests.
Will merge to 'next'?
cf. [off-list ref]
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-06-27) 7 commits
- diffcore-pickaxe: scope -G to the -L tracked range
- diff: support --check with -L line ranges
- line-log: support diff 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 and group the line-range filter for clarity
(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]
* hn/history-squash (2026-08-20) 8 commits
- 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.
Waiting for response.
cf. <xmqq4igov9h9.fsf@gitster.g>
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]
--------------------------------------------------
[Discarded]
* ps/fetch-packfile-uris-parallel (2026-08-21) 2 commits
. fetch-pack: allow parallelizing packfile URI fetches
. fetch-pack: prepare for threaded fetching of packfile URIs
The `git fetch` and `git clone` commands have been optimized to
download packfile URIs in parallel when the new
`fetch.packfileURIThreads` configuration is set, significantly
speeding up fetches from servers that advertise multiple packfiles.
Retracted for now.
cf. [off-list ref]
source: [off-list ref]
* kh/format-patch-range-diff-notes (2026-08-24) 3 commits
. format-patch: learn --[no-]range-diff-notes
. revision.h: rename struct member to reflect notes role
. 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.
Retracted.
cf. [off-list ref]
source: [off-list ref]
* jc/die-for-incompatible-opts (2026-08-27) 1 commit
. die_for_incompatible_opts(): unbounded number of options
The die_for_incompatible_opt[234]() family of functions has been
generalized to handle an arbitrary number of mutually exclusive
options via a variadic function.
Retracted.
cf. <xmqqfqzv1g6z.fsf@gitster.g>
source: <xmqqbjana2wv.fsf@gitster.g>
* zy/apply-abandoned-header-fix (2026-07-01) 1 commit
. apply: avoid leaking abandoned git-header state
A candidate 'git diff' header parsed by 'git apply' has been isolated
in a temporary structure, preventing any partially parsed state from
polluting the main patch structure and causing assertions to trip if
the header is ultimately rejected.
Discarded.
cf. <xmqqtsogei9d.fsf@gitster.g>
source: [off-list ref]