What's cooking in git.git (Jan 2026, #01)
From: Junio C Hamano <hidden>
Date: 2026-01-01 17:47:48
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 are candidate to be in a future release). Commits prefixed with '-' are only in 'seen', and aren't considered "accepted" at all and may be annotated with an URL to a message that raises issues but they are no means exhaustive. A topic without enough support may be discarded after a long period of no activity (of course they can be resubmit when new interests arise). 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/ -------------------------------------------------- [New Topics] * pt/fsmonitor-linux (2025-12-31) 1 commit - fsmonitor: implement filesystem change listener for Linux The fsmonitor daemon has been implemented for Linux. Comments? source: [ref] * pt/t7527-flake-workaround (2025-12-31) 1 commit - t7527: fix flaky fsmonitor event tests with retry logic Test fixup. Will merge to 'next'? source: [ref] * pt/t7800-difftool-test-racefix (2025-12-31) 1 commit - t7800: fix racy "difftool --dir-diff syncs worktree" test Test fixup. Will merge to 'next'. source: [ref] -------------------------------------------------- [Cooking] * dd/t5403-modernise (2025-12-29) 1 commit (merged to 'next' on 2026-01-01 at d1d712e288) + t5403: use test_path_is_file instead of test -f Test micro-clean-up. Will merge to 'master'. source: [ref] * ds/diff-lazy-fetch-with-name-only-fix (2025-12-29) 1 commit (merged to 'next' on 2026-01-01 at ccbd34d6c9) + diff: avoid segfault with freed entries Running "git diff" with "--name-only" and other options that allows us not to look at the blob contents, while objects that are lazily fetched from a promisor remote, caused use-after-free, which has been corrected. Will merge to 'master'. source: [ref] * en/fsck-snapshot-ref-state (2025-12-29) 1 commit - fsck: snapshot default refs before object walk "git fsck" used inconsistent set of refs to show a confused warning, which has been corrected. Will merge to 'next'? source: [ref] * en/ort-recursive-d-f-conflict-fix (2025-12-29) 1 commit (merged to 'next' on 2026-01-01 at 883dcfc63e) + merge-ort: fix corner case recursive submodule/directory conflict handling The ort merge machinery was hit an assertion failure in a history with criss-cross merges renamed a directory and a non-directory, which has been corrected. Will merge to 'master'. source: [ref] * rs/tag-wo-the-repository (2025-12-28) 4 commits (merged to 'next' on 2026-01-01 at 3b7c52229a) + tag: stop using the_repository + tag: support arbitrary repositories in parse_tag() + tag: support arbitrary repositories in gpg_verify_tag() + tag: use algo of repo parameter in parse_tag_buffer() Code clean-up. Will merge to 'master'. source: [ref] * kh/replay-invalid-onto-advance (2025-12-22) 2 commits - t3650: add more regression tests for failure conditions - replay: die descriptively when invalid commit-ish Test coverage of "git replay" has been improved. Expecting a rework on the bottom patch. source: [ref] * bc/checkout-error-message-fix (2025-12-24) 1 commit (merged to 'next' on 2025-12-28 at d807c22e01) + checkout: quote invalid treeish in error message Message fix. Will merge to 'master'. source: [ref] * cc/lop-filter-auto (2025-12-23) 9 commits - fetch-pack: wire up and enable auto filter logic - promisor-remote: keep advertised filter in memory - list-objects-filter-options: implement auto filter resolution - list-objects-filter-options: support 'auto' mode for --filter - doc: fetch: document `--filter=<filter-spec>` option - fetch: make filter_options local to cmd_fetch() - clone: make filter_options local to cmd_clone() - promisor-remote: allow a client to store fields - promisor-remote: refactor initialising field lists "auto filter" logic for large-object promisor remote. Comments? source: [ref] * rs/commit-stack (2025-12-24) 14 commits - commit-reach: use commit_stack - commit-graph: use commit_stack - commit: add commit_stack_grow() - shallow: use commit_stack - pack-bitmap-write: use commit_stack - commit: add commit_stack_init() - test-reach: use commit_stack - remote: use commit_stack for src_commits - remote: use commit_stack for sent_tips - remote: use commit_stack for local_commits - name-rev: use commit_stack - midx: use commit_stack - log: use commit_stack - revision: export commit_stack Code clean-up, unifying various hand-rolled "list of commit objects" and use the commit_stack API. Will merge to 'next'? source: [ref] * rs/parse-config-expiry-simplify (2025-12-27) 1 commit (merged to 'next' on 2025-12-30 at 138de1df67) + config: use git_parse_int() in git_config_get_expiry_in_days() Code clean-up. Will merge to 'master'. source: [ref] * rs/show-branch-prio-queue (2025-12-25) 1 commit (merged to 'next' on 2025-12-28 at 99d21acd7b) + show-branch: use prio_queue Code clean-up. Will merge to 'master'. source: [ref] * tt/receive-pack-oo-namespace-symref-fix (2025-12-27) 1 commit - receive-pack: fix crash on out-of-namespace symref "git receive-pack", when namespace is involved, segfaulted when a symbolic ref cross the namespace boundary. Comments? source: [ref] * sb/bundle-uri-without-uri (2025-12-19) 1 commit - bundle-uri: validate that bundle entries have a uri Diagnose invalid bundle-URI that lack the URI entry, instead of crashing. Will merge to 'next'? source: [ref] * sb/doc-worktree-prune-expire-improvement (2025-12-19) 2 commits - worktree: use 'prune' instead of 'expire' in help text - worktree: clarify --expire applies to missing worktrees The help text and the documentation for the "--expire" option of "git worktree [list|prune]" have been improved. Expecting a reroll. source: [ref] * ja/doc-synopsis-style-more (2025-12-20) 5 commits - doc: convert git-remote to synopsis style - doc: convert git stage to use synopsis block - doc: convert git-status tables to AsciiDoc format - doc: convert git-status to synopsis style - doc: fix t0450-txt-doc-vs-help to select only first synopsis block More doc style updates. Will merge to 'next'? source: [ref] * js/symlink-windows (2025-12-17) 19 commits - mingw: special-case index entries for symlinks with buggy size - mingw: emulate `stat()` a little more faithfully - mingw: try to create symlinks without elevated permissions - mingw: add support for symlinks to directories - mingw: implement basic `symlink()` functionality (file symlinks only) - mingw: implement `readlink()` - mingw: allow `mingw_chdir()` to change to symlink-resolved directories - mingw: support renaming symlinks - mingw: handle symlinks to directories in `mingw_unlink()` - mingw: add symlink-specific error codes - mingw: change default of `core.symlinks` to false - mingw: factor out the retry logic - mingw: compute the correct size for symlinks in `mingw_lstat()` - mingw: teach dirent about symlinks - mingw: let `mingw_lstat()` error early upon problems with reparse points - mingw: drop the separate `do_lstat()` function - mingw: implement `stat()` with symlink support - mingw: don't call `GetFileAttributes()` twice in `mingw_lstat()` - Merge branch 'js/prep-symlink-windows' into js/symlink-windows (this branch uses js/prep-symlink-windows.) Upstream symbolic link support on Windows from Git-for-Windows. Expecting review responses. cf. [ref] source: [ref] * pc/lockfile-pid (2025-12-17) 1 commit - lockfile: add PID file for debugging stale locks Allow recording process ID of the process that holds the lock next to a lockfile for diagnosis. source: [ref] * js/neuter-sideband (2025-12-17) 4 commits - sideband: add options to allow more control sequences to be passed through - sideband: do allow ANSI color sequences by default - sideband: introduce an "escape hatch" to allow control characters - sideband: mask control characters Invalidate control characters in sideband messages, to avoid terminal state getting messed up. Comments? cf. [ref] source: [ref] * ps/read-object-info-improvements (2025-12-18) 8 commits - packfile: drop repository parameter from `packed_object_info()` - packfile: skip unpacking object header for disk size requests - packfile: disentangle return value of `packed_object_info()` - packfile: always populate pack-specific info when reading object info - packfile: extend `is_delta` field to allow for "unknown" state - packfile: always declare object info to be OI_PACKED - object-file: always set OI_LOOSE when reading object info - Merge branch 'jc/object-read-stream-fix' into ps/read-object-info-improvements The object-info API has been cleaned up. Comments? source: [ref] * tb/macos-iconv-workarounds (2025-12-15) 6 commits . config.mak.uname: activate ICONV_RESTART_RESET if needed . Makefile: make all darwin into config.mak.uname . utf8.c: prepare workaround for iconv under macOS 14/15 . Merge branch 'rs/macos-iconv-workaround' into tb/macos-iconv-workarounds . config.mak.uname: use iconv from Homebrew on macOS . Makefile: add NO_HOMEBREW The iconv library on macOS fails to correctly handle stateful ISO/IEC 2022 encoded strings. Work it around instead of replacing it wholesale from homebrew. RFC. needs to be debased from older rs/macos-iconv-workaround topic. source: [ref] * js/prep-symlink-windows (2025-12-16) 6 commits - trim_last_path_component(): avoid hard-coding the directory separator - strbuf_readlink(): support link targets that exceed PATH_MAX - strbuf_readlink(): avoid calling `readlink()` twice in corner-cases - init: do parse _all_ core.* settings early - mingw: do resolve symlinks in `getcwd()` - Merge branch 'js/test-symlink-windows' into js/prep-symlink-windows (this branch is used by js/symlink-windows.) Further preparation to upstream symbolic link support on Windows. Expecting review responses. cf. <xmqqcy3wh8d1.fsf@gitster.g> source: [ref] * ap/http-probe-rpc-use-auth (2025-11-12) 1 commit - remote-curl: Use auth for probe_rpc() requests too source: [ref] * ps/packfile-store-in-odb-source (2025-12-17) 12 commits - packfile: move MIDX into packfile store - packfile: refactor `find_pack_entry()` to work on the packfile store - packfile: inline `find_kept_pack_entry()` - packfile: only prepare owning store in `packfile_store_prepare()` - packfile: only prepare owning store in `packfile_store_get_packs()` - packfile: move packfile store into object source - packfile: refactor misleading code when unusing pack windows - packfile: refactor kept-pack cache to work with packfile stores - packfile: pass source to `prepare_pack()` - packfile: create store via its owning source - Merge branch 'ps/odb-misc-fixes' into ps/packfile-store-in-odb-source - Merge branch 'ps/object-read-stream' into ps/packfile-store-in-odb-source (this branch uses ps/odb-misc-fixes.) The packfile_store data structure is moved from object store to odb source. Comments? source: [ref] * rs/macos-iconv-workaround (2025-12-24) 2 commits (merged to 'next' on 2025-12-28 at 94ed776719) + macOS: use iconv from Homebrew if needed and present + macOS: make Homebrew use configurable Workaround the "iconv" shipped as part of macOS, which is broken handling stateful ISO/IEC 2022 encoded strings. Will merge to 'master'. source: [ref] * lo/repo-info-keys (2025-12-09) 3 commits - repo: add new flag --keys to git-repo-info - repo: add a default output format to enum output_format - Merge branch 'lo/repo-struct-z' into lo/repo-info-keys "git repo info" learns "--keys" action to list known keys. Comments? source: [ref] * sb/doc-update-ref-markup-fix (2025-12-08) 1 commit - doc: fix `update-ref` `symref-create` formatting Doc mark-up fix. Will merget to 'next'. source: [ref] * ps/odb-misc-fixes (2025-12-10) 3 commits - odb: properly close sources before freeing them - builtin/gc: fix condition for whether to write commit graphs - Merge branch 'ps/object-source-management' into ps/odb-misc-fixes (this branch is used by ps/packfile-store-in-odb-source.) Miscellaneous fixes on object database layer. Comments? source: [ref] * ps/clar-integers (2025-12-06) 3 commits - gitattributes: disable blank-at-eof errors for clar test expectations - t/unit-tests: demonstrate use of integer comparison assertions - t/unit-tests: update clar to 39f11fe Import newer version of "clar", unit testing framework. Comments? source: [ref] * tb/incremental-midx-part-3.2 (2025-12-06) 17 commits - midx: enable reachability bitmaps during MIDX compaction - midx: implement MIDX compaction - t/helper/test-read-midx.c: plug memory leak when selecting layer - midx-write.c: factor fanout layering from `compute_sorted_entries()` - midx-write.c: enumerate `pack_int_id` values directly - midx-write.c: extract `fill_pack_from_midx()` - midx-write.c: introduce `midx_pack_perm()` helper - git-compat-util.h: introduce `u32_add()` - midx: do not require packs to be sorted in lexicographic order - midx-write.c: introduce `struct write_midx_opts` - midx-write.c: don't use `pack_perm` when assigning `bitmap_pos` - t/t5319-multi-pack-index.sh: fix copy-and-paste error in t5319.39 - git-multi-pack-index(1): align SYNOPSIS with 'git multi-pack-index -h' - git-multi-pack-index(1): remove non-existent incompatibility - builtin/multi-pack-index.c: make '--progress' a common option - midx: split `get_midx_checksum()` by adding `get_midx_hash()` - midx: mark `get_midx_checksum()` arguments as const Further work on incremental repacking using MIDX/bitmap Expecting a reroll. cf. [ref] source: [ref] * yc/histogram-hunk-shift-fix (2025-12-06) 1 commit - xdiff: re-diff shifted change groups when using histogram algorithm The final clean-up phase of the diff output could turn the result of histogram diff algorithm suboptimal, which has been corrected. Comments? source: [ref] * jk/parse-int (2025-11-30) 5 commits - fsck: use parse_unsigned_from_buf() for parsing timestamp - cache-tree: use parse_int_from_buf() - parse: add functions for parsing from non-string buffers - parse: prefer bool to int for boolean returns - Merge branch 'jk/asan-bonanza' into jk/parse-int Introduce a more robust way to parse a decimal integer stored in a piece of memory that is not necessarily terminated with NUL (which Asan strict-string-check complains even when use of strtol() is safe due to varified existence of whitespace after the digits). Expecting a reroll. cf. [ref] cf. [ref] source: [ref] * tc/last-modified-options-cleanup (2025-11-26) 4 commits - fixup! last-modified: document option --max-depth - last-modified: document how depth is handled better - last-modified: document option --max-depth - last-modified: handle and document NUL termination The "-z" and "--max-depth" documentation (and implementation of "-z") in the "git last-modified" command have been updated. Expecting a reroll. source: [ref] * pw/replay-drop-empty (2025-12-18) 2 commits - replay: drop commits that become empty - Merge branch 'ps/history' into pw/replay-drop-empty (this branch uses ps/history.) "git replay" is taught to drop commits that become empty (not the ones that are empty in the original). On hold, until the base topic gains consensus and stabilizes. source: [ref] * sp/shallow-time-boundary (2025-11-23) 1 commit - shallow: set borders which are all reachable after clone shallow since The set of shallow boundary "git clone --shallow-since" leaves contained commits that are not on the boundary, which has been corrected. Comments? source: [ref] * kn/ref-location (2025-12-01) 2 commits - refs: add GIT_REF_URI to specify reference backend and directory - refs: support obtaining ref_store for given dir A mechanism to specify what reference backend to use and store references in which directory is introduced, which would likely to be useful during ref migration. Comments? source: [ref] * dw/config-global-list (2025-10-09) 4 commits - config: keep bailing on unreadable global files - config: read global scope via config_sequence - config: test home and xdg files in `list --global` - cleanup_path: force forward slashes on Windows "git config --list --global", unlike "git config --list", did not consult both of the two possible per-user sources of the configuration files, i.e. $HOME/.gitconfig and the XDG one, which has been corrected. Expecting a reroll. cf. [ref] source: [ref] * lc/rebase-trailer (2025-11-05) 4 commits - rebase: support --trailer - trailer: append trailers in-process and drop the fork to `interpret-trailers` - trailer: move process_trailers to trailer.h - interpret-trailers: factor out buffer-based processing to process_trailers() Refactor code paths to run "interpret-trailers" from "git commit/tag" and use it in "git rebase". Expecting a reroll. cf. [ref] source: [ref] * jc/exclude-with-gitignore (2025-11-04) 1 commit - dir.c: do not be fooled by :(exclude) pathspec elements "git add ':(exclude)foo.o'" is clearly a request not to add 'foo.o', but the command complained about listing an ignored path foo.o on the command line, which has been corrected. Comments? source: <xmqqtsz9o3cn.fsf@gitster.g> * bc/sha1-256-interop-02 (2025-11-17) 15 commits - object-file-convert: always make sure object ID algo is valid - rust: add a small wrapper around the hashfile code - rust: add a new binary object map format - rust: add functionality to hash an object - rust: add a build.rs script for tests - hash: expose hash context functions to Rust - write-or-die: add an fsync component for the object map - csum-file: define hashwrite's count as a uint32_t - rust: add additional helpers for ObjectID - hash: add a function to look up hash algo structs - rust: add a hash algorithm abstraction - rust: add a ObjectID struct - hash: use uint32_t for object_id algorithm - conversion: don't crash when no destination algo - repository: require Rust support for interoperability The code to maintain mapping between object names in multiple hash functions is being added, written in Rust. source: [ref] * ar/run-command-hook (2025-12-26) 11 commits (merged to 'next' on 2025-12-28 at 048cdffe21) + receive-pack: convert receive hooks to hook API + receive-pack: convert update hooks to new API + hooks: allow callers to capture output + run-command: allow capturing of collated output + hook: allow overriding the ungroup option + reference-transaction: use hook API instead of run-command + transport: convert pre-push to hook API + hook: convert 'post-rewrite' hook in sequencer.c to hook API + hook: provide stdin via callback + run-command: add stdin callback for parallelization + run-command: add first helper for pp child states Use hook API to replace ad-hoc invocation of hook scripts with the run_command() API. Will merge to 'master'. source: [ref] * je/doc-reset (2025-12-18) 4 commits - doc: git-reset: clarify `git reset <pathspec>` - doc: git-reset: clarify `git reset [mode]` - doc: git-reset: clarify intro - doc: git-reset: reorder the forms Documentation updates. Will merge to 'next'? source: [ref] * ps/history (2025-12-03) 13 commits - builtin/history: implement "split" subcommand - cache-tree: allow writing in-memory index as tree - add-patch: allow disabling editing of hunks - add-patch: add support for in-memory index patching - add-patch: remove dependency on "add-interactive" subsystem - add-patch: split out `struct interactive_options` - add-patch: split out header from "add-interactive.h" - builtin/history: implement "reword" subcommand - builtin: add new "history" command - replay: stop using `the_repository` - replay: extract logic to pick commits - wt-status: provide function to expose status for trees - Merge branch 'pw/replay-exclude-gpgsig-fix' into ps/history (this branch is used by pw/replay-drop-empty.) "git history" history rewriting UI. What's the status of this topic? source: [ref] * ms/doc-worktree-side-by-side (2025-10-10) 2 commits - doc: git-worktree: Add side by side branch checkout example - doc: git-worktree: Link to examples Document "git worktree add" and use of out-of-tree worktrees with examples. Expecting a reroll. cf. [ref] source: [ref] * ar/submodule-gitdir-tweak (2025-12-20) 11 commits - submodule: detect conflicts with existing gitdir configs - submodule: hash the submodule name for the gitdir path - submodule: fix case-folding gitdir filesystem collisions - submodule--helper: fix filesystem collisions by encoding gitdir paths - builtin/credential-store: move is_rfc3986_unreserved to url.[ch] - submodule--helper: add gitdir migration command - submodule: allow runtime enabling extensions.submodulePathConfig - submodule: introduce extensions.submodulePathConfig - builtin/submodule--helper: add gitdir command - submodule: always validate gitdirs inside submodule_name_to_gitdir - submodule--helper: use submodule_name_to_gitdir in add_submodule Avoid local submodule repository directory paths overlapping with each other by encoding submodule names before using them as path components. Comments? source: [ref] -------------------------------------------------- [Discarded] * wm/complete-git-short-opts (2025-11-26) 1 commit - completion: complete "git -<TAB>" with short options The command line completion script (in contrib/) learned to complete "git -<TAB>" to give single-letter options like "-C". Will discard. We do not complete single-letter options themselves. cf. <xmqqo6onjfwl.fsf@gitster.g> source: [ref]