Autogenerated HTML docs for v2.49.0-391-g4bbb3
diff --git a/RelNotes/2.50.0.adoc b/RelNotes/2.50.0.adoc
index 38df46f..f13e646 100644
--- a/RelNotes/2.50.0.adoc
+++ b/RelNotes/2.50.0.adoc
@@ -48,6 +48,9 @@
  * "git cat-file --batch" and friends learned to allow "--filter=" to
    omit certain objects, just like the transport layer does.
 
+ * "git blame --porcelain" mode now talks about unblamable lines and
+   lines that are blamed to an ignored commit.
+
 
 Performance, Internal Implementation, Development Support etc.
 --------------------------------------------------------------
@@ -104,6 +107,9 @@
    have been rewritten help environment with NO_PERL test the build as
    much as possible.
 
+ * Remove remnants of the recursive merge strategy backend, which was
+   superseded by the ort merge strategy.
+
 
 Fixes since v2.49
 -----------------
@@ -182,6 +188,13 @@
  * Random build fixes.
    (merge 85e1d6819f ps/misc-build-fixes later to maint).
 
+ * "git fetch [<remote>]" with only the configured fetch refspec
+   should be the only thing to update refs/remotes/<remote>/HEAD,
+   but the code was overly eager to do so in other cases.
+
+ * Incorrect sorting of refs with bytes with high-bit set on platforms
+   with signed char led to a BUG, which has been corrected.
+
  * Other code cleanup, docfix, build fix, etc.
    (merge 227c4f33a0 ja/doc-block-delimiter-markup-fix later to maint).
    (merge 2bfd3b3685 ab/decorate-code-cleanup later to maint).
@@ -201,3 +214,4 @@
    (merge ee8edb7156 dk/vimdiff-doc-fix later to maint).
    (merge 107d889303 md/t1403-path-is-file later to maint).
    (merge abd4192b07 js/comma-semicolon-confusion later to maint).
+   (merge 27b7264206 ab/environment-clean-header later to maint).
diff --git a/blame-options.adoc b/blame-options.adoc
index aa77406..19ea187 100644
--- a/blame-options.adoc
+++ b/blame-options.adoc
@@ -125,7 +125,8 @@
 	another commit will be marked with a `?` in the blame output.  If the
 	`blame.markUnblamableLines` config option is set, then those lines touched
 	by an ignored commit that we could not attribute to another revision are
-	marked with a '*'.
+	marked with a '*'. In the porcelain modes, we print 'ignored' and
+	'unblamable' on a newline respectively.
 
 --ignore-revs-file <file>::
 	Ignore revisions listed in `file`, which must be in the same format as an
diff --git a/git-annotate.html b/git-annotate.html
index 21f8b28..061b553 100644
--- a/git-annotate.html
+++ b/git-annotate.html
@@ -665,7 +665,8 @@
 another commit will be marked with a ? in the blame output.  If the
 <code>blame.markUnblamableLines</code> config option is set, then those lines touched
 by an ignored commit that we could not attribute to another revision are
-marked with a <em>*</em>.</p>
+marked with a <em>*</em>. In the porcelain modes, we print <em>ignored</em> and
+<em>unblamable</em> on a newline respectively.</p>
 </dd>
 <dt class="hdlist1">--ignore-revs-file &lt;file&gt;</dt>
 <dd>
diff --git a/git-blame.adoc b/git-blame.adoc
index f75ed44..e438d28 100644
--- a/git-blame.adoc
+++ b/git-blame.adoc
@@ -135,10 +135,11 @@
 The porcelain format generally suppresses commit information that has
 already been seen. For example, two lines that are blamed to the same
 commit will both be shown, but the details for that commit will be shown
-only once. This is more efficient, but may require more state be kept by
-the reader. The `--line-porcelain` option can be used to output full
-commit information for each line, allowing simpler (but less efficient)
-usage like:
+only once. Information which is specific to individual lines will not be
+grouped together, like revs to be marked 'ignored' or 'unblamable'. This
+is more efficient, but may require more state be kept by the reader. The
+`--line-porcelain` option can be used to output full commit information
+for each line, allowing simpler (but less efficient) usage like:
 
 	# count the number of lines attributed to each author
 	git blame --line-porcelain file |
