Git 2.23 Release Notes
======================

Updates since v2.22
-------------------

Backward compatibility note

 * The "--base" option of "format-patch" computed the patch-ids for
   prerequisite patches in an unstable way, which has been updated to
   compute in a way that is compatible with "git patch-id --stable".


UI, Workflows & Features

 * The "git fast-export/import" pair has been taught to handle commits
   with log messages in encoding other than UTF-8 better.

 * In recent versions of Git, per-worktree refs are exposed in
   refs/worktrees/<wtname>/ hierarchy, which means that worktree names
   must be a valid refname component.  The code now sanitizes the names
   given to worktrees, to make sure these refs are well-formed.

 * "git merge" learned "--quit" option that cleans up the in-progress
   merge while leaving the working tree and the index still in a mess.

 * "git format-patch" learns a configuration to set the default for
   its --notes=<ref> option.

 * The code to show args with potential typo that cannot be
   interpreted as a commit-ish has been improved.

 * "git clone --recurse-submodules" learned to set up the submodules
   to ignore commit object names recorded in the superproject gitlink
   and instead use the commits that happen to be at the tip of the
   remote-tracking branches from the get-go, by passing the new
   "--remote-submodules" option.

 * The pattern "git diff/grep" use to extract funcname and words
   boundary for Matlab has been extend to cover Octave, which is more
   or less equivalent.

 * "git help git" was hard to discover (well, at least for some
   people).

 * The pattern "git diff/grep" use to extract funcname and words
   boundary for Rust has been added.

 * "git status" can be told a non-standard default value for the
   "--[no-]ahead-behind" option with a new configuration variable
   status.aheadBehind.

 * "git fetch" and "git pull" reports when a fetch results in
   non-fast-forward updates to let the user notice unusual situation.
   The commands learned "--no-shown-forced-updates" option to disable
   this safety feature.

 * Two new commands "git switch" and "git restore" are introduced to
   split "checking out a branch to work on advancing its history" and
   "checking out paths out of the index and/or a tree-ish to work on
   advancing the current history" out of the single "git checkout"
   command.

 * "git branch --list" learned to always output the detached HEAD as
   the first item (when the HEAD is detached, of course), regardless
   of the locale.

 * The conditional inclusion mechanism learned to base the choice on
   the branch the HEAD currently is on.

 * "git rev-list --objects" learned with "--no-object-names" option to
   squelch the path to the object that is used as a grouping hint for
   pack-objects.

 * A new tag.gpgSign configuration variable turns "git tag -a" into
   "git tag -s".

 * "git multi-pack-index" learned expire and repack subcommands.

 * "git blame" learned to "ignore" commits in the history, whose
   effects (as well as their presence) get ignored.

 * "git cherry-pick/revert" learned a new "--skip" action.

 * The tips of refs from the alternate object store can be used as
   starting point for reachability computation now.

 * Extra blank lines in "git status" output have been reduced.

 * The commits in a repository can be described by multiple
   commit-graph files now, which allows the commit-graph files to be
   updated incrementally.

 * The "git log" command learns to issue a warning when log.mailmap
   configuration is not set and --[no-]mailmap option is not used, to
   prepare users for future versions of Git that uses the mailmap by
   default.

 * "git range-diff" output has been tweaked for easier identification
   of which part of what file the patch shown is about.


