| Git 2.26 Release Notes | 
 | ====================== | 
 |  | 
 | Updates since v2.25 | 
 | ------------------- | 
 |  | 
 | Backward compatibility notes | 
 |  | 
 |  * "git rebase" uses a different backend that is based on the 'merge' | 
 |    machinery by default.  There are a few known differences in the | 
 |    behaviour from the traditional machinery based on patch+apply. | 
 |  | 
 |    If your workflow is negatively affected by this change, please | 
 |    report it to git@vger.kernel.org so that we can take a look into | 
 |    it.  After doing so, you can set the 'rebase.backend' configuration | 
 |    variable to 'apply', in order to use the old default behaviour in | 
 |    the meantime. | 
 |  | 
 |  | 
 | UI, Workflows & Features | 
 |  | 
 |  * Sample credential helper for using .netrc has been updated to work | 
 |    out of the box. | 
 |  | 
 |  * gpg.minTrustLevel configuration variable has been introduced to | 
 |    tell various signature verification codepaths the required minimum | 
 |    trust level. | 
 |  | 
 |  * The command line completion (in contrib/) learned to complete | 
 |    subcommands and arguments to "git worktree". | 
 |  | 
 |  * Disambiguation logic to tell revisions and pathspec apart has been | 
 |    tweaked so that backslash-escaped glob special characters do not | 
 |    count in the "wildcards are pathspec" rule. | 
 |  | 
 |  * One effect of specifying where the GIT_DIR is (either with the | 
 |    environment variable, or with the "git --git-dir=<where> cmd" | 
 |    option) is to disable the repository discovery.  This has been | 
 |    placed a bit more stress in the documentation, as new users often | 
 |    get confused. | 
 |  | 
 |  * Two help messages given when "git add" notices the user gave it | 
 |    nothing to add have been updated to use advise() API. | 
 |  | 
 |  * A new version of fsmonitor-watchman hook has been introduced, to | 
 |    avoid races. | 
 |  | 
 |  * "git config" learned to show in which "scope", in addition to in | 
 |    which file, each config setting comes from. | 
 |  | 
 |  * The basic 7 colors learned the brighter counterparts | 
 |    (e.g. "brightred"). | 
 |  | 
 |  * "git sparse-checkout" learned a new "add" subcommand. | 
 |  | 
 |  * A configuration element used for credential subsystem can now use | 
 |    wildcard pattern to specify for which set of URLs the entry | 
 |    applies. | 
 |  | 
 |  * "git clone --recurse-submodules --single-branch" now uses the same | 
 |    single-branch option when cloning the submodules. | 
 |  | 
 |  * "git rm" and "git stash" learns the new "--pathspec-from-file" | 
 |    option. | 
 |  | 
 |  * "git am --show-current-patch" is a way to show the piece of e-mail | 
 |    for the stopped step, which is not suitable to directly feed "git | 
 |    apply" (it is designed to be a good "git am" input).  It learned a | 
 |    new option to show only the patch part. | 
 |  | 
 |  * Handling of conflicting renames in merge-recursive have further | 
 |    been made consistent with how existing codepaths try to mimic what | 
 |    is done to add/add conflicts. | 
 |  | 
 |  | 
 | Performance, Internal Implementation, Development Support etc. | 
 |  | 
 |  * Tell .editorconfig that in this project, *.txt files are indented | 
 |    with tabs. | 
 |  | 
 |  * The test-lint machinery knew to check "VAR=VAL shell_function" | 
 |    construct, but did not check "VAR= shell_function", which has been | 
 |    corrected. | 
 |  | 
 |  * Replace "git config --bool" calls with "git config --type=bool" in | 
 |    sample templates. | 
 |  | 
 |  * The effort to move "git-add--interactive" to C continues. | 
 |  | 
 |  * Improve error message generation for "git submodule add". | 
 |  | 
 |  * Preparation of test scripts for the day when the object names will | 
 |    use SHA-256 continues. | 
 |  | 
 |  * Warn programmers about pretend_object_file() that allows the code | 
 |    to tentatively use in-core objects. | 
 |  | 
 |  * The way "git pack-objects" reuses objects stored in existing pack | 
 |    to generate its result has been improved. | 
 |  | 
 |  * The transport protocol version 2 becomes the default one. | 
 |  | 
 |  * Traditionally, we avoided threaded grep while searching in objects | 
 |    (as opposed to files in the working tree) as accesses to the object | 
 |    layer is not thread-safe.  This limitation is getting lifted. | 
 |  | 
 |  * "git rebase -i" (and friends) used to unnecessarily check out the | 
 |    tip of the branch to be rebased, which has been corrected. | 
 |  | 
 |  * A low-level API function get_oid(), that accepts various ways to | 
 |    name an object, used to issue end-user facing error messages | 
 |    without l10n, which has been updated to be translatable. | 
 |  | 
 |  * Unneeded connectivity check is now disabled in a partial clone when | 
 |    fetching into it. | 
 |  | 
 |  * Some rough edges in the sparse-checkout feature, especially around | 
 |    the cone mode, have been cleaned up. | 
 |  | 
 |  * The diff-* plumbing family of subcommands now pay attention to the | 
 |    diff.wsErrorHighlight configuration, which has been ignored before; | 
 |    this allows "git add -p" to also show the whitespace problems to | 
 |    the end user. | 
 |  | 
 |  * Some codepaths were given a repository instance as a parameter to | 
 |    work in the repository, but passed the_repository instance to its | 
 |    callees, which has been cleaned up (somewhat). | 
 |  | 
 |  * Memory footprint and performance of "git name-rev" has been | 
 |    improved. | 
 |  | 
 |  * The object reachability bitmap machinery and the partial cloning | 
 |    machinery were not prepared to work well together, because some | 
 |    object-filtering criteria that partial clones use inherently rely | 
 |    on object traversal, but the bitmap machinery is an optimization | 
 |    to bypass that object traversal.  There however are some cases | 
 |    where they can work together, and they were taught about them. | 
 |  | 
 |  * "git rebase" has learned to use the merge backend (i.e. the | 
 |    machinery that drives "rebase -i") by default, while allowing | 
 |    "--apply" option to use the "apply" backend (e.g. the moral | 
 |    equivalent of "format-patch piped to am").  The rebase.backend | 
 |    configuration variable can be set to customize. | 
 |  | 
 |  * Underlying machinery of "git bisect--helper" is being refactored | 
 |    into pieces that are more easily reused. | 
 |  | 
 |  | 
 | Fixes since v2.25 | 
 | ----------------- | 
 |  | 
 |  * "git commit" gives output similar to "git status" when there is | 
 |    nothing to commit, but without honoring the advise.statusHints | 
 |    configuration variable, which has been corrected. | 
 |  | 
 |  * has_object_file() said "no" given an object registered to the | 
 |    system via pretend_object_file(), making it inconsistent with | 
 |    read_object_file(), causing lazy fetch to attempt fetching an | 
 |    empty tree from promisor remotes. | 
 |  | 
 |  * Complete an update to tutorial that encourages "git switch" over | 
 |    "git checkout" that was done only half-way. | 
 |  | 
 |  * C pedantry ;-) fix. | 
 |  | 
 |  * The code that tries to skip over the entries for the paths in a | 
 |    single directory using the cache-tree was not careful enough | 
 |    against corrupt index file. | 
 |  | 
 |  * Reduce unnecessary round-trip when running "ls-remote" over the | 
 |    stateless RPC mechanism. | 
 |  | 
 |  * "git restore --staged" did not correctly update the cache-tree | 
 |    structure, resulting in bogus trees to be written afterwards, which | 
 |    has been corrected. | 
 |  | 
 |  * The code recently added to move to the entry beyond the ones in the | 
 |    same directory in the index in the sparse-cone mode did not count | 
 |    the number of entries to skip over incorrectly, which has been | 
 |    corrected. | 
 |  | 
 |  * Rendering by "git log --graph" of ancestry lines leading to a merge | 
 |    commit were made suboptimal to waste vertical space a bit with a | 
 |    recent update, which has been corrected. | 
 |  | 
 |  * Work around test breakages caused by custom regex engine used in | 
 |    libasan, when address sanitizer is used with more recent versions | 
 |    of gcc and clang. | 
 |  | 
 |  * Minor bugfixes to "git add -i" that has recently been rewritten in C. | 
 |  | 
 |  * "git fetch --refmap=" option has got a better documentation. | 
 |  | 
 |  * "git checkout X" did not correctly fail when X is not a local | 
 |    branch but could name more than one remote-tracking branches | 
 |    (i.e. to be dwimmed as the starting point to create a corresponding | 
 |    local branch), which has been corrected. | 
 |    (merge fa74180d08 am/checkout-file-and-ref-ref-ambiguity later to maint). | 
 |  | 
 |  * Corner case bugs in "git clean" that stems from a (necessarily for | 
 |    performance reasons) awkward calling convention in the directory | 
 |    enumeration API has been corrected. | 
 |  | 
 |  * A fetch that is told to recursively fetch updates in submodules | 
 |    inevitably produces reams of output, and it becomes hard to spot | 
 |    error messages.  The command has been taught to enumerate | 
 |    submodules that had errors at the end of the operation. | 
 |    (merge 0222540827 es/fetch-show-failed-submodules-atend later to maint). | 
 |  | 
 |  * The "--recurse-submodules" option of various subcommands did not | 
 |    work well when run in an alternate worktree, which has been | 
 |    corrected. | 
 |  | 
 |  * Futureproofing a test not to depend on the current implementation | 
 |    detail. | 
 |  | 
 |  * Running "git rm" on a submodule failed unnecessarily when | 
 |    .gitmodules is only cache-dirty, which has been corrected. | 
 |  | 
 |  * C pedantry ;-) fix. | 
 |  | 
 |  * "git grep --no-index" should not get affected by the contents of | 
 |    the .gitmodules file but when "--recurse-submodules" is given or | 
 |    the "submodule.recurse" variable is set, it did.  Now these | 
 |    settings are ignored in the "--no-index" mode. | 
 |  | 
 |  * Technical details of the bundle format has been documented. | 
 |  | 
 |  * Unhelpful warning messages during documentation build have been squelched. | 
 |  | 
 |  * "git rebase -i" identifies existing commits in its todo file with | 
 |    their abbreviated object name, which could become ambiguous as it | 
 |    goes to create new commits, and has a mechanism to avoid ambiguity | 
 |    in the main part of its execution.  A few other cases however were | 
 |    not covered by the protection against ambiguity, which has been | 
 |    corrected. | 
 |  | 
 |  * Allow the rebase.missingCommitsCheck configuration to kick in when | 
 |    "rebase --edit-todo" and "rebase --continue" restarts the procedure. | 
 |    (merge 5a5445d878 ag/edit-todo-drop-check later to maint). | 
 |  | 
 |  * The way "git submodule status" reports an initialized but not yet | 
 |    populated submodule has not been reimplemented correctly when a | 
 |    part of the "git submodule" command was rewritten in C, which has | 
 |    been corrected. | 
 |    (merge f38c92452d pk/status-of-uncloned-submodule later to maint). | 
 |  | 
 |  * The code to automatically shrink the fan-out in the notes tree had | 
 |    an off-by-one bug, which has been killed. | 
 |  | 
 |  * The index-pack code now diagnoses a bad input packstream that | 
 |    records the same object twice when it is used as delta base; the | 
 |    code used to declare a software bug when encountering such an | 
 |    input, but it is an input error. | 
 |  | 
 |  | 
 |  * The code to compute the commit-graph has been taught to use a more | 
 |    robust way to tell if two object directories refer to the same | 
 |    thing. | 
 |    (merge a7df60cac8 tb/commit-graph-object-dir later to maint). | 
 |  | 
 |  * "git remote rename X Y" needs to adjust configuration variables | 
 |    (e.g. branch.<name>.remote) whose value used to be X to Y. | 
 |    branch.<name>.pushRemote is now also updated. | 
 |  | 
 |  * Update to doc-diff. | 
 |  | 
 |  * Doc markup fix. | 
 |  | 
 |  * "git check-ignore" did not work when the given path is explicitly | 
 |    marked as not ignored with a negative entry in the .gitignore file. | 
 |  | 
 |  * The merge-recursive machinery failed to refresh the cache entry for | 
 |    a merge result in a couple of places, resulting in an unnecessary | 
 |    merge failure, which has been fixed. | 
 |  | 
 |  * Fix for a bug revealed by a recent change to make the protocol v2 | 
 |    the default. | 
 |  | 
 |  * In rare cases "git worktree add <path>" could think that <path> | 
 |    was already a registered worktree even when it wasn't and refuse | 
 |    to add the new worktree. This has been corrected. | 
 |    (merge bb69b3b009 es/worktree-avoid-duplication-fix later to maint). | 
 |  | 
 |  * "git push" should stop from updating a branch that is checked out | 
 |    when receive.denyCurrentBranch configuration is set, but it failed | 
 |    to pay attention to checkouts in secondary worktrees.  This has | 
 |    been corrected. | 
 |    (merge 4d864895a2 hv/receive-denycurrent-everywhere later to maint). | 
 |  | 
 |  * "git rebase BASE BRANCH" rebased/updated the tip of BRANCH and | 
 |    checked it out, even when the BRANCH is checked out in a different | 
 |    worktree.  This has been corrected. | 
 |    (merge b5cabb4a96 es/do-not-let-rebase-switch-to-protected-branch later to maint). | 
 |  | 
 |  * "git describe" in a repository with multiple root commits sometimes | 
 |    gave up looking for the best tag to describe a given commit with | 
 |    too early, which has been adjusted. | 
 |  | 
 |  * "git merge signed-tag" while lacking the public key started to say | 
 |    "No signature", which was utterly wrong.  This regression has been | 
 |    reverted. | 
 |  | 
 |  * MinGW's poll() emulation has been improved. | 
 |  | 
 |  * "git show" and others gave an object name in raw format in its | 
 |    error output, which has been corrected to give it in hex. | 
 |  | 
 |  * "git fetch" over HTTP walker protocol did not show any progress | 
 |    output.  We inherently do not know how much work remains, but still | 
 |    we can show something not to bore users. | 
 |    (merge 7655b4119d rs/show-progress-in-dumb-http-fetch later to maint). | 
 |  | 
 |  * Both "git ls-remote -h" and "git grep -h" give short usage help, | 
 |    like any other Git subcommand, but it is not unreasonable to expect | 
 |    that the former would behave the same as "git ls-remote --head" | 
 |    (there is no other sensible behaviour for the latter).  The | 
 |    documentation has been updated in an attempt to clarify this. | 
 |  | 
 |  * Other code cleanup, docfix, build fix, etc. | 
 |    (merge d0d0a357a1 am/update-pathspec-f-f-tests later to maint). | 
 |    (merge f94f7bd00d am/test-pathspec-f-f-error-cases later to maint). | 
 |    (merge c513a958b6 ss/t6025-modernize later to maint). | 
 |    (merge b441717256 dl/test-must-fail-fixes later to maint). | 
 |    (merge d031049da3 mt/sparse-checkout-doc-update later to maint). | 
 |    (merge 145136a95a jc/skip-prefix later to maint). | 
 |    (merge 5290d45134 jk/alloc-cleanups later to maint). | 
 |    (merge 7a9f8ca805 rs/parse-options-concat-dup later to maint). | 
 |    (merge 517b60564e rs/strbuf-insertstr later to maint). | 
 |    (merge f696a2b1c8 jk/mailinfo-cleanup later to maint). | 
 |    (merge de26f02db1 js/test-avoid-pipe later to maint). | 
 |    (merge a2dc43414c es/doc-mentoring later to maint). | 
 |    (merge 02bbbe9df9 es/worktree-cleanup later to maint). | 
 |    (merge 2ce6d075fa rs/micro-cleanups later to maint). | 
 |    (merge 27f182b3fc rs/blame-typefix-for-fingerprint later to maint). | 
 |    (merge 3c29e21eb0 ma/test-cleanup later to maint). | 
 |    (merge 240fc04f81 ag/rebase-remove-redundant-code later to maint). | 
 |    (merge d68ce906c7 rs/commit-graph-code-simplification later to maint). | 
 |    (merge a51d9e8f07 rj/t1050-use-test-path-is-file later to maint). | 
 |    (merge fd0bc17557 kk/complete-diff-color-moved later to maint). | 
 |    (merge 65bf820d0e en/test-cleanup later to maint). |