diff --git a/git-blame.html b/git-blame.html
index 9c3a003..69588a7 100644
--- a/git-blame.html
+++ b/git-blame.html
@@ -694,7 +694,8 @@
 another commit will be marked with a ? in the blame output.  If the
 <code>blame.markUnblamableLines</code> config option is set, then those lines touched
 by an ignored commit that we could not attribute to another revision are
-marked with a <em>*</em>.</p>
+marked with a <em>*</em>. In the porcelain modes, we print <em>ignored</em> and
+<em>unblamable</em> on a newline respectively.</p>
 </dd>
 <dt class="hdlist1">--ignore-revs-file &lt;file&gt;</dt>
 <dd>
@@ -854,10 +855,11 @@
 <p>The porcelain format generally suppresses commit information that has
 already been seen. For example, two lines that are blamed to the same
 commit will both be shown, but the details for that commit will be shown
-only once. This is more efficient, but may require more state be kept by
-the reader. The <code>--line-porcelain</code> option can be used to output full
-commit information for each line, allowing simpler (but less efficient)
-usage like:</p>
+only once. Information which is specific to individual lines will not be
+grouped together, like revs to be marked <em>ignored</em> or <em>unblamable</em>. This
+is more efficient, but may require more state be kept by the reader. The
+<code>--line-porcelain</code> option can be used to output full commit information
+for each line, allowing simpler (but less efficient) usage like:</p>
 </div>
 <div class="literalblock">
 <div class="content">
@@ -1097,7 +1099,7 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2025-02-14 21:38:14 -0800
+Last updated 2025-04-17 11:52:41 -0700
 </div>
 </div>
 </body>
diff --git a/git-config.html b/git-config.html
index 72094a4..73a2b44 100644
--- a/git-config.html
+++ b/git-config.html
@@ -8253,7 +8253,8 @@
 </dd>
 <dt class="hdlist1">remote.&lt;name&gt;.followRemoteHEAD</dt>
 <dd>
-<p>How <a href="git-fetch.html">git-fetch(1)</a> should handle updates to <code>remotes/</code><em>&lt;name&gt;</em><code>/HEAD</code>.
+<p>How <a href="git-fetch.html">git-fetch(1)</a> should handle updates to <code>remotes/</code><em>&lt;name&gt;</em><code>/HEAD</code>
+when fetching using the configured refspecs of a remote.
 The default value is "create", which will create <code>remotes/</code><em>&lt;name&gt;</em><code>/HEAD</code>
 if it exists on the remote, but not locally; this will not touch an
 already existing local reference. Setting it to "warn" will print
diff --git a/git-merge.html b/git-merge.html
index 0c3b97e..421e243 100644
--- a/git-merge.html
+++ b/git-merge.html
@@ -1267,6 +1267,23 @@
 configuration variable.
 See also <a href="git-diff.html">git-diff(1)</a> <code>--no-renames</code>.</p>
 </dd>
+<dt class="hdlist1">histogram</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=histogram</code>.</p>
+</dd>
+<dt class="hdlist1">patience</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
+</dd>
+<dt class="hdlist1">diff-algorithm=[histogram|minimal|myers|patience]</dt>
+<dd>
+<p>Use a different diff algorithm while merging, which can help
+avoid mismerges that occur due to unimportant matching lines
+(such as braces from distinct functions).  See also
+<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
+defaults to <code>diff-algorithm=histogram</code>, while regular diffs
+currently default to the <code>diff.algorithm</code> config setting.</p>
+</dd>
 <dt class="hdlist1">subtree[=&lt;path&gt;]</dt>
 <dd>
 <p>This option is a more advanced form of <em>subtree</em> strategy, where
@@ -1280,44 +1297,11 @@
 </dd>
 <dt class="hdlist1">recursive</dt>
 <dd>
