Git v2.54 Release Notes
=======================

UI, Workflows & Features
------------------------

 * "git add -p" and friends note what the current status of the hunk
   being shown is.

 * "git history" history rewriting (experimental) command has been
   added.


 * "git replay" is taught to drop commits that become empty (not the
   ones that are empty in the original).

 * The help text and the documentation for the "--expire" option of
   "git worktree [list|prune]" have been improved.

 * When "git show-index" is run outside a repository, it silently
   defaults to SHA-1; the tool now warns when this happens.

 * "git merge-file" can be run outside a repository, but it ignored
   all configuration, even the per-user ones.  The command now uses
   available configuration files to find its customization.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

 * Avoid local submodule repository directory paths overlapping with
   each other by encoding submodule names before using them as path
   components.

 * The string_list API gains a new helper, string_list_sort_u(), and
   new unit tests to extend coverage.

 * Improve set-up time of a perf test.

 * ISO C23 redefines strchr and friends that tradiotionally took
   a const pointer and returned a non-const pointer derived from it to
   preserve constness (i.e., if you ask for a substring in a const
   string, you get a const pointer to the substring).  Update code
   paths that used non-const pointer to receive their results that did
   not have to be non-const to adjust.

 * Rename three functions around the commit_list data structure.

 * Transaction to create objects (or not) is currently tied to the
   repository, but in the future a repository can have multiple object
   sources, which may have different transaction mechanisms.  Make the
   odb transaction API per object source.

 * "git merge-ours" is taught to work better in a sparse checkout.

 * Allow recording process ID of the process that holds the lock next
   to a lockfile for diagnosis.

 * Reduce dependency on the_repository of xdiff-interface layer.

 * Code clean-up to use the commit_stack API.

 * "git diff --anchored=<text>" has been optimized.


Fixes since v2.53
-----------------

 * HTTP transport failed to authenticate in some code paths, which has
   been corrected.
   (merge ed0f7a62f7 ap/http-probe-rpc-use-auth later to maint).

 * The computation of column width made by "git diff --stat" was
   confused when pathnames contain non-ASCII characters.
   (merge 04f5d95ef7 lp/diff-stat-utf8-display-width-fix later to maint).

 * The "-z" and "--max-depth" documentation (and implementation of
   "-z") in the "git last-modified" command have been updated.
   (merge 9dcc09bed1 tc/last-modified-options-cleanup later to maint).

 * A handful of code paths that started using batched ref update API
   (after Git 2.51 or so) lost detailed error output, which have been
   corrected.
   (merge eff9299eac kn/ref-batch-output-error-reporting-fix later to maint).

 * "git blame --ignore-revs=... --color-lines" did not account for
   ignored revisions passing blame to the same commit an adjacent line
   gets blamed for.
   (merge d519082d4e rs/blame-ignore-colors-fix later to maint).

 * Coccinelle rules update.
   (merge 60614838a4 tc/memzero-array later to maint).

 * Giving "git last-modified" a tree (not a commit-ish) died an
   uncontrolled death, which has been corrected.
   (merge 525ef52301 tc/last-modified-not-a-tree later to maint).

 * Test contrib/ things in CI to catch breakages before they enter the
   "next" branch.
   (merge c591c3ceff jc/ci-test-contrib-too later to maint).

 * A handful of documentation pages have been modernized to use the
   "synopsis" style.
   (merge a34d1d53a6 ja/doc-synopsis-style-even-more later to maint).

 * Small clean-up of xdiff library to remove unnecessary data
   duplication.
   (merge 5086213bd2 pw/xdiff-cleanups later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge d79fff4a11 jk/remote-tracking-ref-leakfix later to maint).
   (merge 7a747f972d dd/t5403-modernise later to maint).
   (merge 81021871ea sp/myfirstcontribution-include-update later to maint).
   (merge 49223593fd ac/sparse-checkout-string-list-cleanup later to maint).
   (merge a824421d36 sp/t5500-cleanup later to maint).
   (merge df1c5d7ed7 kh/doc-shortlog-fix later to maint).
   (merge 2d45507f15 am/doc-github-contributiong-link-to-submittingpatches later to maint).
   (merge 68060b9262 hs/t9160-test-paths later to maint).
   (merge 486386c687 cs/subtree-reftable-testfix later to maint).
   (merge 0728012c53 jc/diff-highlight-main-master-testfix later to maint).
   (merge 831989ef38 mc/doc-send-email-signed-off-by-cc later to maint).
   (merge c44b3f3203 sd/doc-my1c-api-config-reference-fix later to maint).
   (merge 6c21e53bad rs/version-wo-the-repository later to maint).
   (merge 10c68d2577 rs/clean-includes later to maint).
   (merge 168d575719 bk/t2003-modernise later to maint).
   (merge 6bfef81c9a kh/doc-rerere-options-xref later to maint).
   (merge aaf3cc3d8d sd/t7003-test-path-is-helpers later to maint).
   (merge 2668b6bdc4 jc/doc-rerere-update later to maint).
   (merge 2f99f50f2d jc/doc-cg-c-comment later to maint).
