# -*- mode: org -*-
* v4.7.0    2026-08-01

- If the region marks a single commit, ~magit-patch-create~ now creates
  a patch for that, instead of prompting.  Previously that was only
  done if multiple commit were marked.  #4734

- When reading a value for ~git diff~'s ~--find-renames~ or ~--find-copies~
  argument, the similarity index can now be specified as a percentage
  or as a fraction.  The input now has to exactly match the value, as
  used by Git; e.g., "20%" or "05".  The latter is interpreted as the
  fraction 0.05.  #4708

- Added optional DIRECTORY argument to ~magit-status-quick~, intended
  for use in third-party repository switchers.  #4636

- Added new command ~magit-log-reflog~, which shows the log for all
  objects mentioned in all reflogs.  #4748

- When ~gpg.format~ specifies a format other than openpgp, the menu
  argument ~--gpg-sign~ now acts as a boolean toggle.  Previously it
  always wanted to read an openpgp key, making it impossible to
  toggle ssh or x509 signing from the menu.  The used format is now
  shown in the menu.  #5046

- Added ~--reject~ to ~magit-am~ menu.  #5148

- Added Git v2.55's new ~--graph-lane-limit~ to log menus.  It is hidden
  by default and not available when using an older Git.  #5088

- ~magit-file-untrack~, ~magit-file-rename~, ~magit-file-delete~ and
  ~magit-do-async-shell-command~ can now act on directories.  #5247

- ~magit-process-kill~ now first tries to interrupt the process.
  If that fails, a second invocation instead kills it.  #5086

- Added help text for the ~Filter!~ status section.  #5121

- By default, submodules with untracked content are now also listed
  in the status of the super-repository.  #5448

- Added ~--redit-message~ to the ~magit-commit~ menu.  That argument and
  ~--reuse-message~ now usually default to the commit at point, but when
  invoked with a prefix argument, the user can instead select the
  commit from a log.  #5602

- Added new option ~magit-submodule-list-predicate~ and taught
  ~magit-submodule-list~ to support unpopulated modules.  #5077

- When ~magit-bisect-start~ and ~magit-bisect-run~ are invoked with the
  region marking a range of consecutive commit, the commits at the
  ends are used as the good and bad commits.  #5049

- ~magit-branch-checkout~ now always passes the commit, which is to be
  checked out, to the function used to read the worktree directory
  from the user.  Previously this was only done for local branches.
  #5502

- Added new command ~magit-checkout-remote-ref~.  #5410

- ~magit-project-status~ is no longer added to ~project-switch-commands~.
  See the command's docstring to learn how to add it yourself.

- Added new command ~magit-project-dispatch~.  #5163

- Added new option ~magit-revision-use-dedicated-buffers~.  #5330, #5248

- Added new function ~magit-insert-nested-repositories~.  #5336

- With a prefix argument ~magit-diff-buffer-file~ now only shows
  unstaged changes.  #5013

- Added new command ~magit-copy-diff-as-kill~.  #5595

- Added new command ~magit-parent-status~.  #5022

- If upstream itself is not reachable, ~magit-commit-absorb~ and
  ~magit-commit-autofixup~ now conveniently place the cursor on the
  merge-base of that and HEAD, instead of on HEAD.  #5579

- Added new command ~magit-pull-into-upstream~.  #4943

- Improved order of choices when reading the starting-point for a
  new branch.  #5243

- Added new command ~magit-show-commit-removing-file~.  #5562

- Added support for bookmarking blob-visiting buffers.  #4854

- Added ~--push-option~ to ~magit-push~ menu.  It is hidden by default.
  Also added new variable ~magit-push-options~, which controls the
  push options offered when setting the argument.  #5478

- The ~--rebase~ argument now takes a value and all valid values for
  the of ~branch.<name>.rebase~ and ~pull.rebase~ Git variables are now
  supported.  #5224

- Added ~--merges~ to ~magit-log~ and ~magit-log-refresh~ menus.  #5299

Bugfixes:

- ~magit-ignore-submodules-p~ didn't return ~nil~ for ~none~.

- Fixed regressions in ~magit-ediff-resolve-rest~.  #5603

- ~magit-bisect-start~ and ~magit-bisect-run~ insisted on the good commit
  being an ancestor of the bad, but ~git bisect~ only requires a merge-
  base.  #5238

- The refresh cache contained outdated values during recursive edits.
  #5607

- The blob cache was only pruned once per session.  #5610

- Staging a repository no longer offered to add it as a submodule,
  instead silently doing nothing.  #5609

- ~magit-list-worktrees~ did not always report annotations correctly.

- ~magit-worktree-delete~ did not abort early for locked worktrees.

* v4.6.0    2026-07-01

The primary focus of this release are blob-visiting buffers.  For
now the hope is that most users will find working with such buffers
slightly more pleasant, without necessarily becoming aware that
anything changed.  The goal was to pay off technical debt and to
prepare for future changes.

- Visiting blobs now always involves ~magit-find-file-noselect~, even
  when an existing buffer may be involved.  The behavior of this
  function is getting closer to that of ~find-file-noselect~.

- Implemented support for visiting blobs for the benefit of features
  such as syntax-highlighting, as opposed to the user visiting it
  explicitly.  Such "volatile" blob buffers are hidden and are cached
  for a while, in case they are needed again.  If the user visits a
  hidden cached blob, the buffer is renamed to reveal it, and it is
  no longer subject to garbage collection.

- Blobs can now alternatively be visited with nothing but a blob
  object id (instead of a revision and a path).

- Blob-visiting buffers can now be reverted with ~g~, which is useful
  when the buffer is visited via, e.g., a branch, as opposed to a
  revision or blob object id.  The buffer is not needlessly refreshed,
  if the blob oid does not change.  dd48491659, f55bfaf792, cf84935a74

- Syntax highlighting can now be enabled for diffs.  This is disabled
  by default, because the work is still being performed synchronously,
  which leads to noticeable delays for large diffs and can be sluggish
  even for smaller diffs.  #2942, c7b0342dc7

  A future release is going to add support for asynchronous diff
  syntax highlighting.  (The blob buffer cache added in this release
  does help, but is not enough.)

  Configure ~magit-diff-fontify-hunk~ to try out this feature now, but
  please just disable it again, if it turns out to still be too slow
  for your taste.  If you enable this, you should also customize the
  new option ~magit-diff-specify-hunk-foreground~ and possibly the new
  option ~magit-diff-use-indicator-faces~ as well.

- Added new hook ~magit-find-blob-hook~, which replaces the old hooks
  ~magit-find-file-hook~ and ~magit-find-index-hook~.  The new hook is
  run when first visiting a blob as the old hooks used to do, but
  also when reverting a blob buffer.  fc29202838, 999047889c

- ~magit-find-file-noselect~ now pivots to the worktree file when
  asked to visit the index blob, but that has multiple stages,
  due to an unresolved conflict.  This likely will be revisited.
  a2165a0ba7

- Added support for compiling a list of definitions that are modified
  in a diff, and for inserting such lists when authoring commit
  messages.  The new commands ~git-commit-insert-changelog-gnu~ and
  ~git-commit-insert-changelog-plain~ insert such list and can be
  invoked from the same menu (on ~C-c C-i~), which is used to insert
  commit trailers.  #2931, 863f1aa6fe, 46b7f76df3

- Improved support for jumping to the same location in another blob,
  from a buffer visiting a blob or file.  87090491d4

- Reworked ~magit-buffer-*~ variables.  Many were renamed (but the old
  names are still available as obsolete aliases).  Others that were
  previously shared by multiple modes were replaced with mode-specific
  variants.  298218fa85~..7bfc458065

- When authoring commit messages, ~complete-symbol~ now completes
  against modified definitions and symbols appearing in modified
  lines.  2366db4b3b

- Thanks to the improvements to ~magit-find-file-noselect~ and the blob
  buffer cache, Ediff support could be simplified considerably.

- If it is part of an Ediff session, quitting a blob-visiting buffer
  would corrupt that session, so teach ~magit-bury-or-kill-buffer~ and
  ~magit-bury-buffer~ to instead offer to completely quit the session.
  29c6241993

- Commands that currently cannot be used are now explicitly disabled
  in the ediff menu.  3125b51ede

- Provided ~magit-delete-by-moving-to-trash~ is ~nil~,
  ~magit-worktree-delete~ is faster now.  #5504

- Taught ~magit-insert-worktrees~ to emphasize the current worktree
  even if no branch is checked out.  fbc4b5d316

- ~magit-git-string~ now returns ~nil~ if the exit status is non-zero.
  Previously it tended to return the empty string instead, making
  it harder for callers to detect and handle errors.  c85358f5b0