-<p>This can only resolve two heads using a 3-way merge
-algorithm.  When there is more than one common
-ancestor that can be used for 3-way merge, it creates a
-merged tree of the common ancestors and uses that as
-the reference tree for the 3-way merge.  This has been
-reported to result in fewer merge conflicts without
-causing mismerges by tests done on actual merge commits
-taken from Linux 2.6 kernel development history.
-Additionally this can detect and handle merges involving
-renames.  It does not make use of detected copies.  This was
-the default strategy for resolving two heads from Git v0.99.9k
-until v2.33.0.</p>
-<div class="paragraph">
-<p>For a path that is a submodule, the same caution as <em>ort</em> applies to this
-strategy.</p>
-</div>
-<div class="paragraph">
-<p>The <em>recursive</em> strategy takes the same options as <em>ort</em>.  However,
-there are two additional options that <em>ort</em> ignores (not documented
-above) that are potentially useful with the <em>recursive</em> strategy:</p>
-</div>
-<div class="dlist">
-<dl>
-<dt class="hdlist1">patience</dt>
-<dd>
-<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
-</dd>
-<dt class="hdlist1">diff-algorithm=[patience|minimal|histogram|myers]</dt>
-<dd>
-<p>Use a different diff algorithm while merging, which can help
-avoid mismerges that occur due to unimportant matching lines
-(such as braces from distinct functions).  See also
-<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
-specifically uses <code>diff-algorithm=histogram</code>, while <code>recursive</code>
-defaults to the <code>diff.algorithm</code> config setting.</p>
-</dd>
-</dl>
-</div>
+<p>This is now a synonym for <code>ort</code>.  It was an alternative
+implementation until v2.49.0, but was redirected to mean <code>ort</code>
+in v2.50.0.  The previous recursive strategy was the default
+strategy for resolving two heads from Git v0.99.9k until
+v2.33.0.</p>
 </dd>
 <dt class="hdlist1">resolve</dt>
 <dd>
@@ -1341,7 +1325,7 @@
 ignoring all changes from all other branches.  It is meant to
 be used to supersede old development history of side
 branches.  Note that this is different from the -Xours option to
-the <em>recursive</em> merge strategy.</p>
+the <em>ort</em> merge strategy.</p>
 </dd>
 <dt class="hdlist1">subtree</dt>
 <dd>
@@ -1718,7 +1702,7 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2025-02-15 14:38:14 +0900
+Last updated 2025-02-14 21:38:14 -0800
 </div>
 </div>
 </body>
diff --git a/git-pull.html b/git-pull.html
index c26d5c3..fc1386d 100644
--- a/git-pull.html
+++ b/git-pull.html
@@ -1598,6 +1598,23 @@
 configuration variable.
 See also <a href="git-diff.html">git-diff(1)</a> <code>--no-renames</code>.</p>
 </dd>
+<dt class="hdlist1">histogram</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=histogram</code>.</p>
+</dd>
+<dt class="hdlist1">patience</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
+</dd>
+<dt class="hdlist1">diff-algorithm=[histogram|minimal|myers|patience]</dt>
+<dd>
+<p>Use a different diff algorithm while merging, which can help
+avoid mismerges that occur due to unimportant matching lines
+(such as braces from distinct functions).  See also
+<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
+defaults to <code>diff-algorithm=histogram</code>, while regular diffs
+currently default to the <code>diff.algorithm</code> config setting.</p>
+</dd>
 <dt class="hdlist1">subtree[=&lt;path&gt;]</dt>
 <dd>
 <p>This option is a more advanced form of <em>subtree</em> strategy, where
@@ -1611,44 +1628,11 @@
 </dd>
 <dt class="hdlist1">recursive</dt>
 <dd>
-<p>This can only resolve two heads using a 3-way merge
-algorithm.  When there is more than one common
-ancestor that can be used for 3-way merge, it creates a
-merged tree of the common ancestors and uses that as
-the reference tree for the 3-way merge.  This has been
-reported to result in fewer merge conflicts without
-causing mismerges by tests done on actual merge commits
-taken from Linux 2.6 kernel development history.
-Additionally this can detect and handle merges involving
-renames.  It does not make use of detected copies.  This was
-the default strategy for resolving two heads from Git v0.99.9k
-until v2.33.0.</p>
-<div class="paragraph">
-<p>For a path that is a submodule, the same caution as <em>ort</em> applies to this
-strategy.</p>
-</div>
-<div class="paragraph">
-<p>The <em>recursive</em> strategy takes the same options as <em>ort</em>.  However,
-there are two additional options that <em>ort</em> ignores (not documented
-above) that are potentially useful with the <em>recursive</em> strategy:</p>
-</div>
-<div class="dlist">
-<dl>
-<dt class="hdlist1">patience</dt>
-<dd>
-<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
-</dd>
-<dt class="hdlist1">diff-algorithm=[patience|minimal|histogram|myers]</dt>
-<dd>
-<p>Use a different diff algorithm while merging, which can help
-avoid mismerges that occur due to unimportant matching lines
-(such as braces from distinct functions).  See also
-<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
-specifically uses <code>diff-algorithm=histogram</code>, while <code>recursive</code>
-defaults to the <code>diff.algorithm</code> config setting.</p>
-</dd>
-</dl>
-</div>
+<p>This is now a synonym for <code>ort</code>.  It was an alternative
+implementation until v2.49.0, but was redirected to mean <code>ort</code>
+in v2.50.0.  The previous recursive strategy was the default
+strategy for resolving two heads from Git v0.99.9k until
+v2.33.0.</p>
 </dd>
 <dt class="hdlist1">resolve</dt>
 <dd>