Performance, Internal Implementation, Development Support etc.

 * Update supporting parts of "git rebase" to remove code that should
   no longer be used.

 * Developer support to emulate unsatisfied prerequisites in tests to
   ensure that the remainer of the tests still succeeds when tests
   with prerequisites are skipped.

 * "git update-server-info" learned not to rewrite the file with the
   same contents.

 * The way of specifying the path to find dynamic libraries at runtime
   has been simplified.  The old default to pass -R/path/to/dir has been
   replaced with the new default to pass -Wl,-rpath,/path/to/dir,
   which is the more recent GCC uses.  Those who need to build with an
   old GCC can still use "CC_LD_DYNPATH=-R"

 * Prepare use of reachability index in topological walker that works
   on a range (A..B).

 * A new tutorial targetting specifically aspiring git-core
   developers has been added.

 * Auto-detect how to tell HP-UX aCC where to use dynamically linked
   libraries from at runtime.

 * "git mergetool" and its tests now spawn fewer subprocesses.

 * Dev support update to help tracing out tests.

 * Support to build with MSVC has been updated.

 * "git fetch" that grabs from a group of remotes learned to run the
   auto-gc only once at the very end.

 * A handful of Windows build patches have been upstreamed.

 * The code to read state files used by the sequencer machinery for
   "git status" has been made more robust against a corrupt or stale
   state files.

 * "git for-each-ref" with multiple patterns have been optimized.

 * The tree-walk API learned to pass an in-core repository
   instance throughout more codepaths.

 * When one step in multi step cherry-pick or revert is reset or
   committed, the command line prompt script failed to notice the
   current status, which has been improved.

 * Many GIT_TEST_* environment variables control various aspects of
   how our tests are run, but a few followed "non-empty is true, empty
   or unset is false" while others followed the usual "there are a few
   ways to spell true, like yes, on, etc., and also ways to spell
   false, like no, off, etc." convention.

 * Adjust the dir-iterator API and apply it to the local clone
   optimization codepath.

 * We have been trying out a few language features outside c89; the
   coding guidelines document did not talk about them and instead had
   a blanket ban against them.
   (merge cc0c42975a jc/post-c89-rules-doc later to maint).

 * A test helper has been introduced to optimize preparation of test
   repositories with many simple commits, and a handful of test
   scripts have been updated to use it.