- When listing repositories ~uniquify-separator~ is now respected.
  #5514

- ~magit-diff-toggle-refine-hunk~ now favors immediate refinement mode
  over the incremental variant.  550ec1cb1f

- Added new command ~magit-remote.<remote>.followremotehead~.  #5283

- Improved gitignore commands and menu.  1c0efafc4b~..28878dd879

- Added new option ~magit-branch-name-suggestions~.

- Added new hook ~magit-mouse-set-point-hook~.  ~magit-mouse-set-point~
  now runs this hook instead of ~magit-section-movement-hook~.  Except
  for ~magit-hunk-set-window-start~, the new hook features the same
  functions as the old.  #5572

- The new Git variables ~hook.NAME.event~ and ~hook.NAME.command~ are now
  used to call Elisp hooks from Git hooks.

  After waiting for such functionality for two decades, I came to the
  conclusion that this will never be implemented, and finally added a
  noisy kludge to get the same functionality anyway, in the previous
  release.  Of course, just one release later, Git added the missing
  functionality.  We now use Git's variables, which means that Elisp
  hooks can now only be called from Git hooks when using Git v2.54.0
  or greater.  72d95d60d

- Option ~magit-wip-merge-branch~ is now a boolean, i.e., Git hook
  support is used if available, otherwise the merge commit is delayed.
  ee1175c14

- Added new functions ~magit-annotated-tag-p~ and ~magit-lightweight-tag~.
  ~magit-tag-p~ no longer returns ~nil~ for lightweight tags.  200583115

Bugfixes:

- Deleting all stashes proceeded without requiring confirmation.
  #5500

- When the status buffer is refreshed in the background, point was
  reset to its beginning.  9d7e06dd8c

- ~magit-find-file-noselect~ assumed the file is located in the current
  repository.  c7b70171ba

- ~magit-worktree-delete~ did not ask for confirmation if there are
  untracked files, which would be lost.  7887f80213

- ~magit-wip-mode~ was added to ~git-commit-post-finish-hook~, even if
  it ended up as a no-op, which could result in a timeout warning,
  which in this case would be meaningless.  24e97fcdfe

- ~make clean~ failed to remove ~magit-autoloads.el~.  dd6363369f

- ~make emacs-Q~ was broken.  #5517

- Before the initial commit, use of ~magit-wip-mode~ could result in
  bogus errors.  8783759256

- Amending the initial commit resulted in an error.  #5524

- Errors that occur while preparing a commit diff are now demoted
  or suppressed, allowing the commit process to proceed.
  90561a2e85, #5526

- Merge commands can now create octopus merges.  #5523

- Commands that usually cycle through values displayed in the
  transient menu can also use completion to set the new value
  (by using a prefix argument).  The completion candidates
  displayed in that case have been improved.  60e04662be, 7ecc3d3890

- It wasn't possible to reverse the sole hunk adding a file.  #5521

- The value displayed for transient suffixes that represent Git
  variables could be wrong if the global value is used as fallback.
  8d891f7c41

- The value displayed for transient suffixes that represent boolean
  Git variables was wrong if the variable is unset.  aa625ec04c

- A new feature in Emacs 31 caused a misleading hint to be added to
  the prompt used when reading a range.  f44c6424ce

- A remote branch could not be deleted, if a tag with a matching name
  exists.  #5368

- If ~magit-git-debug~ is enabled and an error occurs,
  ~magit--git-insert~, and thus ~magit-git-insert~, always returned the
  error message, which most callers were not prepared to handle,
  making debugging harder, not easier.  Now these functions return
  ~nil~, like when debugging is disable.  71047f4d45

- A secondary Git index is used when creating wip commit, but despite
  that, if the primary index is locked, that failed.  The primary
  index can be locked at surprising times (e.g., while the user is
  writing a commit message).  If the creation of a wip commit results
  in an error, that previously was not demoted, preventing explicit
  user actions from completing.  315d85c765

- On Windows compiling Magit failed if Git isn't installed.  #5548

- Added a kludge to make it possible to read a module using Helm.
  #5546

- ~magit-list-files~ and other functions that list files no longer
  limit to files in ~default-directory~.  All callers needed that,
  but had to switch to the top-level before calling such functions,
  and some callers failed to do so.  c29f7eb3e4

- ~magit-untracked-files~ used ~git ls-files~, which is unreliable when
  it comes to this particular file set, instead of the reliable ~git
  status --porcelain~.  073b01e834

- Magit did not verify that a recent enough Transient version is in
  use.  569b9656d

- Before v2.54 ~git log~ ignored ~--no-prefix~ when used together with ~-L~.
  Drop our workaround, for releases that don't need it, where it would
  backfire.

- Finished fixing a bug in ~magit-section-cycle-diffs~.  #5319

- Added a kludge that prevents an error when reading a branch name
  when using Ivy.  #5581

- Fixed using a function provided by Forge to determine the branch
  at point when there is a pull-request at point.  f302af25b

- Committing failed inside a secondary worktree that specifies the
  path to the Git directory using a relative path.  #5582

- Fixed false-negatives in reference predicates.  "heads/<name>" and
  "remotes/<remote>/<branch>" are now recognized if appropriate.
  #5583

- Trailers, revision descriptions and changelogs were often inserted
  in inappropriate locations and/or without appropriate whitespace.
  627fce85c

- ~magit-branch-rename~ sometimes failed to offer to rename the branch
  on the remote as well.  #5588

- A pasto in ~magit-delete-shelved-branch~'s prompt implied that it
  carried out a non-destructive action.  e35d646c2

- Fixed a bug in suffix commands that deal with Git booleans.  #5594

- ~magit-branch-rename~ now offers to rename the branch on the push
  remote if ~branch.OLDNAME.pushRemote~ is set (as it already did if
  that was specified using ~remote.pushDefault~).  #5596

- Diffstats were not washed when ~--color-moved~ is used.  #5598

* v4.5.0    2026-01-01