@@ -1672,7 +1656,7 @@
 ignoring all changes from all other branches.  It is meant to
 be used to supersede old development history of side
 branches.  Note that this is different from the -Xours option to
-the <em>recursive</em> merge strategy.</p>
+the <em>ort</em> merge strategy.</p>
 </dd>
 <dt class="hdlist1">subtree</dt>
 <dd>
@@ -1887,7 +1871,7 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2025-02-15 14:38:14 +0900
+Last updated 2025-02-14 21:38:14 -0800
 </div>
 </div>
 </body>
diff --git a/git-rebase.html b/git-rebase.html
index 948e02f..eb75b1a 100644
--- a/git-rebase.html
+++ b/git-rebase.html
@@ -1655,6 +1655,23 @@
 configuration variable.
 See also <a href="git-diff.html">git-diff(1)</a> <code>--no-renames</code>.</p>
 </dd>
+<dt class="hdlist1">histogram</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=histogram</code>.</p>
+</dd>
+<dt class="hdlist1">patience</dt>
+<dd>
+<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
+</dd>
+<dt class="hdlist1">diff-algorithm=[histogram|minimal|myers|patience]</dt>
+<dd>
+<p>Use a different diff algorithm while merging, which can help
+avoid mismerges that occur due to unimportant matching lines
+(such as braces from distinct functions).  See also
+<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
+defaults to <code>diff-algorithm=histogram</code>, while regular diffs
+currently default to the <code>diff.algorithm</code> config setting.</p>
+</dd>
 <dt class="hdlist1">subtree[=&lt;path&gt;]</dt>
 <dd>
 <p>This option is a more advanced form of <em>subtree</em> strategy, where
@@ -1668,44 +1685,11 @@
 </dd>
 <dt class="hdlist1">recursive</dt>
 <dd>
-<p>This can only resolve two heads using a 3-way merge
-algorithm.  When there is more than one common
-ancestor that can be used for 3-way merge, it creates a
-merged tree of the common ancestors and uses that as
-the reference tree for the 3-way merge.  This has been
-reported to result in fewer merge conflicts without
-causing mismerges by tests done on actual merge commits
-taken from Linux 2.6 kernel development history.
-Additionally this can detect and handle merges involving
-renames.  It does not make use of detected copies.  This was
-the default strategy for resolving two heads from Git v0.99.9k
-until v2.33.0.</p>
-<div class="paragraph">
-<p>For a path that is a submodule, the same caution as <em>ort</em> applies to this
-strategy.</p>
-</div>
-<div class="paragraph">
-<p>The <em>recursive</em> strategy takes the same options as <em>ort</em>.  However,
-there are two additional options that <em>ort</em> ignores (not documented
-above) that are potentially useful with the <em>recursive</em> strategy:</p>
-</div>
-<div class="dlist">
-<dl>
-<dt class="hdlist1">patience</dt>
-<dd>
-<p>Deprecated synonym for <code>diff-algorithm=patience</code>.</p>
-</dd>
-<dt class="hdlist1">diff-algorithm=[patience|minimal|histogram|myers]</dt>
-<dd>
-<p>Use a different diff algorithm while merging, which can help
-avoid mismerges that occur due to unimportant matching lines
-(such as braces from distinct functions).  See also
-<a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.  Note that <code>ort</code>
-specifically uses <code>diff-algorithm=histogram</code>, while <code>recursive</code>
-defaults to the <code>diff.algorithm</code> config setting.</p>
-</dd>
-</dl>
-</div>
+<p>This is now a synonym for <code>ort</code>.  It was an alternative
+implementation until v2.49.0, but was redirected to mean <code>ort</code>
+in v2.50.0.  The previous recursive strategy was the default
+strategy for resolving two heads from Git v0.99.9k until
+v2.33.0.</p>
 </dd>
 <dt class="hdlist1">resolve</dt>
 <dd>
