Repository navigation
v0.5.24
What's changed
- Fixes #2241: do not report mtime-only tracked refresh as staged (0218399)
- Fixes #2238: Git habit spellings and migration hints (40e2209)
- Fixes #2235: persist exec rebase state across interrupt (f1ef4bd)
- Merge branch 'factory/rev-list-since-filter-stop-0e08' (5cabe3d)
- Refresh public-api.txt for ReflogDateUnparseable resolve error (e4301db)
- Merge branch 'factory/public-api-snapshot-5267' (ebc84ff)
- Return zero immediately for filtered count with --max-count=0 (f990553)
- Fix filtered rev-list count limits and plain --count --since (7da8304)
- Fix rev-list --since frontier stop with filters and paths (b6ed056)
- Preserve invalid reflog date errors through Repository::resolve (1daa56c)
- Fix reflog @{date} selectors to use relaxed approxidate grammar (c40f88d)
- Refresh grit-lib public-api.txt for CloneOutcome field order (c81d423)
- Merge branch 'factory/skip-bundle-post-verify' (8550290)
- Fixes #2228: skip redundant post-index verify on bundle unbundle (04e9335)
- Journal directory spool when restore replaces a directory with a file (6f39644)
- Fix Ctrl-C during grit reset --hard and restore --source (89edd75)
- Merge branch 'factory/rust-version-msrv-2117' (e565cd5)
- Merge branch 'factory/clone-blobs-filter-sent-5241' (8533a4b)
- Merge branch 'factory/reference-transaction-hook-9fb4' (3106905)
- Fix clone --blobs when server lacks filter capability (b057a9f)
- Merge branch 'factory/submodule-gitlink-2229' (07f5bd6)
- Update public-api snapshot for reference-transaction hooks (ac95fe8)
- Merge branch 'factory/icase-commit-path-5240' (162c9ba)
- Restore zero_oid import in on_store tests (ae2d2be)
- Fix clippy after reference-transaction hook review fixes (f58f8fe)
- Fix reference-transaction hook null oid width and lock ordering (9549b2a)
- Fixes #2220: run reference-transaction hook on ref store updates (89e3988)
- Fix #2229: uninitialized gitlink status and clone submodule note (56b5f2b)
- Fix ignorecase collision losers on path commit and status (4d05dc2)
- Fixes #2231: return WouldOverwrite for merge and untracked overwrites (7ad686f)
- Merge branch 'factory/worktree-post-checkout-hook' (b4bb1cf)
- Fixes #2227: declare Rust 1.95 MSRV for published crates (b0315d7)
- Fix HTTP client rejecting credentials on 404 and other non-401 errors (68ebabf)
- Fixes #2232: run post-checkout after worktree add (6c0c1a5)
- Fix grit-lib compile errors blocking CI on main (22ec3d0)
- Merge branch 'factory/rebase-marker-labels' (98ca92a)
- docs: upload-pack include-tag adds tags of any sent object (e71150e)
- upload-pack: decide include-tag from the objects being packed (dabf88c)
- Merge branch 'factory/restore-hunks-single-index-read' (144da67)
- Refresh grit-lib public-api snapshot for PackBitmapWriteOptions.reachability_roots (e4f5b53)
- Refcount receive .keep markers and snapshot inventory keep status (cbaaad5)
- Protect migrated receive packs with .keep until refs publish (59ef6e2)
- Label rebase conflict markers with the replayed commit (3ab9a25)
- Free xdiff alignment state before building compaction line bodies (bf8d147)
- Filter stacked rebase replay by range descent (6489406)
- Limit stacked rebase replay to first-parent chains (cf8ddf3)
- Fix rebase update-refs for multi-commit stacked branches (6fe1f3c)
- Record ORIG_HEAD for grit rebase --exec and -X (f6018de)
- Honor -X ours|theirs in resumable rebase planning (19a3b4c)
- Document ORIG_HEAD for reset, merge, rebase and pull (1885674)
- Record ORIG_HEAD on reset, merge, rebase and pull (b0aa4d1)
- Merge branch 'factory/ci-public-api-5190' (78cd7ed)
- Refresh grit-lib public-api snapshot for cargo-public-api ordering (baf324d)
- Merge branch 'factory/unpack-memory-5179' (d9d6a59)
- Fixes #2216: bound unpack-objects memory with delta-base LRU (6855845)
- Document when a worktree hunk restore writes the index (233def0)
- Skip the line diff for -G pairs where neither side matches (ed2632f)
- Document pickaxe rename pairing and cover Pickaxe::matches_commit (773bacc)
- Count literal -S matches with memmem (ef28ed8)
- Pair renames before testing pickaxe -S/-G matches (c96f591)
- Fixes #2214: default grit index lock pid sidecars for stale-lock recovery (6a3f33f)
- Merge branch 'factory/fix-status-unstaged-null-oid' (77fda0c)
- Skip redundant copies and line scans in the hunk diff pipeline (a1bb921)
- Read the index once when restoring hunks and write it only on change (f5510d0)
- Merge branch 'factory/merge-commit-hooks' (3b583a0)
- Fixes #2215: use null OID for unstaged worktree side on size drift (4309196)
- Merge branch 'factory/fix-gc-concurrent-2210' (4de05ae)
- Document pre-merge-commit, prepare-commit-msg and pre-rebase (45d5e04)
- Merge branch 'factory/sparse-oid-filter-5168' (856bfc6)
- Merge branch 'factory/integrate-open-prs' (4992b10)
- Hint how to finish a merge a hook refused (389cb7a)
- Test commit, merge and rebase hooks against system git (7ca8c07)
- Run pre-merge-commit, prepare-commit-msg and pre-rebase hooks (407893f)
- Stream a local fetch's pack to a spool and skip per-object re-checks (d4d6eed)
- Pack a local fetch's missing objects directly when it has haves (4d4a187)
- Link a source pack that holds a few objects the receiver already has (ac63bad)
- Tell the pusher when the update hook declines a ref (9518189)
- Don't trust a pack listing left by another store on the thread (11be8c1)
- Only report created paths as copies in detect_copies (79aa9d4)
- Fix sparse:oid filter matching nested paths under included dirs (e0b3e5f)
- Pin migrated receive-pack packs until refs are published (5de2834)
- Record pre-repack pack inventory before maintenance roots (843add0)
- Fix gc bitmap failure when pushes land during repack (f85723e)
- Merge branch 'factory/reset-undo-fast' (8cbefdd)
- Document the many-tag undo-commit numbers (f90286c)
- Test header-primed tip walks and the rewind shortcut (42c0f8a)
- Read ref-tip commit headers in parallel for the orphaned-commit report (721c233)
- Fixes #2211: compact rewrite-apply journal for clean tree transitions (b4b486c)
- Hash gitlinks and type changes in patch-ids like git show (b89b9f5)
- Name the branch whose replay conflicts in history rewrites (e8e3d00)
- Merge branch 'factory/switch-gitlink-advance' (7cc1694)
- Merge branch 'factory/sigterm-sighup-clone-5156' (4f53a9a)
- Merge branch 'factory/patch-id-empty-files' (5931549)
- Advance the index gitlink when a submodule checkout drifted (4318073)
- Handle SIGTERM and SIGHUP like SIGINT for cancellable CLI operations (b618e1e)
- Match git patch-id --stable for commits with header-only file entries (80f59af)
- Document exit 128 for a refused pull --ff-only (76ce3c2)
- Exit 128 when pull --ff-only cannot fast-forward (48c01f6)
- Keep form feed and vertical tab in patch-id hashes (b63df8b)
- Slide diff hunks only across lines that compare equal (dd6822c)
- Merge branch 'factory/ref-df-conflict-errors' (14e6e26)
- Retry busy ref stores for core.filesRefLockTimeout (b334ea2)
- Take the shared ref store lock last in linked worktree transactions (b5f8884)
- Report ref directory/file conflicts as name conflicts naming the blocking ref (bb07853)
- Document that one reflog expiry run reads each commit once (2a2c86d)
- Intern commits for the per-ref reflog reachability walk (95a23e6)
- Size the merged config entries once per load (a476035)
- Evaluate hasconfig:remote.*.url: against the whole config load (02c335f)
- Report overwritten branches on grit rebase --abort and explain a stale exec plan (c9b5a26)
- Restore a moved branch on rebase abort and refuse to resume a stale exec plan (e382eb3)
- Merge branch 'factory/diff-worktree-binary-note' (e91d222)
- Report worktree binary content changes in grit diff (464c969)
- Hash dirty files in parallel for every index-to-worktree diff (004fca1)
- Merge branch 'factory/dead-unused-lib-fns' (a90c121)
- Share HTTP media-type parsing in non-Git-server detection (7da6972)
- Record MIDX layer stamp reads in hot-path test metrics (de44d28)
- Remove grit-lib public functions that nothing calls (e33eec0)
- Document the sparse-index collapse numbers (7af96b5)
- Test sparse-index collapse against Git's own sparse index (d928a9e)
- Collapse sparse directories in one pass on index write (ad0360a)
- List only refs/ for an empty for_each_ref prefix on every ref store (620a96e)
- Document initial ref transactions and the 200k-branch clone/fetch numbers (029fb74)
- Hand fetch's tracking-ref writes to the store without copying (aad653c)
- Cut per-ref filesystem work in files-store batches (14d2c50)
- Write a clone's imported refs as one packed-refs file (da30ade)
- Check same-batch ref name conflicts in O(n log n) (5274168)
- Document the sparse hard-reset numbers for changed excluded trees (6f42b82)
- Keep changed excluded sparse directories opaque on hard reset (41f7eaf)
- Merge pull request #2194 from schacon/loose-ref-listing-once (9a0e192)
- Merge branch 'factory/reflog-expire-fast' (eb2680a)
- Document how reflog expiry judges unreachable entries (d6bd3c2)
- Share commit linkage across the refs of one reflog expiry pass (545a19c)
- Walk reflog reachability lazily from the total-expiry cutoff (61d2f99)
- Expire old reflog entries with a commit-only reachability walk (125c3c3)
- Skip stat and readlink for regular loose ref files (4bdb17b)
- Render diffstats from the grit-lib model in the CLI (f46206c)
- Add a typed diffstat model to grit-lib (7a719e4)
- Merge branch 'factory/add-skip-stored-blobs' (81a58c7)
- Document that packing refs keeps the refs directory (fdb0e3d)
- Keep .git/refs when packing refs empties the refs tree (e4bf8f5)
- Skip writing staged blobs that are already packed or in an alternate (86d3e5d)
- Merge pull request #2150 from schacon/worktree-prune-missing-gitfile (729e2d6)
- Merge pull request #2149 from schacon/worktree-add-orphan (f0c26a9)
- Merge branch 'factory/ref-oid-verification' (505df55)
- Check branch-commit tips on the files fast path (e5f18c9)
- Check ref writes against the repository's own object store (037889e)
- Refuse ref updates to missing objects and branches to non-commits (a81ead5)
- Merge branch 'factory/merge-directory-renames' (2db83ea)
- Delete conflict-only files on merge --abort (e308c89)
- Detect directory renames in three-way merges (3275a31)
- Document where a push cancel lands (04ad33d)
- Stop a wire push on cancel while sending the pack or awaiting the report (5e819fb)
- Poll the cancel signal while a local push builds and indexes its pack (a741643)
- Document read_store, missing git dirs and hooks for injected stores (03fab2b)
- Expose an Odb's whole lookup chain as one ObjectStore (e9320c2)
- Reject commit-graph octopus parents that have no EDGE chunk (9ee867d)
- Give custom object stores a commit-graph of their own (735f0ee)
- Read custom primary objects without the files pack context (60a4cfc)
- grit blame: blame the working tree by default, add --contents (890fd29)
- blame: attribute uncommitted worktree and buffer content (26ab16f)
- Merge branch 'factory/undo-crlf-index-stat' (69d42f4)
- Give history undo's restored index entries real stat data (7d613fd)
- Share the per-path index stat refresh between restore paths (5f47a65)
- Merge branch 'factory/rename-default-50' (075d6bf)
- Merge branch 'factory/revs-startup-lean' (bb6f58c)
- bench: record short revision listings before and after (b2a9e27)
- Hex-encode object ids from a nibble table (01d637a)
- Snapshot the filter subprocess environment on first use (3f1170d)
- revs: build only the rows each output mode renders (bcf6512)
- Record the 2026-10-27 daily audit and deep-tree ancestor-check gains (1c52655)
- Guard the ancestor-symlink probe count on deep chains (7bdd239)
- Confirm deep ancestor chains with one openat2 walk on Linux (a29ea67)
- Make the ancestor-symlink cache per scan worker (3ebc344)
- Detect renames at 50% similarity by default, matching git (51a68ba)
- Merge branch 'factory/rebase-keep-same-tip-branches' (687ebc5)
- Keep other branches at the HEAD commit out of history rewrites (3dd9dbf)
- Merge branch 'factory/typed-hunk-select-errors' (dc92089)
- Carry typed errors in hunk selection failures (43b62aa)
- Hide every ancestor of excluded tips in --first-parent ranges (b6ffcf1)
- Lock in linear ignorecase staging on a clean tree with a regression test (95781d5)
- Document the Windows nanosecond stat default and its status numbers (0076420)
- Compare index stat to the nanosecond by default on Windows (444f57b)
- docs: record that show HEAD is bounded by startup cost (bd7cc29)
- bench: publish daily numbers from the dist build (7aca5ce)
- diff: walk tree entries borrowed from the raw tree payload (8b56f76)
- Merge branch 'factory/checkout-long-path-spool' (554e74c)
- Merge branch 'factory/add-untracked-chunked-memory' (0024a12)
- Keep checkout spool names short for deep paths (77a8a8d)
- Run receive hooks on local and file:// pushes (3b8f405)
- Share the receive-hook runner in receive-pack (8c0e9b5)
- Gate bulk add peak memory against git add and record the numbers (083ba62)
- List root commit files from the index instead of a tree diff (a4ba01d)
- Stage untracked files chunk by chunk to bound add memory (cd5314e)
- Document rebase --exec commands that amend or add commits (540515d)
- Thread progress and cancellation through rebase --exec recovery (ae38e04)
- Harden rebase --exec recovery after amend conflicts (34ec874)
- Move HEAD's branch when an exec amends a commit the plan kept (8d5a6cd)
- Test amending rebase --exec commands through the grit CLI (b0c3d30)
- Adopt commits that rebase --exec commands amend or extend (024a356)
- Merge branch 'factory/eol-status-size-shortcut' (3cc2584)
- Let worktree remove succeed on a stale size with unchanged content (289d1f2)
- Read a size-changed converted file once per status (d11a911)
- Hash size-changed files in status when clean conversion is not the identity (69167f1)
- Run the clone interrupt test on Windows (cbf627d)
- Release pack maps before removing a failed clone (fd4ea97)
- Merge branch 'factory/push-create-cas' (3a9871f)
- Report push creates lost to a racing writer as already_exists (efe98b4)
- Compare-and-swap local push creates against an absent ref (ab6d7f4)
- Merge branch 'factory/ignore-dir-negation' (7c3b609)
- ignore: let a later !dir/ re-include a directory a plain pattern matched (999ecd8)
- Hash patch-id text hunks from the default diff engine (0732913)
- Merge branch 'factory/stage-type-flip' (48a95bd)
- Document staging of file/directory type flips and the in-use hint (bc30e45)
- Remove deleted tracked paths in one index compaction pass (87f6e5e)
- Stage tracked paths that flipped between a file and a directory (8309b63)
- Suggest closing programs only when a worktree file is actually in use (4a16772)
- Merge branch 'factory/checkout-cancel-rollback' (2074469)
- Test that an interrupted grit switch leaves the repository unchanged (788df82)
- Let Ctrl+C cancel grit switch and clone on Windows (5262455)
- Merge branch 'factory/drop-dead-diffstat-writer' (b69fb83)
- Remove the unused Git-format diffstat writer from grit-lib (134553a)
- bench: record log and walk rows before and after the walk read buffer (4ad5567)
- log: build only JSON rows for --json output (602e657)
- Read walked commits into one reusable buffer (f0525e2)
- Use the shared git, rev_parse and free_port helpers in tests (536b8df)
- Add shared rev_parse and free_port test helpers (1f069dd)
- Merge branch 'factory/stash-selection-report' (3071869)
- Report partial stash hunks from the stash push itself (50aa4b4)
- Break cross-pack delta cycles when reusing stored deltas (7f52cc6)
- Refuse to write a full pack with a delta ahead of its base (afcdc08)
- Resolve case-folded worktree paths only when the indexed path is missing (338da46)
- Keep detached auto-gc off the caller's output pipes on Windows (74d8bf8)
- Explain conflicted restore and commit refusals (2e65faf)
- Refuse staging conflict markers after the conflict stages were dropped (68fa943)
- Refuse restoring only the index of an unmerged path (1ae305c)
- Ignore SIGPIPE in every command that reaches a remote (8dbc58e)
- Store HTTPS credentials for any host and report rejected ones (490a5e1)
- Report non-grit hosts as NotGritServer when signing in (126b20a)
- Merge branch 'factory/patch-id-ranges-cherry-mark' (176ebaa)
- Document that history undo puts consumed edits back (96719ff)
- Report restored paths from grit history undo (4416574)
- Restore consumed edits when undoing history fixup and absorb (03ff763)
- revs: reject non-symmetric ranges for --cherry-mark and --left-right with -n 0 (c19afe0)
- rev_list: compute range patch-ids on worker threads (e078e00)
- cli: patch-id ranges and revs --cherry-mark for reviewing rewritten branches (9dc98d3)
- rev_list: pair cherry-mark commits by patch-id (3af646e)
- patch_ids: expand revision ranges in Repository::patch_ids_for_revs (f53367a)
- Prune linked worktrees whose .git file is gone (f99b849)
- Allow adding worktrees to bare repositories (976c9e9)
- Add WorktreeBranch::Orphan for git worktree add --orphan (0898d21)
What's Changed
- Add worktrees with --orphan, and to bare repositories by @schacon in #2149
- Prune linked worktrees whose .git file is gone by @schacon in #2150
- Skip stat and readlink for regular loose ref files by @schacon in #2194
Full Changelog: v0.5.23...v0.5.24