- Removed support for loading Magit extensions from ".git/config".
  Please [[https://github.com/magit/magit/commit/d662ec107e74a05a0348ca75c89ebd127d658656][use ~.dir-locals.el~ instead]].  d662ec107e

- Reworked how the global ~magit-auto-revert-mode~ is, or is not,
  enabled at startup.  Enabling ~global-auto-revert-mode~ now disables
  this mode.  38a916f555..de766d2968 et al.

- Simplified ~magit-wip-mode~.  This involves removing all other wip
  modes (which allowed using only a subset of the protection offered
  by ~magit-wip-mode~) and using the new ~magit-before-change-functions~
  and ~magit-after-apply-functions~ hooks.  98ef107037..fa629ad5b5

- Added experimental support for calling Lisp hooks from Git hooks,
  and added a few such hooks: ~magit-common-git-post-commit-functions~,
  ~magit-git-post-commit-functions~, ~magit-git-post-merge-functions~
  and ~magit-git-post-rewrite-functions~.

- Replaced option ~magit-section-visibility-indicator~ (singular) with
  new option ~magit-section-visibility-indicators~ (plurarl) to better
  support emacs sessions that have both terminal and gui frames.
  2d8f43e681

- ~mouse-set-point~ is now remapped to Magit's variant.  fa5906621a

- ~magit-autoloads~ is now loaded exactly once.  3d1a008f18

- Fixed custom type of ~magit-blame-styles~.  84c5c8c8c6

- Fixes regression in ~magit-rebase-autosquash~.  It no longer excluded
  the merge-base.  54e460a701

- A few hook functions were not autoloaded.  #5464

- Some refinements were calculated for the diff in the commit
  message buffer, despite not actually being displayed.  #5483

- Commands for showing logs for wip branches were no longer displayed
  in the log menu, despite ~magit-wip-mode~ being enabled.  #5488

- Added new option ~magit-wip-debug~.  655bc502a3

- Various build improvements.

* v4.4.2    2025-10-06

- Addressed harmless compiler warning.

* v4.4.1    2025-10-06

- Added new option ~magit-log-trailer-labels~.  #5432

- Added new command ~magit-delete-shelved-branch~.  31c0ae17d3

- Added new variable ~magit-save-repository-buffers-predicate~.  #5450

- Fixed saving the value of the menus ~magit-diff~, ~magit-log~,
  ~magit-diff-refresh~ and ~magit-log-refresh~.  c7ba53b4b4

- A form from the ~cond-let~ library made it into the autoloads file,
  where that library isn't being loaded.  #5451

- ~magit-revert-rev-file-buffer~ did not respect a value of ~nil~ for
  ~enable-local-variables~.  5eb31a419a

- Improved commands for jumping to specific sections in revision
  buffers.  #5442

- Improved consistency of scroll command bindings.  #5453

- It is possible again to exit ~magit-completing-read-multiple~ with
  no input if REQUIRE-MATCH is ~t~.  b5066e5fa4

- Diffs that appear in logs could not be parsed in some edge cases.
  #5454

* v4.4.0    2025-09-09

- At least Emacs 28.1 is required now.  Emacs 30.1 was released
  earlier this year, so Emacs "oldoldstable" is still supported.

- Code for tracking a position within a file across versions and
  diffs, and the commands that build on that to allow jumping to
  the same location in another version or diff, are undergoing
  heavy refactoring and improvements.  This is paying off technical
  dept and prepares for upcoming user-level improvements as well
  as for new features.  Some changes in behavior already appear in
  this release, as described below.

- For staged and unstaged changes, ~magit-diff-visit-file~ (~RET~) now
  always visits the blob actually corresponding to the line at point,
  as it already did for committed changes.  Previously it failed to
  visit the index blob from an unstaged removed line when that file
  has staged changes; and it failed to visit the index blob from a
  staged added line.

  Visiting the file in the worktree is very useful, but, instead of
  ~RET~, I recommend using ~C-<return>~ (~magit-diff-visit-worktree-file~).
  The new option ~magit-diff-visit-prefer-worktree~ allows restoring
  the old behavior.  See [[https://docs.magit.vc/magit/Visiting-Files-and-Blobs-from-a-Diff.html][Visiting Files and Blobs from a Diff]].

- "Blob navigation" is now aware of index blobs.  It is possible to
  navigate between such blobs, and the HEAD blob or the file on disk,
  using the same key bindings used to time travel from one committed
  blob to another.  See [[https://docs.magit.vc/magit/Minor-Mode-for-Buffers-Visiting-Blobs.html][Minor Mode for Buffers Visiting Blobs]] and
  [[https://docs.magit.vc/magit/Commands-for-Buffers-Visiting-Files.html][Commands for Buffers Visiting Files]].

- When quitting a blob-visiting buffer with ~q~, it is no longer
  killed, iff it is being displayed in an additional window.  The
  behavior can be changed by binding ~q~ in ~magit-blob-mode-map~ to
  one of the commands ~magit-bury-or-kill-buffer~, ~magit-bury-buffer~,
  or ~magit-kill-this-buffer~.  The former two are new commands.
  731642756f

- ~magit-status-here~ now places the cursor within the diff of unstaged
  changes, if the current line in a file-visiting buffer has unstaged
  changes.  If it does not, then it falls back to going to the
  corresponding staged change.  #4814

- Even though ~auto-revert-mode~ is enabled, if that has not yet kicked
  in and the user visits a file that needs reverting, they used to be
  asked to confirm the revert.  efaf91d8af

- ~magit-completing-read~ and ~magit-completing-read-multiple~ can now
  require non-empty input.  If REQUIRE-MATCH is ~any~, then the user
  can exit with input that does not appear in the collection, but
  is not allowed to exit with zero input.  #5422

- ~magit-completing-read-multiple~ now adds the default choice to the
  set of valid choices.  7167f70665

- ~magit-read-branch-or-commit~ can now exclude more than one possible
  choice from the set of valid choices.  10c366ed52

- Improved minibuffer input for worktree commands, including adding
  new option ~magit-read-worktree-directory-function~.

- Section visibility indicators can now be displayed in the left
  margin.  #5424

- References in the ~refs/pullreqs~ namespace are no longer offered
  as completion candidates.  87ddd8f7c4

- Improved font-lock in ~git-rebase-mode~.  3857b8bce9..9654f5e094

- Added new face ~magit-diff-conflict-heading-highlight~.  2e76ec9337

- Added new command ~magit-revision-jump~, a menu for use in
  ~magit-revision-mode~, bound to ~j~.  acf71f7eb4

- ~magit-dired-jump~ now supports ~magit-repolist-mode~.  8c4a903886

- Fixed a regression ~magit--refresh-buffer-set-positions~, added in
  v4.3.7, which messed up the window-start.  406a3094a8

- ~magit-setup-buffer~ and ~magit-refresh-buffer~ take two new keyword
  arguments INITIAL-SECTION and SELECT-SECTION.  Two arguments of
  ~magit-setup-buffer-internal~ are now keyword arguments.
  ced0984540, c4def6d99a

- All text inserted into Magit buffers that previously used ~face~
  now use ~font-lock-face~ and ~magit-section-mode~ can therefore set
  ~font-lock-defaults~.  Previously if some third-party packages used
  ~font-lock-add-keywords~, some of Magit's own fontification would
  be lost.  Third-party packages that use ~magit-section-mode~, might
  need to be adjusted accordingly.  7de0f1335f,  b4768acb1f

- Daring to use my new Cond-Let package and other shorthands.
  08dafc1732..1c48327a06, b377adb68c

* v4.3.8    2025-07-05

Bugfixes:

- In v4.3.7 we started to restore the display-start positions of the
  windows displaying a buffer that is being refreshed, but in log
  buffers that is undesirable.  After creating a new commit we want
  that to immediately be displayed at the top of windows displaying
  log buffers.  #5403

- Refreshing was skipped after discarding all untracked files.

- When sub-directories contain ".gitignore" files, then invoking
  ~magit-discard~ on the "Untracked files" section did not necessarily
  remove the same set of files as listed in that section.  (At least
  it did show the files, which would be removed, in the confirmation
  prompt.)  #5405

* v4.3.7    2025-07-01

- Refreshing a buffer causes its content to be recreated, which can
  result in scrolling.  Now we attempt to restore the display-start
  positions of the windows displaying the buffer.  #5403

- When running ~git~ for side-effects and that signals an error, we
  did not augment the error message to inform the user that the full
  output can be found in the process buffer.  When the error is not
  signaled, we did already append that hint to the message.  Also
  added a new option, ~magit-show-process-buffer-hint~, for people who
  are already aware of the process buffer and would like to avoid
  the noisy reminder.  #5396

Bugfixes:

- Some instructions inserted into rebase sequence buffers were not
  prefixed with ~comment-start~, instead # was used unconditionally.
  #5388

- Fixed a regression in v4.3.6, which caused a conflict between the
  overlays used for section highlighting and section selection, if
  both of these faces relied on the same face property (likely the
  foreground color).  #5389

- Hunks could remain painted as selected when navigating away.  #5393

- The log arguments "--grep" and "--graph" are no longer mutually
  exclusive, but we still dropped the latter when the former was
  used.  #5391

- ~magit-save-repository-buffers~ errored on older Emacs releases,
  if the value of the variable by the same name is ~ask~.  #5399

- ~magit-after-save-refresh-status~ did not honor ~magit-inhibit-refresh~.
  d9d2f6c312

* v4.3.6    2025-06-01

- Generalized and heavily refactored the code, previously used only to
  highlight diff-related sections and to paint hunks, so that it can
  be used for other sections as well.  The new implementation should
  also be a bit faster.  cfe4faaaf6^..c556fee1bd

- A single-section selection now requires a non-empty region.
  6c4c16942a

- When creating a stash, "On <branch>: " is now offered as a second
  future history element.  75c6191999, 9b81df36b4

- Added new commands ~git-rebase-drop~, ~git-rebase-alter~ and
  ~git-rebase-squish~.  479c467080, 9674c4755a

Bugfixes:

- Fixed issues concerning date handling in log margins.  #5373

- The list of rebase actions in the status buffer could contain
  invalid elements derived from comments in Git's list of such
  actions.  91806dc729

- Applying the region used to fail, if some part of the same hunk but
  outside the region has conflicts, even if the part in the region did
  not.  9e551d9eb7

* v4.3.5    2025-05-14

Bugfixes:

- Fixed a v4.3.3 regression in inserting rebase actions into the
  status buffer when stopping at the last commit.  #5365

* v4.3.4    2025-05-13

- Arguments, that are normally set by cycling through the possible
  values displayed in the menu, can now also be set using completion,
  by using a prefix argument.  #5362

Bugfixes:

- Matching references were no longer displayed on the first line of
  revision buffers.  48b158500d

- Fixed a v4.3.3 regression in inserting rebase actions into the
  status buffer when ~--rebase-merges~ is specified.  #5365

- On the "Untracked files" section, ~k~ no longer worked as intended.
  #5366

Also contains code and documentation cleanups and improvements.

* v4.3.3    2025-05-01

- ~magit-section-show-level~ now acts on all selected sections.  #5354

- Inserting the list of commits being rebased into the status buffer
  is now much faster.  8e72767262

- All rebase actions are now inserted into the status buffer.
  69b310e109

- While editing the list of commits and actions to be rebased
  ~git-rebase-kill-line~ (~k~) on a commented line now uncomments it.
  ff44ee1bc3

- Added new variants of commands that deal with files for use in Dired
  buffers, and improved existing variants.  In Dired, these commands
  are available from ~magit-file-dispatch~ (~C-c M-g~).  542c2f8a75 et al.

- ~magit-branch-shelve~ now prepends the date to the refname, and
  ~magit-branch-unshelve~ removes such prefixes.  78ffd1a389

- The new function ~magit-insert-shelved-branch~ can be added to
  ~magit-refs-sections-hook~ to list shelved branches.  d6b7784547

- Added new command ~magit-wip-purge~, which removes old branches
  created by ~magit-wip-mode~.  d5e0f3a639

- ~magit-blame-styles~ now supports inserting truncated commit hashes.
  #4057

- Added new command ~magit-mouse-set-point~.  3c9e519197

Also contains code and documentation cleanups and improvements.

* v4.3.2    2025-04-01

- Removed legacy options ~magit-wip-*-mode-lighter~.  225ea6fd00

- ~magit-log-current~ now falls back to displaying the log for ~HEAD~ if
  no branch is checked out, and the now redundant ~magit-log-head~ is
  no longer displayed in the ~magit-log~ menu by default.  c8b1e12bd5

- Renamed ~magit-merge-into~ to ~magit-merge-dissolve~ and changed the
  key binding in the ~magit-merge~ menu from ~i~ to ~d~.  The description
  in that menu already was "dissolve".  Do this to make it more
  obvious that this command deletes the source branch after it has
  been merged into the target branch.  #4386

- Added new option ~magit-process-apply-ansi-colors~ (but discourage
  its use).  #5348

- Support for Ido has been moved out into a new package ~magit-ido~.
  6aec967ee4

Bugfixes:

- ~magit-after-save-refresh-buffers~ did not respect
  ~magit-inhibit-refresh~.  c0a8e694b9

- When washing of a section was delayed and it ends in an empty line,
  that line was not always made part of the section.  f6f25e6566

- In some cases section specific key bindings were not made available
  as intended.  6ce1ece580, 3f79700f1b

- In some cases ~magit-toggle-buffer-lock~ has to uniquify buffer names
  but failed to do so.  #5330

- After applying a hunk, the buffer was refreshed twice.  #5343

- The diff shown by ~magit-diff-paths~ was not washed.  #5093

Also contains more code and documentation cleanups and improvements.

* v4.3.1    2025-03-02

- Added new option ~magit-format-file-function,~ and two functions to
  optionally prefix file names with icons, with the help of either
  ~all-the-icons~ or ~nerd-icons~.  #5308

- Added new commands ~magit-previous-reference~ and ~magit-next-reference~,
  with entry point ~C-c C-r~.  Enable ~repeat-mode~ to keep navigating with
  ~p~ and ~n~.  #5310

Bugfixes:

- ~magit-commit-revise~ failed if no arguments were used.  #5306

- Some arguments were missing from diff menus when invoked from
  the status buffer.  #5309

- In some menus the bindings for ~--signoff~ conflicted with those for
  other arguments.  #5312

- Fixed unlikely issue in ~magit-git-mergetool~.  66e3ddffe4

- Unknown Git trailers resulted in a display error while writing
  commit messages.  8c27c910ca

- When the word at point matched the name of a branch, that was
  unconditionally treated as the commit-at-point.  This should only be
  done when that word is shown using an appropriate face.  2b3f2cb9ad

- Fixed bug in ~magit-section-cycle-diffs~.  #5319

- ~magit-stage-untracked~ was a bit fragile.  #5325

* v4.3.0    2025-02-04

- Added new option ~magit-refs-show-branch-descriptions~.  42ed6c1966

- When a stash cannot be applied using the trivial method, the user is
  offered some fallback methods.  The presentation of those has been
  improved.  #5253 a08b4dd513

- Added new hook options ~magit-revision-wash-message-hook~ and
  ~magit-log-wash-summary-hook~, and populate them with new and
  existing highlighting functions, making it easier to remove default
  highlighting and to add custom highlighting.  This also increases
  consistency between how commit summaries are shown in logs and when
  displaying complete commit messages.  f54fce0ecc..b86fe009e2

- ~amend!~ markers are now highlighted like ~fixup!~ and ~squash!~ markers.
  #5261

- ~magit-commit-create~ no longer amends to HEAD when called with a
  prefix argument.  The ~magit-commit~ menu offers four amend commands.
  That should be good enough.  5e60aa72e5

- ~magit-commit~ no longer features the obscure ~magit-commit-reshelve~ by
  default, but it can quickly be reinstated, using the level mechanism.
  20eb323b47

- Added new commands ~magit-commit-alter~ and ~magit-commit-revise~,
  completing the already extensive set of "fixup" commands.  #5261

- Improved commit menu, documentation and implementation details.
  #5261

- The branch at point is detected in more contexts now, i.e., when
  there is not actually a branch at point, but one can unambiguously
  be derived from the thing at point.  4876f1921e

- Reworked ~magit-process-password-prompt-regexps~ to be more permissive
  and better structured.  Hopefully that means we have to extend it
  less frequently going forward, when users run into new prompts.
  #5288

- Speed up listing untracked files in the status buffer, simplify how
  the list is configured, and give up on optionally using a tree.
  #5284

- Argument ~--signoff~ is now available in all menus that create commits.
  However, it is no longer shown in any menu by default.  See the end
  of [[https://docs.magit.vc/transient/Enabling-and-Disabling-Suffixes.html][Enabling and Disabling Suffixes]] to learn how to enable it in all
  menus at once in a single action.  #5297

- Began using the ~##~ macro from the ~llama~ package.  0a64982100

- Stopped depending on the ~dash~ package.  e40e8f1994

Bug fixes:

- When applying a stash, it was not always discovered when the trivial
  method was unsuccessful, and so the user was not offered the use of
  a fallback method.  #5253 929eb4dca5

- ~git-commit.el~ did not require ~magit-process~, which was only a
  problem when it is loaded without also loading the rest of Magit.
  #5280.

- The use of an external diff drivers was not prevented in some
  places.  #5282

- ~magit-blame-maybe-show-message~ did not protect against interpreting
  % in commit messages as %-specs.  d0e795f423

- Parts of commit message headers lost the intended background color.
  46c3d8b0ad

- The confirmation prompt of ~magit-worktree-delete~ failed to name the
  affected worktree.  #5286

- The wrong suffix color was used for ~magit-commit-absorb~ and
  ~magit-commit-autofixup~.  bfadd41079

- ~magit-stash-index~ did not use ~magit-stash-read-message-function~.
  #5295

- Fixed an error that occurred when creating ~magit-hunk-section-map~
  and the user has disabled ~smerge-command-prefix~.  The same bug
  exists in Emacs since 29.1, so this will only help users stuck
  on Emacs 28.  #5300

- When the value of a diff or log menu was being initialized from the
  arguments in the current buffer and the diff/log was already limited
  to a set of files, then all other arguments were discarded.  #5304

* v4.2.0    2025-01-01

- At least Git 2.25.0 is required now.  033a0c0cdc

- At least Emacs 27.1 is required now.  c1a86066e8

- Added new command ~magit-toggle-profiling~.  f637dd1877

- Added new command ~magit-toggle-subprocess-record~.  ec1f403af1

Bug fixes:

- Fixed a regression in ~transient-init-value~.  5b4c4aea1b

- Fixed setting ~fill-paragraph-function~ in
  ~git-commit-setup-changelog-support~.  139e0fcff3

- ~magit-log-refresh~ lacked the ~--since~ and ~--until~ arguments, which
  were already available in ~magit-log~.  3ecebe8d11

- Enabling verbose output in ~magit-commit-absorb~ caused an error.
  #5272

- In logs, no longer strip ~heads/~ prefix from branch names if a tag
  with the same name exists.  5cb3492464

- ~magit-list-special-refnames~ returned nonsense.  #5277

* v4.1.3    2024-12-06

- For most important sections, if an error occurs while inserting the
  section, the error message is now displayed in the section body.
  #5255

- ~magit-submodule-populate~ now supports ~--recursive~.  #5191 #5256

- Improved ~magit-process-password-prompt-regexps~.  #5257

Bug fixes:

- ~magit-stash-pop~ and ~magit-stash-apply~ sometimes installed conflicts
  for the user to resolve that are more complicated than they need to
  be.  #5253

- ~magit-stash-push~ placed ~--~ before other arguments.  #5260

- ~magit-autorevert~ failed to require ~magit-process~.  #5263

* v4.1.2    2024-11-02

- Add various minor process logging improvements:
  5b30c05d3a magit--git-insert: Collapse process section if appropriate
  b11524120e magit--git-insert: Optionally always log to process buffer
  cd6cf89d6a Use different face for debug-only process sections
  bba06845de magit-process-insert-section: Improve file-path comparison
  f2a6133443 magit-run-git-async: No longer clutter ~*Messages*~ buffer

Bug fixes:

- If the left margin was in use before ~magit-blame-mode~ started using
  that margin, then the old width was not restored when the mode was
  disabled.  #5236

- Prior to Tramp being loaded, setting ~magit-tramp-pipe-stty-settings~
  to ~nil~ resulted in an error, due to ~tramp-pipe-stty-settings~ not
  being bound yet.  #5240

- ~magit-copy-section-value~ no longer did anything for most section
  types.  #5244.

- Global git arguments often got added twice to the list of arguments
  ultimately passed to git.  914285a5e8

- Inserting the headers of status buffers involves temporary changes
  to ~magit-insert-section-hook~.  These changes were not restricted to
  the current buffer, causing errors when ~magit-git-debug~ is enabled
  and we thus insert sections in the process buffer, while the status
  buffer is being refreshed.  11e13640c4

- Some ~git~ errors were not logged despite ~magit-git-debug~ being
  enabled.  874fb0fede

- ~magit-browse-thing~ and ~magit-visit-thing~ tried to turn anything
  at point into an URL.  Now the bail if there is no URL at point.
  7c842b8ac0

* v4.1.1    2024-10-01

- Avoid unnecessary work when ~auto-revert-remote-files~ is ~nil~.  #5222

- Improved default choice offered by ~magit-branch-reset~ and
  ~magit-reset-*~.  #5230

Bug fixes:

- Added a workaround for a regression in Git v2.46.0.  #5212

- Section-specific bindings were removed when a section was expanded
  whose body is not inserted until the expansion takes place.
  9395de2c94

- Addressed an incompatibility with Eglot.  #5226

- Adapted to a change in ~define-globalized-minor-mode~ in Emacs 30,
  which caused ~diff-hl-mode~ to be enabled in blob buffers.  #5229

- When adding the commit at point to the completion defaults, it was
  assumed that ~minibuffer-default-add-function~ cannot be nil.
  6d0075f523

- ~magit-blame--format-string-1~ didn't handle a list of faces
  correctly.  5395798301

- Addressed an incompatibility with Indent-Bars.  #5233

* v4.1.0    2024-09-01

- The library ~git-commit.el~ is no longer distributed as a separate
  package, ~git-commit~, but as part of the ~magit~ package.

- Improved ~magit-tag-release~'s consistency and handling of arguments.
  #5102

- Updated tooling and other housekeeping.

Bug fixes:

- Only use an explicit range in ~magit-insert-recent-commits~, when also
  using ~--graph~.  With ~--graph~ it increases performance noticeably,
  but without it decreases performance somewhat.  #5075

- ~magit-completing-read-multiple~ now shows the default choice in the
  prompt, if a completion framework is used, for which that is useful.
  #5205.

* v4.0.0    2024-08-08

Breaking changes:

- Dropped support for Emacs 25.  7c794201c4

- Removed several functions, variables and variable values that were obsoleted
  in past releases:
  - bc18ba942f Removed ~git-commit-fill-column~, obsolete since v2.11.0
  - 6b4f7f5811 Removed ~magit-section-when~, obsolete since v2.90.0
  - a8c92cc35d Removed face aliases, obsolete since v2.12.0 and v3.0.0
  - ed8067830f Removed variables and functions obsolete since v3.3.0
  - 553968346d Removed support for obsolete ~magit-branch-rename-push-target~ values
  - b47efecfe6 Removed support for obsolete %-sequence in ~magit-branch-name-format~

- Removed library ~magit-libgit.el~, which was only a proof-of-concept, without
  Magit actually making use of it.  Packagers were discouraged from including
  this library in the Magit package, but many disregarded that.  Because that
  caused issues for many users, it had to be removed.  c9fd81217c, 703dfe5812

- Completed the switch to a new ~magit-completing-read-multiple~ implementation.
  a162b8a71e

Changes:

- Added many context menus, which can be invoked using the mouse or a key
  (~menu~ by default) and are a great way to discover context sensitive commands.
  Context menus were added in Emacs 28.1 and are disabled by default.  Enable
  ~context-menu-mode~ or set ~magit-section-show-context-menu-for-emacs<28~ to ~t~,
  if you are still using an older release.  [[https://github.com/magit/magit/issues/4645][#4645]]

- The menu-bar menu, which was severely neglected for many years, finally got a
  makeover.  It no longer offers a completely random subset of Magit's features.
  Now it can be used to invoke most of the commands that could also be invoked
  using ~magit-dispatch~; but by means of a small furry animal.  5641d3749c

- Rewrote Imenu support, which resulted in a few new features and much less
  code.  4727dcbe22 ff

- Move imenu and bookmark support to the independently distributed ~magit-section~
  package, so that it can be used by third-party packages, without having to
  depend on the ~magit~ package.  [[https://github.com/magit/magit/issues/5104][#5104]]

- One does not simply change key bindings; at least not as a package maintainer.
  ~magit-define-global-key-bindings~ used to be a boolean, now it can be set to
  ~recommended~, to opt in to new easier top-level bindings, which do not require
  changing modifiers mid-sequence.  8b1f599de4

- For the longest time (which is why I don't consider this a bug fix) toggling
  a section caused point to move to the beginning of that section.  Stop doing
  that, unless absolutely necessary.  9d8d5e5603

- Added support for displaying errors that occur when washing a section.
  Use that for diff and log buffers, so users can investigate what went wrong.
  78a979fde5, 2bd3db69d6, d05b1ed381, a760dd1078

- Massively reduced the expansion of the essential macro ~magit-insert-section~,
  moving most work to new support functions. [[https://github.com/magit/magit/issues/5130][#5130]] 13e4422584..058ca81497,
  ee6fbba360..e2ca80a26e, 3695493ce8..f7cba11588

- Avoid expensive and/or unnecessary work, including:
  - 8606488578 magit-save-repository-buffers: Rev-parse only once per directory
  - ff4710afa6 Deprecate magit-git-dir to avoid needlessly repeating work
  - e94b6ebfdb [[https://github.com/magit/magit/issues/4900][#4900]] Record diff-type in magit-diff-mode buffers
  - 6852936364 [[https://github.com/magit/magit/issues/4768][#4768]] magit-wip-mode: Speedup activation by avoiding duplicated work
  - 241b327b7a [[https://github.com/magit/magit/issues/4974][#4974]] Don't use markers in log buffers
  - d536ef9e21 Don't preserve visibility in log buffers
  - Limit use of log graphs and signature verification.  545a64c3ee, e32cec06a4
  - d73a3b11db Record child sections in reverse in log buffers
  - 6014320c3e magit-module-confirm: Use refresh cache
  - fef45b274e magit-insert-child-count: Minor performance tweak
  - 4ec4d0272e magit-insert-section--finish: Optimize propertizing leaf sections
  - 54d969b62f magit-insert-section--finish: Optimize for leaf sections
  - 5544bac955 magit-insert-section--finish: Avoid unnecessary work for root section
  - ~magit-turn-on-auto-revert-mode-if-desired~ performs cheaper checks first now.
    [[https://github.com/magit/magit/issues/4591][#4591]]
  - For performance reasons the "margin" style sadly had to be removed from
    ~magit-blame-styles~.  608242086e

- Added new commands ~git-commit-co-developed~ and ~git-commit-insert-trailer~
  (menu) [[https://github.com/magit/magit/issues/4810][#4810]], ~git-commit-search-message-backward~ and
  ~git-commit-search-message-forward~ [[https://github.com/magit/magit/issues/4537][#4537]], ~git-rebase-update-ref~ [[https://github.com/magit/magit/issues/4776][#4776]],
  ~magit-back-to-indentation~ [[https://github.com/magit/magit/issues/5183][#5183]], ~magit-git-mergetool~ [[https://github.com/magit/magit/issues/4128][#4128]],
  ~magit-jump-to-ignored~ 550d99d86d, ~magit-log-related~ c33ed664e6,
  ~magit-mouse-toggle-section~ 949b4a47a4, ~magit-profile-refresh-buffer~
  d520ce3306, ~magit-repolist-fetch~ [[https://github.com/magit/magit/issues/4453][#4453]], ~magit-repolist-find-file-other-frame~
  [[https://github.com/magit/magit/issues/4453][#4453]], ~magit-repolist-mark~ and ~magit-repolist-unmark~ [[https://github.com/magit/magit/issues/4453][#4453]],
  ~magit-smerge-keep-all~ [[https://github.com/magit/magit/issues/4756][#4756]], ~magit-stage-buffer-file~ ebd7a0635d,
  ~magit-stash-push~ (menu) [[https://github.com/magit/magit/issues/4583][#4583]], ~magit-toggle-git-debug~ 2ed5a06d08,
  ~magit-unstage-buffer-file~ ebd7a0635d, ~magit-update-default-branch~ 59833692ed,
  and others.

  - Added new transient menu ~magit-sparse-checkout~, which provides an interface
    to the ~git sparse-checkout~ command, introduced in Git v2.25.  [[https://github.com/magit/magit/issues/4102][#4102]]

  - Added new command ~magit-clone-sparse~, which makes it possible to clone
    a repository and then immediately enable a sparse checkout, avoiding a
    checkout of the full working tree.  [[https://github.com/magit/magit/issues/4102][#4102]]

  - Added new command ~magit-stash-push~, which allows specifying a list of
    files to be stashed.  [[https://github.com/magit/magit/issues/4583][#4583]]

  - Added new command ~magit-ediff-resolve-all~, an alternative to
    ~magit-ediff-resolve-rest~ (formerly known as ~magit-ediff-resolve~).  The
    new option ~magit-ediff-dwim-resolve-function~ controls which is used by
    ~magit-ediff-dwim~ (another new command, ~magit-git-mergetool~, can also be
    used).  [[https://github.com/magit/magit/issues/4348][#4348]]

  - ~magit-refresh-buffer~ is now defined as a command.  26eac2bcb0

- Added new infix arguments:
  - Added ~--diff-merges~ to ~magit-diff~ and ~magit-diff-refresh~.  [[https://github.com/magit/magit/issues/4989][#4989]]
  - Added ~--ff-only~ to ~magit-pull~.  f766f68f78
  - Added ~--filter~ to ~magit-clone~ (hidden by default) to support partial
    cloning, a feature that is available as of Git v2.17.  [[https://github.com/magit/magit/issues/4102][#4102]]
  - Added ~--force-rebase~ to ~magit-rebase~.  73b44644f6
  - Added ~--force~ to ~magit-fetch~ and ~magit-pull~.  [[https://github.com/magit/magit/issues/5162][#5162]]
  - Added ~--ignore-date~ to ~magit-rebase~.  7f03f572d5
  - Added ~--update-refs~ to ~magit-rebase~.  2fee806a01

- Added new hooks ~git-commit-post-finish-hook-timeout~ [[https://github.com/magit/magit/issues/4828][#4828]],
  ~magit-post-clone-hook~ [[https://github.com/magit/magit/issues/4849][#4849]], ~magit-post-create-buffer-hook~ 26eec13943, and
  ~magit-wash-message-hook~ 594bd14614.

- Added new options ~git-commit-cd-to-toplevel~ [[https://github.com/magit/magit/issues/4973][#4973]],
  ~magit-ediff-dwim-resolve-function~ 5a7519fd3d, ~magit-log-color-graph-limit~
  545a64c3ee, ~magit-log-merged-commit-count~ [[https://github.com/magit/magit/issues/4711][#4711]],
  ~magit-log-show-signatures-limit~ e32cec06a4, ~magit-openpgp-default-signing-key~
  4eed9e1a45, ~magit-process-timestamp-format~ [[https://github.com/magit/magit/issues/4920][#4920]],
  ~magit-revision-insert-related-refs-display-alist~ [[https://github.com/magit/magit/issues/4885][#4885]],
  ~magit-section-show-context-menu-for-emacs<28~ 0168be9366, and
  ~magit-verbose-messages~ 7fbf89cb52.

- Added new faces ~git-rebase-action~ [[https://github.com/magit/magit/issues/4544][#4544]], ~magit-branch-warning~ bf3bcbe051, and
  ~magit-section-child-count~ [[https://github.com/magit/magit/issues/4599][#4599]]; and added built-in faces ~diff-refine-added~
  and ~diff-refine-removed~ to the ~magit-faces~ custom group.

- Added new function ~git-commit-turn-on-orglink~, intended for use in
  ~git-commit-setup-hook~.  d122f15edd

- ~git-commit.el~ no longer depends on ~dash~.  bb7b7a4020

- Some repository and submodule list columns got a bit fancier.
  3f3980735f 451438dc90

- Refreshing a repository or submodule list buffer now restores the previous
  position.  1feda0cb1c

- Added new variable ~magit-submodule-list-predicate~. ceab3124fb

- ~magit-diff-dwim~ uses a more useful range when showing unpushed and unpulled
  changes.  9413847c1a

- When invoked with a prefix argument, ~magit-fetch-modules~ now acts as a
  transient prefix command.  fd5b9eadf3

- ~magit-cherry-branch~ now supports using a detached HEAD as source.  ff3269814c

- ~git-commit-save-message~ now reports whether the message was actually saved.
  dfe3d03a14

- Make use of ~with-connection-local-variables~, and for older Emacsen use a
  stripped down implementation. [[https://github.com/magit/magit/issues/4568][#4568]]

- Added some forward compatibility for SHA-256.  [[https://github.com/magit/magit/issues/4585][#4585]]

- Added ~magit-mode-bury-buffer~ to ~magit-dispatch~.  5a2624985a

- ~magit-tag-release~ learned to extract the version string from the HEAD commit's
  message.  429d5c55e8

- Improved version display and sorting in repository list buffers.
  53199f2dd5, 68be0584f4

- Added support for marking repositories in repository list buffers and acting
  on the marked repositories.  [[https://github.com/magit/magit/issues/4453][#4453]]

- Improved internals of the version/feature check caches.  On the user visible
  side, teach ~magit-zap-caches~ to zap everything, when invoked with a prefix
  argument.  [[https://github.com/magit/magit/issues/4603][#4603]]

- When blaming, neighboring chunks about the same commit are now combined into
  just one chunk.  [[https://github.com/magit/magit/issues/4030][#4030]]

- Taught ~magit-diff-dwim~ about commits of submodules shown in the status buffer
  of the super-repository.  [[https://github.com/magit/magit/issues/4151][#4151]]

- A cherry pick or revert can now be continued when there are unstaged changes
  as long as there are no unresolved conflicts, a behavior that more closely
  matches the command-line behavior.  [[https://github.com/magit/magit/issues/4615][#4615]]

- ~magit-ediff-read-files~ now tries to detect renames in one-file logs.
  b32521d543

- Increased use of section type, keymap and binding inheritance.
  70b34f08ab

- Depend on the Compat package, allowing me to use convenient features that were
  added to Emacs over the last few years, without having to wait another few
  years, until everybody has updated to a reasonably recent Emacs release.
  571b4346c1

- Tag messages and signatures are now turned into sections in commit buffers.
  476383fc8f

- Work has began on making internal circular dependencies between Magit
  libraries a thing of the past.

- The help text displayed in ~git-rebase-mode~ buffers got a makeover.
  670dad14b5 ff

- Improved the diff to be shown while committing is determined.  [[https://github.com/magit/magit/issues/3246][#3246]]

- ~magit-reverse~ is now permitted in diff buffers between HEAD and
  the working tree.  e94b6ebfdb [[https://github.com/magit/magit/issues/5090][#5090]]

- Registered a ~bookmark-handler-type~ for our handler.  adf5848ea7

- No longer exit transient while toggling margin or cycling styles.  bf0ef3826b

- ~magit-clone-url-format~ can now be configured to an alist to support servers
  that employ different URL schemes.  [[https://github.com/magit/magit/issues/4738][#4738]]

- Repositories hosted on Sourcehut can now be cloned by name.  [[https://github.com/magit/magit/issues/4741][#4741]]

- 564cff8a40 [[https://github.com/magit/magit/issues/4751][#4751]] magit-diff-wash-diffstat: Improve file rename identification
- ce0746ab9f [[https://github.com/magit/magit/issues/4743][#4743]] diff: Mention when a file is a binary
- 1c51352e6f [[https://github.com/magit/magit/issues/4785][#4785]] magit-branch-delete: Improve suggested branch for checkout
- 5d6c01e293 [[https://github.com/magit/magit/issues/4767][#4767]] magit-commit-squash-internal: Restore window conf after showing diff
- 74d14c2d10 magit-log-reflog-re: Handle "rewritten during rebase"
- 2653432bb5 [[https://github.com/magit/magit/issues/4776][#4776]] git-rebase: Support update-ref action
- 161ab48520 [[https://github.com/magit/magit/issues/4810][#4810]] git-commit: Add "Co-developed-by" header
- 99d9b3008a magit-long-lived-branches: New variable
- cd6fbe2887 [[https://github.com/magit/magit/issues/4837][#4837]] magit-branch-read-args: Read another name if chosen branch exists
- 410e4583e0 [[https://github.com/magit/magit/issues/4181][#4181]] Enable navigating broken sections
- b7daf6a2ff [[https://github.com/magit/magit/issues/4905][#4905]] magit-branch-delete: Improve "also on remote?" prompt
- dd2e870b13 [[https://github.com/magit/magit/issues/4823][#4823]] magit-save-repository-buffers: Wip commit all files at once
- b2c4a26b5b [[https://github.com/magit/magit/issues/4923][#4923]] magit-diff-show-or-scroll: Also handle tags
- 85d0554f4f [[https://github.com/magit/magit/issues/4920][#4920]] Optionally display process start time in margin of process buffers
- 2f3740ab68 [[https://github.com/magit/magit/issues/4786][#4786]] If bisect was invoked with --first-parent, use it for rest log too
- 25dbf32d86 [[https://github.com/magit/magit/issues/4781][#4781]] Perform checkouts asynchronously
- 152478b01f magit-branch-or-commit-at-point: Get from unpushed/unpulled sections
- e38500b590 git-commit-header-line-format: New variable
- 09f600fdcd..ebd7a0635d Improved commands for staging and unstaging files.
- 2c2b34d7ac [[https://github.com/magit/magit/issues/4966][#4966]] magit-file-{ignore,tracked}-p: Convert filename for git
- decd5f40dd [[https://github.com/magit/magit/issues/4970][#4970]] magit-stash-pop: Use pop instead of apply
- b3f7e24616 magit-map-sections: New function
- 667deaa74e magit-stage-file: Support staging ignored files
- d46270cb65 [[https://github.com/magit/magit/issues/4990][#4990]] git-commit-setup-font-lock: Set comment-end to the empty string
- 7d4092f00b Apply stash even if "git stash apply" cannot do it
- 186414ae41 [[https://github.com/magit/magit/issues/4998][#4998]] When inserting pseudo header, always prompt with a prefix argument
- ace5ca4401 [[https://github.com/magit/magit/issues/4999][#4999]] magit--imenu-goto-function: New function
- 27099441a0 [[https://github.com/magit/magit/issues/5000][#5000]] Offer textual range at point as next history element
- ae7f5e9fb4 magit-log-refresh: No longer exit transient after any margin command
- dd14e0c3c6 [[https://github.com/magit/magit/issues/5027][#5027]] git-commit: Ignore leading comment when inserting headers
- b436ad3830 git-commit: Replace the term "(pseudo) header" with "trailer"
- 72fbb3a579 magit-stash-read-message: Provide a default instead of magic
- 51f04d6826 [[https://github.com/magit/magit/issues/5042][#5042]] magit-branch-reset: Offer commit at point as history element
- fb1a3c487e [[https://github.com/magit/magit/issues/5051][#5051]] magit-sequencer-abort: Require confirmation
- 4efecc80a6 magit-log-move-to-revision: Default to fixup target if any
- 025c48ed68 magit-section-lineage: Optionally return objects instead of types
- 8a3674b427 completion: Prevent Vertico from sorting completion candidates
- 09961f67a4 [[https://github.com/magit/magit/issues/5097][#5097]] git-commit-turn-on-flyspell: Don't check below cut-line
- 0032ffca8d magit-branch: Add global variable suffixes by default
- 8a3c1ccdda magit-section-cycle: Pivot to tab-next if there is a binding conflict
- 28bcd29db5 [[https://github.com/magit/magit/issues/5107][#5107]] magit--shell-command: Use magit-with-editor
- f49584599c Hide placeholder commands from execute-completing-read
- e37c9ea4de Make discouraged use of git-commit-mode-hook safer and more convenient
- d98e935ed7 [[https://github.com/magit/magit/issues/5134][#5134]] magit-{browse,visit}-thing: Handle raw URL links
- 22fd8f8594 git-commit: Disable auto-filling for summary line
- f3b6864969 magit-insert-heading: Add optional CHILD-COUNT argument
- 6359e5c98f magit-hack-dir-local-variables: New function
- d1e2beb866 magit-file-checkout: Support selecting a directory
- 538cb2f90b [[https://github.com/magit/magit/issues/5176][#5176]] magit-file-section-indent: New variable
- 86509cb09e magit-run-git: Return exit-code
- 1fdb30cc1a [[https://github.com/magit/magit/issues/5188][#5188]] magit-log-select: Place cursor on first non-squash commit
- eb0b81e71d [[https://github.com/magit/magit/issues/5109][#5109]] Remove obsolete advice for Tramp

Bugfixes:

- ~magit-status-quick~ wasn't autoloaded.  [[https://github.com/magit/magit/issues/4519][#4519]]

- Magit's version could not be detected if it was installed using Straight.
  [[https://github.com/magit/magit/issues/4526][#4526]]

- Automatic saving of file-visiting buffers was broken inside remote
  repositories that are accessed using Tramp.  [[https://github.com/magit/magit/issues/4292][#4292]]

- Worktree commands and listing worktrees in the status buffer were broken
  inside remote repositories that are accessed using Tramp.  [[https://github.com/magit/magit/issues/4326][#4326]]

- Due to a regression in v3.3.0 setting the mark did not highlight the current
  and only selected section until a second section is selected.  348d9b9861

- A diff header added in a new Git release wasn't handled yet.  [[https://github.com/magit/magit/issues/4531][#4531]]

- Fixed calculation of gravatar image size.  ecfaa325a3

- ~magit-branch-checkout~ refreshed the buffer before all work was done.
  a14f847d97

- Section highlighting was not always updated when it should have, and sometimes
  it was done needlessly.  aba0a59611, 41fcb24761, 10b5407131

- ~magit-dispatch~ contained a binding that conflicted with that of
  ~transient-help~.  f85c4efb52

- ~magit-diff-wash-submodule~ didn't account for empty commit messages.  [[https://github.com/magit/magit/issues/4538][#4538]]

- Empty face definitions weren't defined properly, resulting in "rogue" faces.
  a66b86d511

- ~magit-remote-at-point~ could return invalid values on branch sections.
  2039619696

- Fixed a regression in ~magit-log-maybe-update-blob-buffer~.  [[https://github.com/magit/magit/issues/4552][#4552]]

- The helper function ~magit-current-blame-chunk~ passed the directory visited by
  a Dired buffer to ~git blame~, leading to some commands (e.g., ~magit-checkout~)
  erroring when called from a Dired buffer.  [[https://github.com/magit/magit/issues/4560][#4560]]

- ~magit-convert-filename-for-git~ needed yet another tweak on Windows.  [[https://github.com/magit/magit/issues/4557][#4557]]

- For Helm users, calling ~magit-stash-drop~ on the "Stashes" section has been
  broken since v3.0.0.  [[https://github.com/magit/magit/issues/4571][#4571]]

- ~magit-list-refs~ failed to list a poorly named ~head~ branch.  [[https://github.com/magit/magit/issues/4576][#4576]]

- ~magit-rebase~ offered arguments that aren't supported by the Git version in
  use.  5e70f10566

- ~magit-generate-changelog~ wasn't autoloaded.  [[https://github.com/magit/magit/issues/4581][#4581]]

- Failed to specify ~:test~ when calling ~cl-set-difference~ with strings.
  d899f0e7a6

- ~magit-section-show-child-count~ broke on commits that have no children.  [[https://github.com/magit/magit/issues/4598][#4598]]

- ~magit-fetch-modules~ offered the ~--all~ argument, but that wasn't useful.
  dc11ba7b29

- ~magit-discard~ didn't properly handle conflicts resulting from a file being
  renamed on both sides.  [[https://github.com/magit/magit/issues/4225][#4225]]

- Since v3.0.0, ~magit-pull-from-pushremote~ has failed on non-fast-forward
  merges.  [[https://github.com/magit/magit/issues/4604][#4604]]

- ~magit-insert-revision-message~ got tripped up by messages that begin with a
  commit hash.  [[https://github.com/magit/magit/issues/4602][#4602]]

- ~git-commit.el~ didn't always use ~magit-git-executable~, instead hard coding
  "git", even if Magit is available.  77255776cb

- ~magit-global-core.notesRef~ and ~magit-global-core.displayRef~ didn't actually
  handle global value.  0f96d39834

- ~magit-blame--make-highlight-overlay~ put the highlighting on the wrong line.
  [[https://github.com/magit/magit/issues/4620][#4620]]

- A regression from v3.2.0 broke visiting a file when that file has a mode
  change and point is on the file or the mode change section.  [[https://github.com/magit/magit/issues/4623][#4623]]

- Module sections used the wrong keymap.  94aca04dc8

- In-progress cherry-picks were not always recognized.  [[https://github.com/magit/magit/issues/4646][#4646]]

- Locating remote executables was broken.  4d1d00e6fa

- The use of external diff tools was not prevented everywhere we need the
  ability to feed the output back to ~git apply~.  [[https://github.com/magit/magit/issues/4664][#4664]]

- The revision syntax for matching commit message was not supported.  [[https://github.com/magit/magit/issues/4662][#4662]]

- ~magit-current-blame-chunk~ errored at eob.  437dfe95e9

- ~magit-revision-refresh-buffer~ could set ~magit-buffer-revision-hash~ to
  something that is not a hash.  2676dddb84

- ~magit-tag-release~ failed to create the first release.  ea1d09e0a7

- 84922c3997 magit-show-commit: Fix handling of current buffer's file
- 71f7d1df1d magit-diff-wash-hunk: Handle one line edge case
- 1b0474b590 [[https://github.com/magit/magit/issues/4693][#4693]] Highlight trailing whitespace on lines using dos eol style
- 4b8eab3af1 [[https://github.com/magit/magit/issues/4697][#4697]] magit-{branch-or,}commit-at-point: Only use blame chunk when blaming
- 9b48dd7e36 [[https://github.com/magit/magit/issues/4702][#4702]] Prefer 'git log --no-walk' to 'git show --no-patch'
- 64cca91341 magit-push: Fix magit-push-implicitly--desc
- 5f5e065e1e magit-list-worktrees: Always include path in returned value
- c1def98185 magit--minibuf-default-add-commit: Fix position of commit
- c92dee94e9 magit-save-repository-buffers: Handle let-bound default-directory
- 9a69e3d479 [[https://github.com/magit/magit/issues/4765][#4765]] magit-blame--make-margin-overlays: Fix beginning of each overlay
- 557ab2c062 magit-diff-wash-diff: Fix headers for "git log -L --no-prefix"
- 8158b484ae magit-list-module-paths: Ensure they are relative to top-level
- 87e68e0a8e [[https://github.com/magit/magit/issues/4803][#4803]] magit-tag-release: Fix case when no default is detected
- a3d3758b26 [[https://github.com/magit/magit/issues/4807][#4807]] magit-file-rename: Fix initial-input for destination
- 2a5815fee1 [[https://github.com/magit/magit/issues/4806][#4806]] git-commit-font-lock-keywords-1: Use more restrictive keyword regexp

- Commands that use optional third-party Git extensions didn't consider that
  extension executables may be installed in Git's exec path instead of a
  directory in ~exec-path~.  [[https://github.com/magit/magit/issues/4812][#4812]]

- ~magit-show-commit~ showed the incorrect commit when called on a chunk generated
  by ~magit-blame-reverse~.  [[https://github.com/magit/magit/issues/4834][#4834]]

- 2286a63974 [[https://github.com/magit/magit/issues/3624][#3624]] Fix applying changes over Tramp from Windows
- fa0997797b magit-process-filter: Suppress bogus error when aborting emacsclient
- 76fe394953 magit-log-merged: Fix incorrect calculation of distance from tip
- 6d325d90ba Revert "git-commit-setup: Enable mode after setting local variables"
- 467bb21f7d magit-commit-diff-1: Take --allow-empty into account
- 97a95f7007 [[https://github.com/magit/magit/issues/4883][#4883]] magit-revision-fill-summary-line: Use revision buffer's window width
- 8586e49d81 [[https://github.com/magit/magit/issues/4891][#4891]] magit-auto-revert-mode: Leave disabled in one more case
- 5bd6c15089 magit-save-repository-buffers: Guard against disappeared repository
- dec25b407b [[https://github.com/magit/magit/issues/4898][#4898]] magit-log-set-commit-limit: Modify copy of magit-buffer-log-args
- 1d4bf64f33 [[https://github.com/magit/magit/issues/4903][#4903]] magit-insert-remote-branches: Fix Git 2.40 compatibility
- beb3d6cae2 [[https://github.com/magit/magit/issues/4787][#4787]] magit-wash-bisect-log: Ignore '# status:' lines
- dd649baf7c [[https://github.com/magit/magit/issues/4922][#4922]] diff: Fix visiting removed lines of renamed file
- 3224b1765f [[https://github.com/magit/magit/issues/4744][#4744]] Keep cursor from getting stuck in invisible text
- 9c66514b2c [[https://github.com/magit/magit/issues/4940][#4940]] magit-restore-window-configuration: Select buffer
- 031b9fad42 [[https://github.com/magit/magit/issues/4949][#4949]] magit-display-repository-buffer: Fix doing so
- a003d3c11c [[https://github.com/magit/magit/issues/4954][#4954]] magit-clone-internal: correctly get origin value from args
- 8b3acf7473 [[https://github.com/magit/magit/issues/4962][#4962]] Fix killing process if user input is aborted
- 4ca7b95f28 magit-diff-type: Fix in logs when section isn't provided as argument
- 93d30c5459 [[https://github.com/magit/magit/issues/4976][#4976]] magit-cygwin-mount-points: Don't use cygwin hack remotely
- 027bae37ae [[https://github.com/magit/magit/issues/4988][#4988]] git-commit-setup: Fix auto-mode-alist for remote files
- 889ed3111a [[https://github.com/magit/magit/issues/4977][#4977]] Allow un-/staging binary files when whitespace is being ignored
- 7a1d503470 [[https://github.com/magit/magit/issues/5005][#5005]] git-commit-insert-header: Fix determining location
- 18d1b13675 [[https://github.com/magit/magit/issues/5006][#5006]] magit-process-finish: Avoid unnecessary magit-process-buffer call
- 3329bf0f4f magit-list-refs: Exclude all symbolic references
- 139f603cb8 [[https://github.com/magit/magit/issues/5021][#5021]] magit-hunk-section-map: Honor smerge-command-prefix again
- c6a62accc5 [[https://github.com/magit/magit/issues/5029][#5029]] magit-jump-*-pushremote: Restore functionality

- If applying a patch series with ~git am~ failed, the status buffer incorrectly
  repeated already applied patches in the list of remaining patches.  [[https://github.com/magit/magit/issues/5024][#5024]]

- b187753717 magit-insert-section-body: Ensure parent sections get extended

- ~magit-bisect-run~ is supposed to abort if there are uncommitted
  changes or if the revisions are flipped (like ~magit-bisect-start~
  does), but these checks were unintentionally dropped in Magit
  v3.1.0.  [[https://github.com/magit/magit/issues/5070][#5070]]

- debb9723d9 Support staging hunks over Tramp again
- c3b7fd7dc4 [[https://github.com/magit/magit/issues/5076][#5076]] magit-status-setup-buffer: Ensure correct position when narrowed
- 8fd3cce75c magit-completing-read: Support using function as COLLECTION
- fc485bae0d [[https://github.com/magit/magit/issues/5092][#5092]] magit-insert-remote-branches: Skip HEAD if not symref
- 36be3d66ed [[https://github.com/magit/magit/issues/5102][#5102]] magit-tag-release: Use magit-run-git-with-editor
- 65ecb9c5fc Only hook up git-commit-setup-font-lock-in-buffer once mode is enabled
- 0e8f25a8d8 [[https://github.com/magit/magit/issues/5094][#5094]] elpa/elpa/magit magit--git-wash: Support commands whose non-zero status isn't an error
- faa308fccd [[https://github.com/magit/magit/issues/5122][#5122]] magit-module-confirm: Never require confirmation with prefix argument
- ea02c8e634 magit-log-buffer-file: Support using the region in blobs again
- ea0f07e549 [[https://github.com/magit/magit/issues/5158][#5158]] magit-section--enable-long-lines-shortcuts: Fix warning
- 9d4192b7b1 [[https://github.com/magit/magit/issues/5116][#5116]] Fix visiting file from buffer created with magit-diff-paths
- ad68015aa1 [[https://github.com/magit/magit/issues/5178][#5178]] magit-confirm: Directly support two rounds of prompt formatting
- f31cf79b27 [[https://github.com/magit/magit/issues/5175][#5175]] magit-parse-git-async: Discard stderr for now