@@ -1729,7 +1713,7 @@
 ignoring all changes from all other branches.  It is meant to
 be used to supersede old development history of side
 branches.  Note that this is different from the -Xours option to
-the <em>recursive</em> merge strategy.</p>
+the <em>ort</em> merge strategy.</p>
 </dd>
 <dt class="hdlist1">subtree</dt>
 <dd>
@@ -2496,7 +2480,7 @@
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2025-03-26 16:41:02 +0900
+Last updated 2025-03-26 00:41:02 -0700
 </div>
 </div>
 </body>
diff --git a/merge-strategies.adoc b/merge-strategies.adoc
index 59f5ae3..9e034f4 100644
--- a/merge-strategies.adoc
+++ b/merge-strategies.adoc
@@ -87,6 +87,20 @@
 	configuration variable.
 	See also linkgit:git-diff[1] `--no-renames`.
 
+histogram;;
+	Deprecated synonym for `diff-algorithm=histogram`.
+
+patience;;
+	Deprecated synonym for `diff-algorithm=patience`.
+
+diff-algorithm=[histogram|minimal|myers|patience];;
+	Use a different diff algorithm while merging, which can help
+	avoid mismerges that occur due to unimportant matching lines
+	(such as braces from distinct functions).  See also
+	linkgit:git-diff[1] `--diff-algorithm`.  Note that `ort`
+	defaults to `diff-algorithm=histogram`, while regular diffs
+	currently default to the `diff.algorithm` config setting.
+
 subtree[=<path>];;
 	This option is a more advanced form of 'subtree' strategy, where
 	the strategy makes a guess on how two trees must be shifted to
@@ -95,36 +109,11 @@
 	two trees to match.
 
 recursive::
-	This can only resolve two heads using a 3-way merge
-	algorithm.  When there is more than one common
-	ancestor that can be used for 3-way merge, it creates a
-	merged tree of the common ancestors and uses that as
-	the reference tree for the 3-way merge.  This has been
-	reported to result in fewer merge conflicts without
-	causing mismerges by tests done on actual merge commits
-	taken from Linux 2.6 kernel development history.
-	Additionally this can detect and handle merges involving
-	renames.  It does not make use of detected copies.  This was
-	the default strategy for resolving two heads from Git v0.99.9k
-	until v2.33.0.
-+
-For a path that is a submodule, the same caution as 'ort' applies to this
-strategy.
-+
-The 'recursive' strategy takes the same options as 'ort'.  However,
-there are two additional options that 'ort' ignores (not documented
-above) that are potentially useful with the 'recursive' strategy:
-
-patience;;
-	Deprecated synonym for `diff-algorithm=patience`.
-
-diff-algorithm=[patience|minimal|histogram|myers];;
-	Use a different diff algorithm while merging, which can help
-	avoid mismerges that occur due to unimportant matching lines
-	(such as braces from distinct functions).  See also
-	linkgit:git-diff[1] `--diff-algorithm`.  Note that `ort`
-	specifically uses `diff-algorithm=histogram`, while `recursive`
-	defaults to the `diff.algorithm` config setting.
+	This is now a synonym for `ort`.  It was an alternative
+	implementation until v2.49.0, but was redirected to mean `ort`
+	in v2.50.0.  The previous recursive strategy was the default
+	strategy for resolving two heads from Git v0.99.9k until
+	v2.33.0.
 
 resolve::
 	This can only resolve two heads (i.e. the current branch
@@ -145,7 +134,7 @@
 	ignoring all changes from all other branches.  It is meant to
 	be used to supersede old development history of side
 	branches.  Note that this is different from the -Xours option to
-	the 'recursive' merge strategy.
+	the 'ort' merge strategy.
 
 subtree::
 	This is a modified `ort` strategy. When merging trees A and
diff --git a/technical/sparse-checkout.adoc b/technical/sparse-checkout.adoc
index d968659..dc2e763 100644
--- a/technical/sparse-checkout.adoc
+++ b/technical/sparse-checkout.adoc
@@ -356,8 +356,6 @@
     The behavior for these commands somewhat depends upon the merge
     strategy being used:
       * `ort` behaves as described above
-      * `recursive` tries to not vivify files unnecessarily, but does sometimes
-	vivify files without conflicts.
       * `octopus` and `resolve` will always vivify any file changed in the merge
 	relative to the first parent, which is rather suboptimal.