Fixes since v2.22
-----------------

 * A relative pathname given to "git init --template=<path> <repo>"
   ought to be relative to the directory "git init" gets invoked in,
   but it instead was made relative to the repository, which has been
   corrected.
   (merge e1df7fe43f nd/init-relative-template-fix later to maint).

 * "git worktree add" used to fail when another worktree connected to
   the same repository was corrupt, which has been corrected.
   (merge 105df73e71 nd/corrupt-worktrees later to maint).

 * The ownership rule for the file descriptor to fast-import remote
   backend was mixed up, leading to unrelated file descriptor getting
   closed, which has been fixed.
   (merge 3203566a71 mh/import-transport-fd-fix later to maint).

 * A "merge -c" instruction during "git rebase --rebase-merges" should
   give the user a chance to edit the log message, even when there is
   otherwise no need to create a new merge and replace the existing
   one (i.e. fast-forward instead), but did not.  Which has been
   corrected.

 * Code cleanup and futureproof.
   (merge 31f5256c82 ds/object-info-for-prefetch-fix later to maint).

 * More parameter validation.
   (merge de99eb0c24 es/grep-require-name-when-needed later to maint).

 * "git update-server-info" used to leave stale packfiles in its
   output, which has been corrected.
   (merge e941c48d49 ew/server-info-remove-crufts later to maint).

 * The server side support for "git fetch" used to show incorrect
   value for the HEAD symbolic ref when the namespace feature is in
   use, which has been corrected.
   (merge 533e088250 jk/HEAD-symref-in-xfer-namespaces later to maint).

 * "git am -i --resolved" segfaulted after trying to see a commit as
   if it were a tree, which has been corrected.
   (merge 7663e438c5 jk/am-i-resolved-fix later to maint).

 * "git bundle verify" needs to see if prerequisite objects exist in
   the receiving repository, but the command did not check if we are
   in a repository upfront, which has been corrected.
   (merge 3bbbe467f2 js/bundle-verify-require-object-store later to maint).

 * "git merge --squash" is designed to update the working tree and the
   index without creating the commit, and this cannot be countermanded
   by adding the "--commit" option; the command now refuses to work
   when both options are given.
   (merge 1d14d0c994 vv/merge-squash-with-explicit-commit later to maint).

 * The data collected by fsmonitor was not properly written back to
   the on-disk index file, breaking t7519 tests occasionally, which
   has been corrected.
   (merge b5a8169752 js/fsmonitor-unflake later to maint).

 * Update to Unicode 12.1 width table.
   (merge 5817f9caa3 bb/unicode-12.1-reiwa later to maint).

 * The command line to invoke a "git cat-file" command from inside
   "git p4" was not properly quoted to protect a caret and running a
   broken command on Windows, which has been corrected.
   (merge c3f2358de3 mm/p4-unshelve-windows-fix later to maint).

 * "git request-pull" learned to warn when the ref we ask them to pull
   from in the local repository and in the published repository are
   different.
   (merge 0454220d66 pb/request-pull-verify-remote-ref later to maint).

 * When creating a partial clone, the object filtering criteria is
   recorded for the origin of the clone, but this incorrectly used a
   hardcoded name "origin" to name that remote; it has been corrected
   to honor the "--origin <name>" option.
   (merge 1c4a9f9114 xl/record-partial-clone-origin later to maint).

 * "git fetch" into a lazy clone forgot to fetch base objects that are
   necessary to complete delta in a thin packfile, which has been
   corrected.
   (merge 810e19322d jt/partial-clone-missing-ref-delta-base later to maint).

 * The filter_data used in the list-objects-filter (which manages a
   lazily sparse clone repository) did not use the dynamic array API
   correctly---'nr' is supposed to point at one past the last element
   of the array in use.  This has been corrected.
   (merge 7140600e2e md/list-objects-filter-memfix later to maint).

 * The description about slashes in gitignore patterns (used to
   indicate things like "anchored to this level only" and "only
   matches directories") has been revamped.
   (merge 1a58bad014 an/ignore-doc-update later to maint).

 * The URL decoding code has been updated to avoid going past the end
   of the string while parsing %-<hex>-<hex> sequence.
   (merge d37dc239a4 md/url-parse-harden later to maint).

 * The list of for-each like macros used by clang-format has been
   updated.
   (merge fc7e03aace mo/clang-format-for-each-update later to maint).

 * "git branch --list" learned to show branches that are checked out
   in other worktrees connected to the same repository prefixed with
   '+', similar to the way the currently checked out branch is shown
   with '*' in front.
   (merge 6e9381469e nb/branch-show-other-worktrees-head later to maint).

 * Code restructuring during 2.20 period broke fetching tags via
   "import" based transports.
   (merge f80d922355 fc/fetch-with-import-fix later to maint).

 * The commit-graph file is now part of the "files that the runtime
   may keep open file descriptors on, all of which would need to be
   closed when done with the object store", and the file descriptor to
   an existing commit-graph file now is closed before "gc" finalizes a
   new instance to replace it.
   (merge 2d511cfc0b ds/close-object-store later to maint).

 * "git checkout -p" needs to selectively apply a patch in reverse,
   which did not work well.
   (merge 2bd69b9024 pw/add-p-recount later to maint).

 * Code clean-up to avoid signed integer wraparounds during binary search.
   (merge 568a05c5ec rs/avoid-overflow-in-midpoint-computation later to maint).

 * "git interpret-trailers" always treated '#' as the comment
   character, regardless of core.commentChar setting, which has been
   corrected.
   (merge 29c83fc23f jk/trailers-use-config later to maint).

 * "git stash show 23" used to work, but no more after getting
   rewritten in C; this regression has been corrected.
   (merge 63b50c8ffe tg/stash-ref-by-index-fix later to maint).

 * "git rebase --abort" used to leave refs/rewritten/ when concluding
   "git rebase -r", which has been corrected.
   (merge d559f502c5 pw/rebase-abort-clean-rewritten later to maint).

 * An incorrect list of options was cached after command line
   completion failed (e.g. trying to complete a command that requires
   a repository outside one), which has been corrected.
   (merge 69702523af nd/completion-no-cache-failure later to maint).

 * The code to parse scaled numbers out of configuration files has
   been made more robust and also easier to follow.
   (merge 39c575c969 rs/config-unit-parsing later to maint).

 * The codepath to compute delta islands used to spew progress output
   without giving the callers any way to squelch it, which has been
   fixed.
   (merge bdbdf42f8a jk/delta-islands-progress-fix later to maint).

 * Protocol capabilities that go over wire should never be translated,
   but it was incorrectly marked for translation, which has been
   corrected.  The output of protocol capabilities for debugging has
   been tweaked a bit.

 * Use "Erase in Line" CSI sequence that is already used in the editor
   support to clear cruft in the progress output.
   (merge 5b12e3123b sg/rebase-progress later to maint).

 * "git submodule foreach" did not protect command line options passed
   to the command to be run in each submodule correctly, when the
   "--recursive" option was in use.
   (merge 30db18b148 ms/submodule-foreach-fix later to maint).

 * The configuration variable rebase.rescheduleFailedExec should be
   effective only while running an interactive rebase and should not
   affect anything when running an non-interactive one, which was not
   the case.  This has been corrected.
   (merge 906b63942a js/rebase-reschedule-applies-only-to-interactive later to maint).

 * The "git clone" documentation refers to command line options in its
   description in the short form; they have been replaced with long
   forms to make them more recognisable.
   (merge bfc8c84ed5 qn/clone-doc-use-long-form later to maint).

 * Generation of pack bitmaps are now disabled when .keep files exist,
   as these are mutually exclusive features.
   (merge 7328482253 ew/repack-with-bitmaps-by-default later to maint).

 * "git rm" to resolve a conflicted path leaked an internal message
   "needs merge" before actually removing the path, which was
   confusing.  This has been corrected.
   (merge b2b1f615ce jc/denoise-rm-to-resolve later to maint).

 * "git stash --keep-index" did not work correctly on paths that have
   been removed, which has been fixed.
   (merge b932f6a5e8 tg/stash-keep-index-with-removed-paths later to maint).

 * Window 7 update ;-)
   (merge eb7c786314 js/mingw-spawn-with-spaces-in-path later to maint).

 * A codepath that reads from GPG for signed object verification read
   past the end of allocated buffer, which has been fixed.
   (merge 64c45dc72e sr/gpg-interface-stop-at-the-end later to maint).

 * "git clean" silently skipped a path when it cannot lstat() it; now
   it gives a warning.
   (merge b09364c47a js/clean-report-too-long-a-path later to maint).

 * "git push --atomic" that goes over the transport-helper (namely,
   the smart http transport) failed to prevent refs to be pushed when
   it can locally tell that one of the ref update will fail without
   having to consult the other end, which has been corrected.
   (merge 2581ea3d31 es/local-atomic-push-failure-with-http later to maint).

 * The internal diff machinery can be made to read out of bounds while
   looking for --funcion-context line in a corner case, which has been
   corrected.
   (merge b777f3fd61 jk/xdiff-clamp-funcname-context-index later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge f547101b26 es/git-debugger-doc later to maint).
   (merge 7877ac3d7b js/bisect-helper-check-get-oid-return-value later to maint).
   (merge 0108f47eb3 sw/git-p4-unshelve-branched-files later to maint).
   (merge 9df8f734fd cm/send-email-document-req-modules later to maint).
   (merge afc3bf6eb1 ab/hash-object-doc later to maint).
   (merge 1fde99cfc7 po/doc-branch later to maint).
   (merge 459842e1c2 dl/config-alias-doc later to maint).
   (merge 5d137fc2c7 cb/fsmonitor-intfix later to maint).
   (merge 921d49be86 rs/copy-array later to maint).
   (merge cc8d872e69 js/t3404-typofix later to maint).
   (merge 729a9b558b cb/mkstemps-uint-type-fix later to maint).
   (merge 9dae4fe79f js/gcc-8-and-9 later to maint).
   (merge ed33bd8f30 js/t0001-case-insensitive later to maint).
   (merge dfa880e336 jw/gitweb-sample-update later to maint).
   (merge e532a90a9f sg/t5551-fetch-smart-error-is-translated later to maint).
   (merge 8d45ad8c29 jt/t5551-test-chunked later to maint).
   (merge 1a64e07d23 sg/git-C-empty-doc later to maint).
   (merge 37a2e35395 sg/ci-brew-gcc-workaround later to maint).
   (merge 24df0d49c4 js/trace2-signo-typofix later to maint).
   (merge fbec05c210 cc/test-oidmap later to maint).
   (merge 7926cee904 di/readme-markup-fix later to maint).
   (merge 02638d1e11 vn/xmmap-gently later to maint).
   (merge f7bf24d4dd rm/gpg-program-doc-fix later to maint).
   (merge 3aef54e8b8 js/unmap-before-ext-diff later to maint).
