emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/git-commit 85bffbbfaf: Actually no longer track generated


From: ELPA Syncer
Subject: [nongnu] elpa/git-commit 85bffbbfaf: Actually no longer track generated %.texi
Date: Sun, 18 Aug 2024 07:00:59 -0400 (EDT)

branch: elpa/git-commit
commit 85bffbbfafcb0eb195f51c417971bbfe31d2d42b
Author: Jonas Bernoulli <jonas@bernoul.li>
Commit: Jonas Bernoulli <jonas@bernoul.li>

    Actually no longer track generated %.texi
---
 docs/magit-section.texi |   331 --
 docs/magit.texi         | 11450 ----------------------------------------------
 2 files changed, 11781 deletions(-)

diff --git a/docs/magit-section.texi b/docs/magit-section.texi
deleted file mode 100644
index bf59f33b4f..0000000000
--- a/docs/magit-section.texi
+++ /dev/null
@@ -1,331 +0,0 @@
-\input texinfo    @c -*- texinfo -*-
-@c %**start of header
-@setfilename magit-section.info
-@settitle Magit-Section Developer Manual
-@documentencoding UTF-8
-@documentlanguage en
-@c %**end of header
-
-@copying
-@quotation
-Copyright (C) 2015-2024 Jonas Bernoulli <emacs.magit@@jonas.bernoulli.dev>
-
-You can redistribute this document and/or modify it under the terms
-of the GNU General Public License as published by the Free Software
-Foundation, either version 3 of the License, or (at your option) any
-later version.
-
-This document is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the GNU
-General Public License for more details.
-
-@end quotation
-@end copying
-
-@dircategory Emacs
-@direntry
-* Magit-Section: (magit-section). Use Magit sections in your own packages.
-@end direntry
-
-@finalout
-@titlepage
-@title Magit-Section Developer Manual
-@subtitle for version 3.3.0.50-git
-@author Jonas Bernoulli
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top Magit-Section Developer Manual
-
-This package implements the main user interface of Magit — the
-collapsible sections that make up its buffers.  This package used
-to be distributed as part of Magit but how it can also be used by
-other packages that have nothing to do with Magit or Git.
-
-To learn more about the section abstraction and available commands and
-user options see @ref{Sections,,,magit,}.  This manual documents how you
-can use sections in your own packages.
-
-@noindent
-This manual is for Magit-Section version 3.3.0.50-git.
-
-@insertcopying
-@end ifnottex
-
-@menu
-* Introduction::
-* Creating Sections::
-* Core Functions::
-* Matching Functions::
-@end menu
-
-@node Introduction
-@chapter Introduction
-
-This package implements the main user interface of Magit — the
-collapsible sections that make up its buffers.  This package used
-to be distributed as part of Magit but how it can also be used by
-other packages that have nothing to do with Magit or Git.
-
-To learn more about the section abstraction and available commands
-and user options see @ref{Sections,,,magit,}.  This manual documents
-how you can use sections in your own packages.
-
-When the documentation leaves something unaddressed, then please
-consider that Magit uses this library extensively and search its
-source for suitable examples before asking me for help.  Thanks!
-
-@node Creating Sections
-@chapter Creating Sections
-
-@defmac magit-insert-section [name] (type &optional value hide) &rest body
-Create a section object of type CLASS, storing VALUE in its
-@code{value} slot, and insert the section at point.  CLASS is a
-subclass of `magit-section' or has the form @code{(eval FORM)}, in
-which case FORM is evaluated at runtime and should return a
-subclass.  In other places a sections class is often referred
-to as its "type".
-
-Many commands behave differently depending on the class of the
-current section and sections of a certain class can have their
-own keymap, which is specified using the `keymap' class slot.
-The value of that slot should be a variable whose value is a
-keymap.
-
-For historic reasons Magit and Forge in most cases use symbols
-as CLASS that don't actually identify a class and that lack the
-appropriate package prefix.  This works due to some undocumented
-kludges, which are not available to other packages.
-
-When optional HIDE is non-nil collapse the section body by
-default, i.e., when first creating the section, but not when
-refreshing the buffer.  Else expand it by default.  This can be
-overwritten using @code{magit-section-set-visibility-hook}.  When a
-section is recreated during a refresh, then the visibility of
-predecessor is inherited and HIDE is ignored (but the hook is
-still honored).
-
-BODY is any number of forms that actually insert the section's
-heading and body.  Optional NAME, if specified, has to be a
-symbol, which is then bound to the object of the section being
-inserted.
-
-Before BODY is evaluated the @code{start} of the section object is set
-to the value of `point' and after BODY was evaluated its @code{end} is
-set to the new value of @code{point}; BODY is responsible for moving
-@code{point} forward.
-
-If it turns out inside BODY that the section is empty, then
-@code{magit-cancel-section} can be used to abort and remove all traces
-of the partially inserted section.  This can happen when creating
-a section by washing Git's output and Git didn't actually output
-anything this time around.
-@end defmac
-
-@defun magit-insert-heading [child-count] &rest args
-Insert the heading for the section currently being inserted.
-
-This function should only be used inside @code{magit-insert-section}.
-
-When called without any arguments, then just set the @code{content}
-slot of the object representing the section being inserted to
-a marker at @code{point}.  The section should only contain a single
-line when this function is used like this.
-
-When called with arguments ARGS, which have to be strings, or
-nil, then insert those strings at point.  The section should not
-contain any text before this happens and afterwards it should
-again only contain a single line.  If the @code{face} property is set
-anywhere inside any of these strings, then insert all of them
-unchanged.  Otherwise use the `magit-section-heading' face for
-all inserted text.
-
-The @code{content} property of the section object is the end of the
-heading (which lasts from @code{start} to @code{content}) and the beginning
-of the the body (which lasts from @code{content} to @code{end}).  If the
-value of @code{content} is nil, then the section has no heading and
-its body cannot be collapsed.  If a section does have a heading,
-then its height must be exactly one line, including a trailing
-newline character.  This isn't enforced, you are responsible for
-getting it right.  The only exception is that this function does
-insert a newline character if necessary.
-
-If provided, optional CHILD-COUNT must evaluate to an integer or
-boolean.  If t, then the count is determined once the children have been
-inserted, using @code{magit-insert-child-count} (which see).  For historic
-reasons, if the heading ends with ":", the count is substituted for
-that, at this time as well.  If @code{magit-section-show-child-count} is nil,
-no counts are inserted
-@end defun
-
-@defmac magit-insert-section-body &rest body
-Use BODY to insert the section body, once the section is expanded.
-If the section is expanded when it is created, then this is
-like @code{progn}.  Otherwise BODY isn't evaluated until the section
-is explicitly expanded.
-@end defmac
-
-@defun magit-cancel-section
-Cancel inserting the section that is currently being inserted.
-Remove all traces of that section.
-@end defun
-
-@defun magit-wash-sequence function
-Repeatedly call FUNCTION until it returns @code{nil} or the end of the
-buffer is reached.  FUNCTION has to move point forward or return
-@code{nil}.
-@end defun
-
-@node Core Functions
-@chapter Core Functions
-
-@defun magit-current-section
-Return the section at point or where the context menu was invoked.
-When using the context menu, return the section that the user
-clicked on, provided the current buffer is the buffer in which
-the click occurred.  Otherwise return the section at point.
-@end defun
-
-@table @asis
-@item Function magit-section-at &optional position
-Return the section at POSITION, defaulting to point.  Default to
-point even when the context menu is used.
-@end table
-
-@defun magit-section-ident section
-Return an unique identifier for SECTION@. The return value has the
-form @code{((TYPE . VALUE)...)}.
-@end defun
-
-@defun magit-section-ident-value value
-Return a constant representation of VALUE@.
-
-VALUE is the value of a @code{magit-section} object.  If that is an
-object itself, then that is not suitable to be used to identify
-the section because two objects may represent the same thing but
-not be equal.  If possible a method should be added for such
-objects, which returns a value that is equal.  Otherwise the
-catch-all method is used, which just returns the argument
-itself.
-@end defun
-
-@defun magit-get-section ident &optional root
-Return the section identified by IDENT@.
-IDENT has to be a list as returned by @code{magit-section-ident}.
-If optional ROOT is non-nil, then search in that section tree
-instead of in the one whose root @code{magit-root-section} is.
-@end defun
-
-@defun magit-section-lineage section &optional raw
-Return the lineage of SECTION@.
-If optional RAW is non-nil, return a list of section objects,
-beginning with SECTION, otherwise return a list of section types.
-@end defun
-
-@defun magit-section-content-p section
-Return non-nil if SECTION has content or an unused washer function.
-@end defun
-
-The next two functions are replacements for the Emacs functions that
-have the same name except for the @code{magit-} prefix.  Like
-@code{magit-current-section} they do not act on point, the cursors position,
-but on the position where the user clicked to invoke the context menu.
-
-If your package provides a context menu and some of its commands act
-on the "thing at point", even if just as a default, then use the
-prefixed functions to teach them to instead use the click location
-when appropriate.
-
-@table @asis
-@item Function magit-point
-Return point or the position where the context menu was invoked.
-When using the context menu, return the position the user clicked
-on, provided the current buffer is the buffer in which the click
-occurred.  Otherwise return the same value as @code{point}.
-
-@item Function magit-thing-at-point thing &optional no-properties
-Return the THING at point or where the context menu was invoked.
-When using the context menu, return the thing the user clicked
-on, provided the current buffer is the buffer in which the click
-occurred.  Otherwise return the same value as @code{thing-at-point}.
-For the meaning of THING and NO-PROPERTIES see that function.
-@end table
-
-@node Matching Functions
-@chapter Matching Functions
-
-@defun magit-section-match condition &optional (section 
(magit-current-section))
-Return t if SECTION matches CONDITION@.
-
-SECTION defaults to the section at point.  If SECTION is not
-specified and there also is no section at point, then return
-nil.
-
-CONDITION can take the following forms:
-
-@itemize
-@item
-@code{(CONDITION...)} matches if any of the CONDITIONs matches.
-@item
-@code{[CLASS...]} matches if the section's class is the same
-as the first CLASS or a subclass of that;
-the section's parent class matches the
-second CLASS; and so on.
-
-@item
-@code{[* CLASS...]} matches sections that match [CLASS@dots{}] and
-also recursively all their child sections.
-@item
-@code{CLASS} matches if the section's class is the same
-as CLASS or a subclass of that; regardless
-of the classes of the parent sections.
-@end itemize
-
-Each CLASS should be a class symbol, identifying a class that
-derives from @code{magit-section}.  For backward compatibility CLASS
-can also be a "type symbol".  A section matches such a symbol
-if the value of its @code{type} slot is @code{eq}.  If a type symbol has
-an entry in @code{magit--section-type-alist}, then a section also
-matches that type if its class is a subclass of the class that
-corresponds to the type as per that alist.
-
-Note that it is not necessary to specify the complete section
-lineage as printed by @code{magit-describe-section-briefly}, unless
-of course you want to be that precise.
-@end defun
-
-@defun magit-section-value-if condition &optional section
-If the section at point matches CONDITION, then return its value.
-
-If optional SECTION is non-nil then test whether that matches
-instead.  If there is no section at point and SECTION is nil,
-then return nil.  If the section does not match, then return
-nil.
-
-See @code{magit-section-match} for the forms CONDITION can take.
-@end defun
-
-@defmac magit-section-case &rest clauses
-Choose among clauses on the type of the section at point.
-
-Each clause looks like @code{(CONDITION BODY...)}.  The type of the
-section is compared against each CONDITION; the BODY forms of the
-first match are evaluated sequentially and the value of the last
-form is returned.  Inside BODY the symbol @code{it} is bound to the
-section at point.  If no clause succeeds or if there is no
-section at point, return nil.
-
-See @code{magit-section-match} for the forms CONDITION can take.
-Additionally a CONDITION of t is allowed in the final clause, and
-matches if no other CONDITION match, even if there is no section
-at point.
-@end defmac
-
-@bye
diff --git a/docs/magit.texi b/docs/magit.texi
deleted file mode 100644
index 71c1745744..0000000000
--- a/docs/magit.texi
+++ /dev/null
@@ -1,11450 +0,0 @@
-\input texinfo    @c -*- texinfo -*-
-@c %**start of header
-@setfilename magit.info
-@settitle Magit User Manual
-@documentencoding UTF-8
-@documentlanguage en
-@c %**end of header
-
-@copying
-@quotation
-Copyright (C) 2015-2024 Jonas Bernoulli <emacs.magit@@jonas.bernoulli.dev>
-
-You can redistribute this document and/or modify it under the terms
-of the GNU General Public License as published by the Free Software
-Foundation, either version 3 of the License, or (at your option) any
-later version.
-
-This document is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the GNU
-General Public License for more details.
-
-@end quotation
-@end copying
-
-@dircategory Emacs
-@direntry
-* Magit: (magit).       Using Git from Emacs with Magit.
-@end direntry
-
-@finalout
-@titlepage
-@title Magit User Manual
-@subtitle for version 3.3.0.50-git
-@author Jonas Bernoulli
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top Magit User Manual
-
-Magit is an interface to the version control system Git, implemented
-as an Emacs package.  Magit aspires to be a complete Git porcelain.
-While we cannot (yet) claim that Magit wraps and improves upon each
-and every Git command, it is complete enough to allow even experienced
-Git users to perform almost all of their daily version control tasks
-directly from within Emacs.  While many fine Git clients exist, only
-Magit and Git itself deserve to be called porcelains.
-
-@noindent
-This manual is for Magit version 3.3.0.50-git.
-
-@insertcopying
-@end ifnottex
-
-@menu
-* Introduction::
-* Installation::
-* Getting Started::
-* Interface Concepts::
-* Inspecting::
-* Manipulating::
-* Transferring::
-* Miscellaneous::
-* Customizing::
-* Plumbing::
-* FAQ::
-* Debugging Tools::
-* Keystroke Index::
-* Function and Command Index::
-* Variable Index::
-
-@detailmenu
---- The Detailed Node Listing ---
-
-Installation
-
-* Installing from Melpa::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-
-Interface Concepts
-
-* Modes and Buffers::
-* Sections::
-* Transient Commands::
-* Transient Arguments and Buffer Variables::
-* Completion, Confirmation and the Selection: Completion Confirmation and the 
Selection. 
-* Mouse Support::
-* Running Git::
-
-Modes and Buffers
-
-* Switching Buffers::
-* Naming Buffers::
-* Quitting Windows::
-* Automatic Refreshing of Magit Buffers::
-* Automatic Saving of File-Visiting Buffers::
-* Automatic Reverting of File-Visiting Buffers::
-
-
-Sections
-
-* Section Movement::
-* Section Visibility::
-* Section Hooks::
-* Section Types and Values::
-* Section Options::
-
-
-Completion, Confirmation and the Selection
-
-* Action Confirmation::
-* Completion and Confirmation::
-* The Selection::
-* The hunk-internal region::
-* Support for Completion Frameworks::
-* Additional Completion Options::
-
-
-Running Git
-
-* Viewing Git Output::
-* Git Process Status::
-* Running Git Manually::
-* Git Executable::
-* Global Git Arguments::
-
-
-Inspecting
-
-* Status Buffer::
-* Repository List::
-* Logging::
-* Diffing::
-* Ediffing::
-* References Buffer::
-* Bisecting::
-* Visiting Files and Blobs::
-* Blaming::
-
-Status Buffer
-
-* Status Sections::
-* Status Header Sections::
-* Status Module Sections::
-* Status Options::
-
-
-Logging
-
-* Refreshing Logs::
-* Log Buffer::
-* Log Margin::
-* Select from Log::
-* Reflog::
-* Cherries::
-
-
-Diffing
-
-* Refreshing Diffs::
-* Commands Available in Diffs::
-* Diff Options::
-* Revision Buffer::
-
-
-References Buffer
-
-* References Sections::
-
-
-Visiting Files and Blobs
-
-* General-Purpose Visit Commands::
-* Visiting Files and Blobs from a Diff::
-
-
-Manipulating
-
-* Creating Repository::
-* Cloning Repository::
-* Staging and Unstaging::
-* Applying::
-* Committing::
-* Branching::
-* Merging::
-* Resolving Conflicts::
-* Rebasing::
-* Cherry Picking::
-* Resetting::
-* Stashing::
-
-Staging and Unstaging
-
-* Staging from File-Visiting Buffers::
-
-
-Committing
-
-* Initiating a Commit::
-* Editing Commit Messages::
-
-
-Branching
-
-* The Two Remotes::
-* Branch Commands::
-* Branch Git Variables::
-* Auxiliary Branch Commands::
-
-
-Rebasing
-
-* Editing Rebase Sequences::
-* Information About In-Progress Rebase::
-
-
-Cherry Picking
-
-* Reverting::
-
-
-Transferring
-
-* Remotes::
-* Fetching::
-* Pulling::
-* Pushing::
-* Plain Patches::
-* Maildir Patches::
-
-Remotes
-
-* Remote Commands::
-* Remote Git Variables::
-
-
-Miscellaneous
-
-* Tagging::
-* Notes::
-* Submodules::
-* Subtree::
-* Worktree::
-* Sparse checkouts::
-* Bundle::
-* Common Commands::
-* Wip Modes::
-* Commands for Buffers Visiting Files::
-* Minor Mode for Buffers Visiting Blobs::
-
-Submodules
-
-* Listing Submodules::
-* Submodule Transient::
-
-
-Wip Modes
-
-* Wip Graph::
-* Legacy Wip Modes::
-
-
-Customizing
-
-* Per-Repository Configuration::
-* Essential Settings::
-
-Essential Settings
-
-* Safety::
-* Performance::
-* Global Bindings::
-
-
-Plumbing
-
-* Calling Git::
-* Section Plumbing::
-* Refreshing Buffers::
-* Conventions::
-
-Calling Git
-
-* Getting a Value from Git::
-* Calling Git for Effect::
-
-
-Section Plumbing
-
-* Creating Sections::
-* Section Selection::
-* Matching Sections::
-
-
-Conventions
-
-* Theming Faces::
-
-
-FAQ
-
-* FAQ - How to @dots{}?::
-* FAQ - Issues and Errors::
-
-FAQ - How to @dots{}?
-
-* How to pronounce Magit?::
-* How to show git's output?::
-* How to install the gitman info manual?::
-* How to show diffs for gpg-encrypted files?::
-* How does branching and pushing work?::
-* Should I disable VC@?::
-
-
-FAQ - Issues and Errors
-
-* Magit is slow::
-* I changed several thousand files at once and now Magit is unusable::
-* I am having problems committing::
-* I am using MS Windows and cannot push with Magit::
-* I am using macOS and SOMETHING works in shell, but not in Magit: I am using 
macOS and SOMETHING works in shell but not in Magit. 
-* Expanding a file to show the diff causes it to disappear::
-* Point is wrong in the @code{COMMIT_EDITMSG} buffer::
-* The mode-line information isn't always up-to-date::
-* A branch and tag sharing the same name breaks SOMETHING::
-* My Git hooks work on the command-line but not inside Magit::
-* @code{git-commit-mode} isn't used when committing from the command-line::
-* Point ends up inside invisible text when jumping to a file-visiting buffer::
-* I am no longer able to save popup defaults::
-
-
-@end detailmenu
-@end menu
-
-@node Introduction
-@chapter Introduction
-
-Magit is an interface to the version control system Git, implemented
-as an Emacs package.  Magit aspires to be a complete Git porcelain.
-While we cannot (yet) claim that Magit wraps and improves upon each
-and every Git command, it is complete enough to allow even experienced
-Git users to perform almost all of their daily version control tasks
-directly from within Emacs.  While many fine Git clients exist, only
-Magit and Git itself deserve to be called porcelains.
-
-Staging and otherwise applying changes is one of the most important
-features in a Git porcelain and here Magit outshines anything else,
-including Git itself.  Git's own staging interface (@code{git add --patch})
-is so cumbersome that many users only use it in exceptional cases.
-In Magit staging a hunk or even just part of a hunk is as trivial as
-staging all changes made to a file.
-
-The most visible part of Magit's interface is the status buffer, which
-displays information about the current repository.  Its content is
-created by running several Git commands and making their output
-actionable.  Among other things, it displays information about the
-current branch, lists unpulled and unpushed changes and contains
-sections displaying the staged and unstaged changes.  That might sound
-noisy, but, since sections are collapsible, it's not.
-
-To stage or unstage a change one places the cursor on the change and
-then types @code{s} or @code{u}.  The change can be a file or a hunk, or when 
the
-region is active (i.e., when there is a selection) several files or
-hunks, or even just part of a hunk.  The change or changes that these
-commands - and many others - would act on are highlighted.
-
-Magit also implements several other "apply variants" in addition to
-staging and unstaging.  One can discard or reverse a change, or
-apply it to the working tree.  Git's own porcelain only supports this
-for staging and unstaging and you would have to do something like @code{git
-diff ... | ??? | git apply ...} to discard, revert, or apply a single
-hunk on the command line.  In fact that's exactly what Magit does
-internally (which is what lead to the term "apply variants").
-
-Magit isn't just for Git experts, but it does assume some prior
-experience with Git as well as Emacs.  That being said, many users
-have reported that using Magit was what finally taught them what Git
-is capable of and how to use it to its fullest.  Other users
-wished they had switched to Emacs sooner so that they would have
-gotten their hands on Magit earlier.
-
-While one has to know the basic features of Emacs to be able to make
-full use of Magit, acquiring just enough Emacs skills doesn't take
-long and is worth it, even for users who prefer other editors.  Vim
-users are advised to give @uref{https://github.com/emacs-evil/evil, Evil}, the 
"Extensible VI Layer for Emacs",
-and @uref{https://github.com/syl20bnr/spacemacs, Spacemacs}, an "Emacs 
starter-kit focused on Evil" a try.
-
-Magit provides a consistent and efficient Git porcelain.  After a
-short learning period, you will be able to perform most of your daily
-version control tasks faster than you would on the command line.  You
-will likely also start using features that seemed too daunting in the
-past.
-
-Magit fully embraces Git.  It exposes many advanced features using a
-simple but flexible interface instead of only wrapping the trivial
-ones like many GUI clients do.  Of course Magit supports logging,
-cloning, pushing, and other commands that usually don't fail in
-spectacular ways; but it also supports tasks that often cannot be
-completed in a single step.  Magit fully supports tasks such as
-merging, rebasing, cherry-picking, reverting, and blaming by not only
-providing a command to initiate these tasks but also by displaying
-context sensitive information along the way and providing commands
-that are useful for resolving conflicts and resuming the sequence
-after doing so.
-
-Magit wraps and in many cases improves upon at least the following Git
-porcelain commands: @code{add}, @code{am}, @code{bisect}, @code{blame}, 
@code{branch}, @code{checkout}, @code{cherry},
-@code{cherry-pick}, @code{clean}, @code{clone}, @code{commit}, @code{config}, 
@code{describe}, @code{diff}, @code{fetch},
-@code{format-patch}, @code{init}, @code{log}, @code{merge}, @code{merge-tree}, 
@code{mv}, @code{notes}, @code{pull}, @code{rebase},
-@code{reflog}, @code{remote}, @code{request-pull}, @code{reset}, 
@code{revert}, @code{rm}, @code{show}, @code{stash},
-@code{submodule}, @code{subtree}, @code{tag}, and @code{worktree.}  Many more 
Magit porcelain
-commands are implemented on top of Git plumbing commands.
-
-@node Installation
-@chapter Installation
-
-Magit can be installed using Emacs' package manager or manually from
-its development repository.
-
-@menu
-* Installing from Melpa::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-@end menu
-
-@node Installing from Melpa
-@section Installing from Melpa
-
-Magit is available from Melpa and Melpa-Stable.  If you haven't used
-Emacs' package manager before, then it is high time you familiarize
-yourself with it by reading the documentation in the Emacs manual, see
-@ref{Packages,,,emacs,}.  Then add one of the archives to
-@code{package-archives}:
-
-@itemize
-@item
-To use Melpa:
-@end itemize
-
-@lisp
-(require 'package)
-(add-to-list 'package-archives
-             '("melpa" . "https://melpa.org/packages/";) t)
-@end lisp
-
-@itemize
-@item
-To use Melpa-Stable:
-@end itemize
-
-@lisp
-(require 'package)
-(add-to-list 'package-archives
-             '("melpa-stable" . "https://stable.melpa.org/packages/";) t)
-@end lisp
-
-Once you have added your preferred archive, you need to update the
-local package list using:
-
-@example
-M-x package-refresh-contents RET
-@end example
-
-Once you have done that, you can install Magit and its dependencies
-using:
-
-@example
-M-x package-install RET magit RET
-@end example
-
-Now see @ref{Post-Installation Tasks}.
-
-@node Installing from the Git Repository
-@section Installing from the Git Repository
-
-Magit depends on the @code{compat}, @code{dash}, @code{transient} and 
@code{with-editor} libraries
-which are available from Melpa and Melpa-Stable.  Install them using
-@code{M-x package-install RET <package> RET}.  Of course you may also install
-them manually from their repository.
-
-Then clone the Magit repository:
-
-@example
-$ git clone https://github.com/magit/magit.git ~/.emacs.d/site-lisp/magit
-$ cd ~/.emacs.d/site-lisp/magit
-@end example
-
-Then compile the libraries and generate the info manuals:
-
-@example
-$ make
-@end example
-
-If you haven't installed @code{compat}, @code{dash}, @code{transient} and 
@code{with-editor} from
-Melpa or at @code{/path/to/magit/../<package>}, then you have to tell 
@code{make}
-where to find them.  To do so create the file @code{/path/to/magit/config.mk}
-with the following content before running @code{make}:
-
-@example
-LOAD_PATH  = -L ~/.emacs.d/site-lisp/magit/lisp
-LOAD_PATH += -L ~/.emacs.d/site-lisp/dash
-LOAD_PATH += -L ~/.emacs.d/site-lisp/transient/lisp
-LOAD_PATH += -L ~/.emacs.d/site-lisp/with-editor/lisp
-LOAD_PATH += -L ~/.emacs.d/site-lisp/compat
-@end example
-
-Finally add this to your init file:
-
-@lisp
-(add-to-list 'load-path "~/.emacs.d/site-lisp/magit/lisp")
-(require 'magit)
-
-(with-eval-after-load 'info
-  (info-initialize)
-  (add-to-list 'Info-directory-list
-               "~/.emacs.d/site-lisp/magit/Documentation/"))
-@end lisp
-
-Of course if you installed the dependencies manually as well, then
-you have to tell Emacs about them too, by prefixing the above with:
-
-@lisp
-(add-to-list 'load-path "~/.emacs.d/site-lisp/dash")
-(add-to-list 'load-path "~/.emacs.d/site-lisp/transient/lisp")
-(add-to-list 'load-path "~/.emacs.d/site-lisp/with-editor")
-@end lisp
-
-Note that you have to add the @code{lisp} subdirectory to the 
@code{load-path}, not
-the top-level of the repository, and that elements of @code{load-path} should
-not end with a slash, while those of @code{Info-directory-list} should.
-
-Instead of requiring the feature @code{magit}, you could load just the
-autoload definitions, by loading the file @code{magit-autoloads.el}.
-
-@lisp
-(load "/path/to/magit/lisp/magit-autoloads")
-@end lisp
-
-Instead of running Magit directly from the repository by adding that
-to the @code{load-path}, you might want to instead install it in some other
-directory using @code{sudo make install} and setting @code{load-path} 
accordingly.
-
-To update Magit use:
-
-@example
-$ git pull
-$ make
-@end example
-
-At times it might be necessary to run @code{make clean all} instead.
-
-To view all available targets use @code{make help}.
-
-Now see @ref{Post-Installation Tasks}.
-
-@node Post-Installation Tasks
-@section Post-Installation Tasks
-
-After installing Magit you should verify that you are indeed using the
-Magit, Git, and Emacs releases you think you are using.  It's best to
-restart Emacs before doing so, to make sure you are not using an
-outdated value for @code{load-path}.
-
-@example
-M-x magit-version RET
-@end example
-
-should display something like
-
-@example
-Magit 2.8.0, Git 2.10.2, Emacs 25.1.1, gnu/linux
-@end example
-
-Then you might also want to read about options that many users likely
-want to customize.  See @ref{Essential Settings}.
-
-To be able to follow cross references to Git manpages found in this
-manual, you might also have to manually install the @code{gitman} info manual,
-or advice @code{Info-follow-nearest-node} to instead open the actual manpage.
-See @ref{How to install the gitman info manual?}.
-
-If you are completely new to Magit then see @ref{Getting Started}.
-
-If you run into problems, then please see the @ref{FAQ}.  Also see the
-@ref{Debugging Tools}.
-
-And last but not least please consider making a donation, to ensure
-that I can keep working on Magit.  See @uref{https://magit.vc/donations}.
-for various donation options.
-
-@node Getting Started
-@chapter Getting Started
-
-This short tutorial describes the most essential features that many
-Magitians use on a daily basis.  It only scratches the surface but
-should be enough to get you started.
-
-IMPORTANT: It is safest if you clone some repository just for this
-tutorial.  Alternatively you can use an existing local repository, but
-if you do that, then you should commit all uncommitted changes before
-proceeding.
-
-Type @code{C-x g} to display information about the current Git repository in
-a dedicated buffer, called the status buffer.
-
-Most Magit commands are commonly invoked from the status buffer.  It
-can be considered the primary interface for interacting with Git using
-Magit.  Many other Magit buffers may exist at a given time, but they
-are often created from this buffer.
-
-Depending on what state your repository is in, this buffer may contain
-sections titled "Staged changes", "Unstaged changes", "Unmerged into
-origin/master", "Unpushed to origin/master", and many others.
-
-Since we are starting from a safe state, which you can easily return
-to (by doing a @code{git reset --hard PRE-MAGIT-STATE}), there currently are
-no staged or unstaged changes.  Edit some files and save the changes.
-Then go back to the status buffer, while at the same time refreshing
-it, by typing @code{C-x g}.  (When the status buffer, or any Magit buffer for
-that matter, is the current buffer, then you can also use just @code{g} to
-refresh it).
-
-Move between sections using @code{p} and @code{n}.  Note that the bodies of 
some
-sections are hidden.  Type @code{TAB} to expand or collapse the section at
-point.  You can also use @code{C-tab} to cycle the visibility of the current
-section and its children.  Move to a file section inside the section
-named "Unstaged changes" and type @code{s} to stage the changes you have made
-to that file.  That file now appears under "Staged changes".
-
-Magit can stage and unstage individual hunks, not just complete files.
-Move to the file you have just staged, expand it using @code{TAB}, move to
-one of the hunks using @code{n}, and unstage just that by typing @code{u}.  
Note how
-the staging (@code{s}) and unstaging (@code{u}) commands operate on the change 
at
-point.  Many other commands behave the same way.
-
-You can also un-/stage just part of a hunk.  Inside the body of a hunk
-section (move there using @code{C-n}), set the mark using @code{C-SPC} and 
move down
-until some added and/or removed lines fall inside the region but not
-all of them.  Again type @code{s} to stage.
-
-It is also possible to un-/stage multiple files at once.  Move to a
-file section, type @code{C-SPC}, move to the next file using @code{n}, and 
then @code{s} to
-stage both files.  Note that both the mark and point have to be on the
-headings of sibling sections for this to work.  If the region looks
-like it does in other buffers, then it doesn't select Magit sections
-that can be acted on as a unit.
-
-And then of course you want to commit your changes.  Type @code{c}.  This
-shows the available commit commands and arguments in a buffer at the
-bottom of the frame.  Each command and argument is prefixed with the
-key that invokes/sets it.  Do not worry about this for now.  We want
-to create a "normal" commit, which is done by typing @code{c} again.
-
-Now two new buffers appear.  One is for writing the commit message,
-the other shows a diff with the changes that you are about to
-commit.  Write a message and then type @code{C-c C-c} to actually create
-the commit.
-
-You probably don't want to push the commit you just created because
-you just committed some random changes, but if that is not the case
-you could push it by typing @code{P} to show all the available push commands
-and arguments and then @code{p} to push to a branch with the same name as the
-local branch onto the remote configured as the push-remote.  (If the
-push-remote is not configured yet, then you would first be prompted
-for the remote to push to.)
-
-So far we have mentioned the commit and push menu commands.
-These are probably among the menus you will be using the most, but
-many others exist.  To show a menu that lists all other menus (as well
-as the various apply commands and some other essential commands), type
-@code{h}.  Try a few.  (Such menus are also called "transient prefix
-commands" or just "transients".)
-
-The key bindings in that menu correspond to the bindings in Magit
-buffers, including but not limited to the status buffer.  So you could
-type @code{h d} to bring up the diff menu, but once you remember that "d"
-stands for "diff", you would usually do so by just typing @code{d}.
-
-This "prefix of prefixes" is useful even once you have memorized all
-the bindings, as it can provide easy access to Magit commands from
-non-Magit buffers.  So, by default, it is globally bound to @code{C-x M-g}.
-
-A similar menu featuring (for the most part) commands that act on just
-the file being visited in the current buffer, is globally bound to @code{C-c
-M-g}.  That binding can also be used in buffers, which do not visit a
-file, but then only a subset of the commands is available.
-
-The global key bindings mentioned in the previous two paragraphs are
-quite inconvenient.  We recommend using @code{C-c g} and @code{C-c f} instead, 
but
-cannot use those key sequences by default because they are strictly
-reserved for bindings added by the user.  See @ref{Global Bindings}, if you
-want to explicitly opt-in to the recommended key bindings.
-
-Magit also provides context menus and other mouse commands, see @ref{Mouse 
Support}.
-
-It is not necessary that you do so now, but if you stick with Magit,
-then it is highly recommended that you read the next section too.
-
-@node Interface Concepts
-@chapter Interface Concepts
-
-@menu
-* Modes and Buffers::
-* Sections::
-* Transient Commands::
-* Transient Arguments and Buffer Variables::
-* Completion, Confirmation and the Selection: Completion Confirmation and the 
Selection. 
-* Mouse Support::
-* Running Git::
-@end menu
-
-@node Modes and Buffers
-@section Modes and Buffers
-
-Magit provides several major-modes.  For each of these modes there
-usually exists only one buffer per repository.  Separate modes and
-thus buffers exist for commits, diffs, logs, and some other things.
-
-Besides these special purpose buffers, there also exists an overview
-buffer, called the @strong{status buffer}.  It's usually from this buffer that
-the user invokes Git commands, or creates or visits other buffers.
-
-In this manual we often speak about "Magit buffers".  By that we mean
-buffers whose major-modes derive from @code{magit-mode}.
-
-@table @asis
-@item @kbd{M-x magit-toggle-buffer-lock}
-@findex magit-toggle-buffer-lock
-This command locks the current buffer to its value or if the buffer
-is already locked, then it unlocks it.
-
-Locking a buffer to its value prevents it from being reused to
-display another value.  The name of a locked buffer contains its
-value, which allows telling it apart from other locked buffers and
-the unlocked buffer.
-
-Not all Magit buffers can be locked to their values; for example, it
-wouldn't make sense to lock a status buffer.
-
-There can only be a single unlocked buffer using a certain
-major-mode per repository.  So when a buffer is being unlocked and
-another unlocked buffer already exists for that mode and repository,
-then the former buffer is instead deleted and the latter is
-displayed in its place.
-@end table
-
-@menu
-* Switching Buffers::
-* Naming Buffers::
-* Quitting Windows::
-* Automatic Refreshing of Magit Buffers::
-* Automatic Saving of File-Visiting Buffers::
-* Automatic Reverting of File-Visiting Buffers::
-@end menu
-
-@node Switching Buffers
-@subsection Switching Buffers
-
-@defun magit-display-buffer buffer &optional display-function
-This function is a wrapper around @code{display-buffer} and is used to
-display any Magit buffer.  It displays BUFFER in some window and,
-unlike @code{display-buffer}, also selects that window, provided
-@code{magit-display-buffer-noselect} is @code{nil}.  It also runs the hooks
-mentioned below.
-
-If optional DISPLAY-FUNCTION is non-nil, then that is used to
-display the buffer.  Usually that is @code{nil} and the function specified
-by @code{magit-display-buffer-function} is used.
-@end defun
-
-@defvar magit-display-buffer-noselect
-When this is non-nil, then @code{magit-display-buffer} only displays the
-buffer but forgoes also selecting the window.  This variable should
-not be set globally, it is only intended to be let-bound, by code
-that automatically updates "the other window".  This is used for
-example when the revision buffer is updated when you move inside the
-log buffer.
-@end defvar
-
-@defopt magit-display-buffer-function
-The function specified here is called by @code{magit-display-buffer} with
-one argument, a buffer, to actually display that buffer.  This
-function should call @code{display-buffer} with that buffer as first and a
-list of display actions as second argument.
-
-Magit provides several functions, listed below, that are suitable
-values for this option.  If you want to use different rules, then a
-good way of doing that is to start with a copy of one of these
-functions and then adjust it to your needs.
-
-Instead of using a wrapper around @code{display-buffer}, that function
-itself can be used here, in which case the display actions have to
-be specified by adding them to @code{display-buffer-alist} instead.
-
-To learn about display actions, see @ref{Choosing Window,,,elisp,}.
-@end defopt
-
-@defun magit-display-buffer-traditional buffer
-This function is the current default value of the option
-@code{magit-display-buffer-function}.  Before that option and this function
-were added, the behavior was hard-coded in many places all over the
-code base but now all the rules are contained in this one function
-(except for the "noselect" special case mentioned above).
-@end defun
-
-@defun magit-display-buffer-same-window-except-diff-v1
-This function displays most buffers in the currently selected
-window.  If a buffer's mode derives from @code{magit-diff-mode} or
-@code{magit-process-mode}, it is displayed in another window.
-@end defun
-
-@defun magit-display-buffer-fullframe-status-v1
-This function fills the entire frame when displaying a status
-buffer.  Otherwise, it behaves like
-@code{magit-display-buffer-traditional}.
-@end defun
-
-@defun magit-display-buffer-fullframe-status-topleft-v1
-This function fills the entire frame when displaying a status
-buffer.  It behaves like @code{magit-display-buffer-fullframe-status-v1}
-except that it displays buffers that derive from @code{magit-diff-mode}
-or @code{magit-process-mode} to the top or left of the current buffer
-rather than to the bottom or right.  As a result, Magit buffers tend
-to pop up on the same side as they would if
-@code{magit-display-buffer-traditional} were in use.
-@end defun
-
-@defun magit-display-buffer-fullcolumn-most-v1
-This function displays most buffers so that they fill the entire
-height of the frame.  However, the buffer is displayed in another
-window if (1) the buffer's mode derives from @code{magit-process-mode},
-or (2) the buffer's mode derives from @code{magit-diff-mode}, provided
-that the mode of the current buffer derives from @code{magit-log-mode} or
-@code{magit-cherry-mode}.
-@end defun
-
-@defopt magit-pre-display-buffer-hook
-This hook is run by @code{magit-display-buffer} before displaying the
-buffer.
-@end defopt
-
-@defun magit-save-window-configuration
-This function saves the current window configuration.  Later when
-the buffer is buried, it may be restored by
-@code{magit-restore-window-configuration}.
-@end defun
-
-@defopt magit-post-display-buffer-hook
-This hook is run by @code{magit-display-buffer} after displaying the
-buffer.
-@end defopt
-
-@defun magit-maybe-set-dedicated
-This function remembers if a new window had to be created to display
-the buffer, or whether an existing window was reused.  This
-information is later used by @code{magit-mode-quit-window}, to determine
-whether the window should be deleted when its last Magit buffer is
-buried.
-@end defun
-
-@node Naming Buffers
-@subsection Naming Buffers
-
-@defopt magit-generate-buffer-name-function
-The function used to generate the names of Magit buffers.
-
-Such a function should take the options @code{magit-uniquify-buffer-names}
-as well as @code{magit-buffer-name-format} into account.  If it doesn't,
-then should be clearly stated in the doc-string.  And if it supports
-%-sequences beyond those mentioned in the doc-string of the option
-@code{magit-buffer-name-format}, then its own doc-string should describe
-the additions.
-@end defopt
-
-@defun magit-generate-buffer-name-default-function mode
-This function returns a buffer name suitable for a buffer whose
-major-mode is MODE and which shows information about the repository
-in which @code{default-directory} is located.
-
-This function uses @code{magit-buffer-name-format} and supporting all of
-the %-sequences mentioned the documentation of that option.  It also
-respects the option @code{magit-uniquify-buffer-names}.
-@end defun
-
-@defopt magit-buffer-name-format
-The format string used to name Magit buffers.
-
-At least the following %-sequences are supported:
-
-@itemize
-@item
-@code{%m}
-
-The name of the major-mode, but with the @code{-mode} suffix removed.
-
-@item
-@code{%M}
-
-Like @code{%m} but abbreviate @code{magit-status-mode} as @code{magit}.
-
-@item
-@code{%v}
-
-The value the buffer is locked to, in parentheses, or an empty
-string if the buffer is not locked to a value.
-
-@item
-@code{%V}
-
-Like @code{%v}, but the string is prefixed with a space, unless it is an
-empty string.
-
-@item
-@code{%t}
-
-The top-level directory of the working tree of the repository, or
-if @code{magit-uniquify-buffer-names} is non-nil an abbreviation of that.
-
-@item
-@code{%x}
-
-If @code{magit-uniquify-buffer-names} is nil "*", otherwise the empty
-string.  Due to limitations of the @code{uniquify} package, buffer names
-must end with the path.
-@end itemize
-
-The value should always contain @code{%m} or @code{%M}, @code{%v} or 
@code{%V}, and @code{%t}.  If
-@code{magit-uniquify-buffer-names} is non-nil, then the value must end with
-@code{%t} or @code{%t%x}.  See issue #2841.
-@end defopt
-
-@defopt magit-uniquify-buffer-names
-This option controls whether the names of Magit buffers are
-uniquified.  If the names are not being uniquified, then they
-contain the full path of the top-level of the working tree of the
-corresponding repository.  If they are being uniquified, then they
-end with the basename of the top-level, or if that would conflict
-with the name used for other buffers, then the names of all these
-buffers are adjusted until they no longer conflict.
-
-This is done using the @code{uniquify} package; customize its options to
-control how buffer names are uniquified.
-@end defopt
-
-@node Quitting Windows
-@subsection Quitting Windows
-
-@table @asis
-@item @kbd{q} (@code{magit-mode-bury-buffer})
-@kindex q
-@findex magit-mode-bury-buffer
-This command buries or kills the current Magit buffer.  The function
-specified by option @code{magit-bury-buffer-function} is used to bury the
-buffer when called without a prefix argument or to kill it when
-called with a single prefix argument.
-
-When called with two or more prefix arguments then it always kills
-all Magit buffers, associated with the current project, including
-the current buffer.
-@end table
-
-@defopt magit-bury-buffer-function
-The function used to actually bury or kill the current buffer.
-
-@code{magit-mode-bury-buffer} calls this function with one argument.  If
-the argument is non-nil, then the function has to kill the current
-buffer.  Otherwise it has to bury it alive.  The default value
-currently is @code{magit-mode-quit-window}.
-@end defopt
-
-@defun magit-restore-window-configuration kill-buffer
-Bury or kill the current buffer using @code{quit-window}, which is called
-with KILL-BUFFER as first and the selected window as second
-argument.
-
-Then restore the window configuration that existed right before the
-current buffer was displayed in the selected frame.  Unfortunately
-that also means that point gets adjusted in all the buffers, which
-are being displayed in the selected frame.
-@end defun
-
-@defun magit-mode-quit-window kill-buffer
-Bury or kill the current buffer using @code{quit-window}, which is called
-with KILL-BUFFER as first and the selected window as second
-argument.
-
-Then, if the window was originally created to display a Magit buffer
-and the buried buffer was the last remaining Magit buffer that was
-ever displayed in the window, then that is deleted.
-@end defun
-
-@node Automatic Refreshing of Magit Buffers
-@subsection Automatic Refreshing of Magit Buffers
-
-After running a command which may change the state of the current
-repository, the current Magit buffer and the corresponding status
-buffer are refreshed. The status buffer can be automatically refreshed
-whenever a buffer is saved to a file inside the respective repository
-by adding a hook, like so:
-
-@lisp
-(with-eval-after-load 'magit-mode
-  (add-hook 'after-save-hook 'magit-after-save-refresh-status t))
-@end lisp
-
-Automatically refreshing Magit buffers ensures that the displayed
-information is up-to-date most of the time but can lead to a
-noticeable delay in big repositories.  Other Magit buffers are not
-refreshed to keep the delay to a minimum and also because doing so can
-sometimes be undesirable.
-
-Buffers can also be refreshed explicitly, which is useful in buffers
-that weren't current during the last refresh and after changes were
-made to the repository outside of Magit.
-
-@table @asis
-@item @kbd{g} (@code{magit-refresh})
-@kindex g
-@findex magit-refresh
-This command refreshes the current buffer if its major mode derives
-from @code{magit-mode} as well as the corresponding status buffer.
-
-If the option @code{magit-revert-buffers} calls for it, then it also
-reverts all unmodified buffers that visit files being tracked in the
-current repository.
-
-@item @kbd{G} (@code{magit-refresh-all})
-@kindex G
-@findex magit-refresh-all
-This command refreshes all Magit buffers belonging to the current
-repository and also reverts all unmodified buffers that visit files
-being tracked in the current repository.
-
-The file-visiting buffers are always reverted, even if
-@code{magit-revert-buffers} is nil.
-@end table
-
-@defopt magit-refresh-buffer-hook
-This hook is run in each Magit buffer that was refreshed during the
-current refresh - normally the current buffer and the status buffer.
-@end defopt
-
-@defopt magit-refresh-status-buffer
-When this option is non-nil, then the status buffer is automatically
-refreshed after running git for side-effects, in addition to the
-current Magit buffer, which is always refreshed automatically.
-
-Only set this to nil after exhausting all other options to improve
-performance.
-@end defopt
-
-@defun magit-after-save-refresh-status
-This function is intended to be added to @code{after-save-hook}.  After
-doing that the corresponding status buffer is refreshed whenever a
-buffer is saved to a file inside a repository.
-
-Note that refreshing a Magit buffer is done by re-creating its
-contents from scratch, which can be slow in large repositories.  If
-you are not satisfied with Magit's performance, then you should
-obviously not add this function to that hook.
-@end defun
-
-@node Automatic Saving of File-Visiting Buffers
-@subsection Automatic Saving of File-Visiting Buffers
-
-File-visiting buffers are by default saved at certain points in time.
-This doesn't guarantee that Magit buffers are always up-to-date, but,
-provided one only edits files by editing them in Emacs and uses only
-Magit to interact with Git, one can be fairly confident.  When in
-doubt or after outside changes, type @code{g} (@code{magit-refresh}) to save 
and
-refresh explicitly.
-
-@defopt magit-save-repository-buffers
-This option controls whether file-visiting buffers are saved before
-certain events.
-
-If this is non-nil then all modified file-visiting buffers belonging
-to the current repository may be saved before running commands,
-before creating new Magit buffers, and before explicitly refreshing
-such buffers.  If this is @code{dontask} then this is done without user
-intervention.  If it is @code{t} then the user has to confirm each save.
-@end defopt
-
-@node Automatic Reverting of File-Visiting Buffers
-@subsection Automatic Reverting of File-Visiting Buffers
-
-By default Magit automatically reverts buffers that are visiting files
-that are being tracked in a Git repository, after they have changed on
-disk.  When using Magit one often changes files on disk by running
-Git, i.e., "outside Emacs", making this a rather important feature.
-
-For example, if you discard a change in the status buffer, then that
-is done by running @code{git apply --reverse ...}, and Emacs considers the
-file to have "changed on disk".  If Magit did not automatically revert
-the buffer, then you would have to type @code{M-x revert-buffer RET RET} in
-the visiting buffer before you could continue making changes.
-
-@defopt magit-auto-revert-mode
-When this mode is enabled, then buffers that visit tracked files
-are automatically reverted after the visited files change on disk.
-@end defopt
-
-@defopt global-auto-revert-mode
-When this mode is enabled, then any file-visiting buffer is
-automatically reverted after the visited file changes on disk.
-
-If you like buffers that visit tracked files to be automatically
-reverted, then you might also like any buffer to be reverted, not
-just those visiting tracked files.  If that is the case, then enable
-this mode @emph{instead of} @code{magit-auto-revert-mode}.
-@end defopt
-
-@defopt magit-auto-revert-immediately
-This option controls whether Magit reverts buffers immediately.
-
-If this is non-nil and either @code{global-auto-revert-mode} or
-@code{magit-auto-revert-mode} is enabled, then Magit immediately reverts
-buffers by explicitly calling @code{auto-revert-buffers} after running Git
-for side-effects.
-
-If @code{auto-revert-use-notify} is non-nil (and file notifications are
-actually supported), then @code{magit-auto-revert-immediately} does not
-have to be non-nil, because the reverts happen immediately anyway.
-
-If @code{magit-auto-revert-immediately} and @code{auto-revert-use-notify} are 
both
-@code{nil}, then reverts happen after @code{auto-revert-interval} seconds of 
user
-inactivity.  That is not desirable.
-@end defopt
-
-@defopt auto-revert-use-notify
-This option controls whether file notification functions should be
-used.  Note that this variable unfortunately defaults to @code{t} even on
-systems on which file notifications cannot be used.
-@end defopt
-
-@defopt magit-auto-revert-tracked-only
-This option controls whether @code{magit-auto-revert-mode} only reverts
-tracked files or all files that are located inside Git repositories,
-including untracked files and files located inside Git's control
-directory.
-@end defopt
-
-@defopt auto-revert-mode
-The global mode @code{magit-auto-revert-mode} works by turning on this
-local mode in the appropriate buffers (but @code{global-auto-revert-mode}
-is implemented differently).  You can also turn it on or off
-manually, which might be necessary if Magit does not notice that a
-previously untracked file now is being tracked or vice-versa.
-@end defopt
-
-@defopt auto-revert-stop-on-user-input
-This option controls whether the arrival of user input suspends the
-automatic reverts for @code{auto-revert-interval} seconds.
-@end defopt
-
-@defopt auto-revert-interval
-This option controls how many seconds Emacs waits for before
-resuming suspended reverts.
-@end defopt
-
-@defopt auto-revert-buffer-list-filter
-This option specifies an additional filter used by
-@code{auto-revert-buffers} to determine whether a buffer should be reverted
-or not.
-
-This option is provided by Magit, which also advises
-@code{auto-revert-buffers} to respect it.  Magit users who do not turn on
-the local mode @code{auto-revert-mode} themselves, are best served by
-setting the value to @code{magit-auto-revert-repository-buffer-p}.
-
-However the default is nil, so as not to disturb users who do use the
-local mode directly.  If you experience delays when running Magit
-commands, then you should consider using one of the predicates
-provided by Magit - especially if you also use Tramp.
-
-Users who do turn on @code{auto-revert-mode} in buffers in which Magit
-doesn't do that for them, should likely not use any filter.  Users
-who turn on @code{global-auto-revert-mode}, do not have to worry about this
-option, because it is disregarded if the global mode is enabled.
-@end defopt
-
-@defopt auto-revert-verbose
-This option controls whether Emacs reports when a buffer has been
-reverted.
-@end defopt
-
-The options with the @code{auto-revert-} prefix are located in the Custom
-group named @code{auto-revert}.  The other, Magit-specific, options are
-located in the @code{magit} group.
-
-@menu
-* Risk of Reverting Automatically::
-@end menu
-
-@node Risk of Reverting Automatically
-@unnumberedsubsubsec Risk of Reverting Automatically
-
-For the vast majority of users, automatically reverting file-visiting
-buffers after they have changed on disk is harmless.
-
-If a buffer is modified (i.e., it contains changes that haven't been
-saved yet), then Emacs will refuse to automatically revert it.  If
-you save a previously modified buffer, then that results in what is
-seen by Git as an uncommitted change.  Git will then refuse to carry
-out any commands that would cause these changes to be lost.  In other
-words, if there is anything that could be lost, then either Git or
-Emacs will refuse to discard the changes.
-
-However, if you use file-visiting buffers as a sort of ad hoc
-"staging area", then the automatic reverts could potentially cause
-data loss.  So far I have heard from only one user who uses such a
-workflow.
-
-An example: You visit some file in a buffer, edit it, and save the
-changes.  Then, outside of Emacs (or at least not using Magit or by
-saving the buffer) you change the file on disk again.  At this point
-the buffer is the only place where the intermediate version still
-exists.  You have saved the changes to disk, but that has since been
-overwritten.  Meanwhile Emacs considers the buffer to be unmodified
-(because you have not made any changes to it since you last saved it
-to the visited file) and therefore would not object to it being
-automatically reverted.  At this point an Auto-Revert mode would kick
-in.  It would check whether the buffer is modified and since that is
-not the case it would revert it.  The intermediate version would be
-lost.  (Actually you could still get it back using the @code{undo} command.)
-
-If your workflow depends on Emacs preserving the intermediate version
-in the buffer, then you have to disable all Auto-Revert modes.  But
-please consider that such a workflow would be dangerous even without
-using an Auto-Revert mode, and should therefore be avoided.  If Emacs
-crashes or if you quit Emacs by mistake, then you would also lose the
-buffer content.  There would be no autosave file still containing the
-intermediate version (because that was deleted when you saved the
-buffer) and you would not be asked whether you want to save the buffer
-(because it isn't modified).
-
-@node Sections
-@section Sections
-
-Magit buffers are organized into nested sections, which can be
-collapsed and expanded, similar to how sections are handled in Org
-mode.  Each section also has a type, and some sections also have a
-value.  For each section type there can also be a local keymap, shared
-by all sections of that type.
-
-Taking advantage of the section value and type, many commands operate on
-the current section, or when the region is active and selects sections
-of the same type, all of the selected sections.  Commands that only
-make sense for a particular section type (as opposed to just behaving
-differently depending on the type) are usually bound in section type
-keymaps.
-
-@menu
-* Section Movement::
-* Section Visibility::
-* Section Hooks::
-* Section Types and Values::
-* Section Options::
-@end menu
-
-@node Section Movement
-@subsection Section Movement
-
-To move within a section use the usual keys (@code{C-p}, @code{C-n}, 
@code{C-b}, @code{C-f} etc),
-whose global bindings are not shadowed.  To move to another section use
-the following commands.
-
-@table @asis
-@item @kbd{p} (@code{magit-section-backward})
-@kindex p
-@findex magit-section-backward
-When not at the beginning of a section, then move to the beginning
-of the current section.  At the beginning of a section, instead move
-to the beginning of the previous visible section.
-
-@item @kbd{n} (@code{magit-section-forward})
-@kindex n
-@findex magit-section-forward
-Move to the beginning of the next visible section.
-
-@item @kbd{M-p} (@code{magit-section-backward-siblings})
-@kindex M-p
-@findex magit-section-backward-siblings
-Move to the beginning of the previous sibling section.  If there is
-no previous sibling section, then move to the parent section
-instead.
-
-@item @kbd{M-n} (@code{magit-section-forward-siblings})
-@kindex M-n
-@findex magit-section-forward-siblings
-Move to the beginning of the next sibling section.  If there is no
-next sibling section, then move to the parent section instead.
-
-@item @kbd{^} (@code{magit-section-up})
-@kindex ^
-@findex magit-section-up
-Move to the beginning of the parent of the current section.
-@end table
-
-The above commands all call the hook @code{magit-section-movement-hook}.
-Any of the functions listed below can be used as members of this hook.
-
-You might want to remove some of the functions that Magit adds using
-@code{add-hook}.  In doing so you have to make sure you do not attempt to
-remove function that haven't even been added yet, for example:
-
-@lisp
-(with-eval-after-load 'magit-diff
-  (remove-hook 'magit-section-movement-hook
-               'magit-hunk-set-window-start))
-@end lisp
-
-@defvar magit-section-movement-hook
-This hook is run by all of the above movement commands, after
-arriving at the destination.
-@end defvar
-
-@defun magit-hunk-set-window-start
-This hook function ensures that the beginning of the current section
-is visible, provided it is a @code{hunk} section.  Otherwise, it does
-nothing.
-
-Loading @code{magit-diff} adds this function to the hook.
-@end defun
-
-@defun magit-section-set-window-start
-This hook function ensures that the beginning of the current section
-is visible, regardless of the section's type.  If you add this to
-@code{magit-section-movement-hook}, then you must remove the hunk-only
-variant in turn.
-@end defun
-
-@defun magit-log-maybe-show-more-commits
-This hook function only has an effect in log buffers, and @code{point} is
-on the "show more" section.  If that is the case, then it doubles
-the number of commits that are being shown.
-
-Loading @code{magit-log} adds this function to the hook.
-@end defun
-
-@defun magit-log-maybe-update-revision-buffer
-When moving inside a log buffer, then this function updates the
-revision buffer, provided it is already being displayed in another
-window of the same frame.
-
-Loading @code{magit-log} adds this function to the hook.
-@end defun
-
-@defun magit-log-maybe-update-blob-buffer
-When moving inside a log buffer and another window of the same frame
-displays a blob buffer, then this function instead displays the blob
-buffer for the commit at point in that window.
-@end defun
-
-@defun magit-status-maybe-update-revision-buffer
-When moving inside a status buffer, then this function updates the
-revision buffer, provided it is already being displayed in another
-window of the same frame.
-@end defun
-
-@defun magit-status-maybe-update-stash-buffer
-When moving inside a status buffer, then this function updates the
-stash buffer, provided it is already being displayed in another
-window of the same frame.
-@end defun
-
-@defun magit-status-maybe-update-blob-buffer
-When moving inside a status buffer and another window of the same
-frame displays a blob buffer, then this function instead displays
-the blob buffer for the commit at point in that window.
-@end defun
-
-@defun magit-stashes-maybe-update-stash-buffer
-When moving inside a buffer listing stashes, then this function
-updates the stash buffer, provided it is already being displayed
-in another window of the same frame.
-@end defun
-
-@defopt magit-update-other-window-delay
-Delay before automatically updating the other window.
-
-When moving around in certain buffers, then certain other buffers,
-which are being displayed in another window, may optionally be
-updated to display information about the section at point.
-
-When holding down a key to move by more than just one section, then
-that would update that buffer for each section on the way.  To
-prevent that, updating the revision buffer is delayed, and this
-option controls for how long.  For optimal experience you might have
-to adjust this delay and/or the keyboard repeat rate and delay of
-your graphical environment or operating system.
-@end defopt
-
-@node Section Visibility
-@subsection Section Visibility
-
-Magit provides many commands for changing the visibility of sections,
-but all you need to get started are the next two.
-
-@table @asis
-@item @kbd{@key{TAB}} (@code{magit-section-toggle})
-@kindex TAB
-@findex magit-section-toggle
-Toggle the visibility of the body of the current section.
-
-@item @kbd{C-c @key{TAB}} (@code{magit-section-cycle})
-@itemx @kbd{C-<tab>} (@code{magit-section-cycle})
-@kindex C-c TAB
-@kindex C-<tab>
-@findex magit-section-cycle
-Cycle the visibility of current section and its children.
-
-If this command is invoked using @code{C-<tab>} and that is globally bound
-to @code{tab-next}, then this command pivots to behave like that command,
-and you must instead use @code{C-c TAB} to cycle section visibility.
-
-If you would like to keep using @code{C-<tab>} to cycle section visibility
-but also want to use @code{tab-bar-mode}, then you have to prevent that mode
-from using this key and instead bind another key to @code{tab-next}.  Because
-@code{tab-bar-mode} does not use a mode map but instead manipulates the
-global map, this involves advising @code{tab-bar--define-keys}.
-
-@item @kbd{M-<tab>} (@code{magit-section-cycle-diffs})
-@kindex M-<tab>
-@findex magit-section-cycle-diffs
-Cycle the visibility of diff-related sections in the current buffer.
-
-@item @kbd{S-<tab>} (@code{magit-section-cycle-global})
-@kindex S-<tab>
-@findex magit-section-cycle-global
-Cycle the visibility of all sections in the current buffer.
-
-@item @kbd{1} (@code{magit-section-show-level-1})
-@itemx @kbd{2} (@code{magit-section-show-level-2})
-@itemx @kbd{3} (@code{magit-section-show-level-3})
-@itemx @kbd{4} (@code{magit-section-show-level-4})
-@kindex 1
-@kindex 2
-@kindex 3
-@kindex 4
-@findex magit-section-show-level-1
-@findex magit-section-show-level-2
-@findex magit-section-show-level-3
-@findex magit-section-show-level-4
-Show sections surrounding the current section up to level N@.
-
-@item @kbd{M-1} (@code{magit-section-show-level-1-all})
-@itemx @kbd{M-2} (@code{magit-section-show-level-2-all})
-@itemx @kbd{M-3} (@code{magit-section-show-level-3-all})
-@itemx @kbd{M-4} (@code{magit-section-show-level-4-all})
-@kindex M-1
-@kindex M-2
-@kindex M-3
-@kindex M-4
-@findex magit-section-show-level-1-all
-@findex magit-section-show-level-2-all
-@findex magit-section-show-level-3-all
-@findex magit-section-show-level-4-all
-Show all sections up to level N@.
-@end table
-
-Some functions, which are used to implement the above commands, are
-also exposed as commands themselves.  By default no keys are bound to
-these commands, as they are generally perceived to be much less
-useful.  But your mileage may vary.
-
-@deffn Command magit-section-show
-Show the body of the current section.
-@end deffn
-
-@deffn Command magit-section-hide
-Hide the body of the current section.
-@end deffn
-
-@deffn Command magit-section-show-headings
-Recursively show headings of children of the current section.  Only
-show the headings.  Previously shown text-only bodies are hidden.
-@end deffn
-
-@deffn Command magit-section-show-children
-Recursively show the bodies of children of the current section.
-With a prefix argument show children down to the level of the
-current section, and hide deeper children.
-@end deffn
-
-@deffn Command magit-section-hide-children
-Recursively hide the bodies of children of the current section.
-@end deffn
-
-@deffn Command magit-section-toggle-children
-Toggle visibility of bodies of children of the current section.
-@end deffn
-
-When a buffer is first created then some sections are shown expanded
-while others are not.  This is hard coded.  When a buffer is refreshed
-then the previous visibility is preserved.  The initial visibility of
-certain sections can also be overwritten using the hook
-@code{magit-section-set-visibility-hook}.
-
-@defopt magit-section-initial-visibility-alist
-This options can be used to override the initial visibility of
-sections.  In the future it will also be used to define the
-defaults, but currently a section's default is still hardcoded.
-
-The value is an alist.  Each element maps a section type or lineage
-to the initial visibility state for such sections.  The state has to
-be one of @code{show} or @code{hide}, or a function that returns one of these
-symbols.  A function is called with the section as the only argument.
-
-Use the command @code{magit-describe-section-briefly} to determine a
-section's lineage or type.  The vector in the output is the section
-lineage and the type is the first element of that vector.  Wildcards
-can be used, see @code{magit-section-match}.
-@end defopt
-
-@defopt magit-section-cache-visibility
-This option controls for which sections the previous visibility
-state should be restored if a section disappears and later appears
-again.  The value is a boolean or a list of section types.  If t,
-then the visibility of all sections is cached.  Otherwise this is
-only done for sections whose type matches one of the listed types.
-
-This requires that the function @code{magit-section-cached-visibility} is
-a member of @code{magit-section-set-visibility-hook}.
-@end defopt
-
-@defvar magit-section-set-visibility-hook
-This hook is run when first creating a buffer and also when
-refreshing an existing buffer, and is used to determine the
-visibility of the section currently being inserted.
-
-Each function is called with one argument, the section being
-inserted.  It should return @code{hide} or @code{show}, or to leave the 
visibility
-undefined @code{nil}.  If no function decides on the visibility and the
-buffer is being refreshed, then the visibility is preserved; or if
-the buffer is being created, then the hard coded default is used.
-
-Usually this should only be used to set the initial visibility but
-not during refreshes.  If @code{magit-insert-section--oldroot} is non-nil,
-then the buffer is being refreshed and these functions should
-immediately return @code{nil}.
-@end defvar
-
-@defopt magit-section-visibility-indicator
-This option controls whether and how to indicate that a section can
-be expanded/collapsed.
-
-If nil, then no visibility indicators are shown.  Otherwise the
-value has to have one of these two forms:
-
-@itemize
-@item
-@code{(EXPANDABLE-BITMAP . COLLAPSIBLE-BITMAP)}
-
-Both values have to be variables whose values are fringe
-bitmaps.  In this case every section that can be expanded
-or collapsed gets an indicator in the left fringe.
-
-To provide extra padding around the indicator, set
-@code{left-fringe-width} in @code{magit-mode-hook}, e.g.:
-
-@lisp
-(add-hook 'magit-mode-hook (lambda ()
-                             (setq left-fringe-width 20)))
-@end lisp
-
-@item
-@code{(STRING . BOOLEAN)}
-
-In this case STRING (usually an ellipsis) is shown at the end
-of the heading of every collapsed section.  Expanded sections
-get no indicator.  The cdr controls whether the appearance of
-these ellipsis take section highlighting into account.  Doing
-so might potentially have an impact on performance, while not
-doing so is kinda ugly.
-@end itemize
-@end defopt
-
-@node Section Hooks
-@subsection Section Hooks
-
-Which sections are inserted into certain buffers is controlled with
-hooks.  This includes the status and the refs buffers.  For other
-buffers, e.g., log and diff buffers, this is not possible.  The
-command @code{magit-describe-section} can be used to see which hook (if any)
-was responsible for inserting the section at point.
-
-For buffers whose sections can be customized by the user, a hook
-variable called @code{magit-TYPE-sections-hook} exists.  This hook should be
-changed using @code{magit-add-section-hook}.  Avoid using @code{add-hooks} or 
the
-Custom interface.
-
-The various available section hook variables are described later in
-this manual along with the appropriate "section inserter functions".
-
-@defun magit-add-section-hook hook function &optional at append local
-Add the function FUNCTION to the value of section hook HOOK@.
-
-Add FUNCTION at the beginning of the hook list unless optional
-APPEND is non-nil, in which case FUNCTION is added at the end.  If
-FUNCTION already is a member then move it to the new location.
-
-If optional AT is non-nil and a member of the hook list, then add
-FUNCTION next to that instead.  Add before or after AT, or replace
-AT with FUNCTION depending on APPEND@.  If APPEND is the symbol
-@code{replace}, then replace AT with FUNCTION@.  For any other non-nil value
-place FUNCTION right after AT@.  If nil, then place FUNCTION right
-before AT@.  If FUNCTION already is a member of the list but AT is
-not, then leave FUNCTION where ever it already is.
-
-If optional LOCAL is non-nil, then modify the hook's buffer-local
-value rather than its global value.  This makes the hook local by
-copying the default value.  That copy is then modified.
-
-HOOK should be a symbol.  If HOOK is void, it is first set to nil.
-HOOK's value must not be a single hook function.  FUNCTION should
-be a function that takes no arguments and inserts one or multiple
-sections at point, moving point forward.  FUNCTION may choose not
-to insert its section(s), when doing so would not make sense.  It
-should not be abused for other side-effects.
-@end defun
-
-To remove a function from a section hook, use @code{remove-hook}.
-
-@node Section Types and Values
-@subsection Section Types and Values
-
-Each section has a type, for example @code{hunk}, @code{file}, and 
@code{commit}.
-Instances of certain section types also have a value.  The value of a
-section of type @code{file}, for example, is a file name.
-
-Users usually do not have to worry about a section's type and value,
-but knowing them can be handy at times.
-
-@table @asis
-@item @kbd{H} (@code{magit-describe-section})
-@kindex H
-@findex magit-describe-section
-This command shows information about the section at point in a
-separate buffer.
-@end table
-
-@deffn Command magit-describe-section-briefly
-This command shows information about the section at point in the
-echo area, as @code{#<magit-section VALUE [TYPE PARENT-TYPE...]
-  BEGINNING-END>}.
-@end deffn
-
-Many commands behave differently depending on the type of the section
-at point and/or somehow consume the value of that section.  But that
-is only one of the reasons why the same key may do something different,
-depending on what section is current.
-
-Additionally for each section type a keymap @strong{might} be defined, named
-@code{magit-TYPE-section-map}.  That keymap is used as text property keymap
-of all text belonging to any section of the respective type.  If such
-a map does not exist for a certain type, then you can define it
-yourself, and it will automatically be used.
-
-@node Section Options
-@subsection Section Options
-
-This section describes options that have an effect on more than just a
-certain type of sections.  As you can see there are not many of those.
-
-@defopt magit-section-show-child-count
-Whether to append the number of children to section headings.  This
-only affects sections that could benefit from this information.
-@end defopt
-
-@node Transient Commands
-@section Transient Commands
-
-Many Magit commands are implemented as @strong{transient} commands.  First the
-user invokes a @strong{prefix} command, which causes its @strong{infix} 
arguments and
-@strong{suffix} commands to be displayed in the echo area.  The user then
-optionally sets some infix arguments and finally invokes one of the
-suffix commands.
-
-This is implemented in the library @code{transient}.  Earlier Magit releases
-used the package @code{magit-popup} and even earlier versions library
-@code{magit-key-mode}.
-
-Transient is documented in @ref{Top,,,transient,}.
-
-@table @asis
-@item @kbd{C-x M-g} (@code{magit-dispatch})
-@itemx @kbd{C-c g} (@code{magit-dispatch})
-@kindex C-x M-g
-@kindex C-c g
-@findex magit-dispatch
-This transient prefix command binds most of Magit's other prefix
-commands as suffix commands and displays them in a temporary buffer
-until one of them is invoked.  Invoking such a sub-prefix causes the
-suffixes of that command to be bound and displayed instead of those
-of @code{magit-dispatch}.
-
-This command is also, or especially, useful outside Magit buffers,
-so Magit by default binds it to @code{C-c M-g} in the global keymap.
-@code{C-c g} would be a better binding, but we cannot use that by default,
-because that key sequence is reserved for the user.  See @ref{Global Bindings} 
to learn more default and recommended key bindings.
-@end table
-
-@node Transient Arguments and Buffer Variables
-@section Transient Arguments and Buffer Variables
-
-The infix arguments of many of Magit's transient prefix commands cease
-to have an effect once the @code{git} command that is called with those
-arguments has returned.  Commands that create a commit are a good
-example for this.  If the user changes the arguments, then that only
-affects the next invocation of a suffix command.  If the same
-transient prefix command is later invoked again, then the arguments
-are initially reset to the default value.  This default value can be
-set for the current Emacs session or saved permanently, see
-@ref{Saving Values,,,transient,}.  It is also possible to cycle through
-previously used sets of arguments using @code{C-M-p} and @code{C-M-n}, see
-@ref{Using History,,,transient,}.
-
-However the infix arguments of many other transient commands continue
-to have an effect even after the @code{git} command that was called with
-those arguments has returned.  The most important commands like this
-are those that display a diff or log in a dedicated buffer.  Their
-arguments obviously continue to have an effect for as long as the
-respective diff or log is being displayed.  Furthermore the used
-arguments are stored in buffer-local variables for future reference.
-
-For commands in the second group it isn't always desirable to reset
-their arguments to the global value when the transient prefix command
-is invoked again.
-
-As mentioned above, it is possible to cycle through previously used
-sets of arguments while a transient popup is visible.  That means that
-we could always reset the infix arguments to the default because the
-set of arguments that is active in the existing buffer is only a few
-@code{C-M-p} away.  Magit can be configured to behave like that, but because I
-expect that most users would not find that very convenient, it is not
-the default.
-
-Also note that it is possible to change the diff and log arguments
-used in the current buffer (including the status buffer, which
-contains both diff and log sections) using the respective "refresh"
-transient prefix commands on @code{D} and @code{L}.  (@code{d} and @code{l} on 
the other hand are
-intended to change @strong{what} diff or log is being displayed.  It is
-possible to also change @strong{how} the diff or log is being displayed at the
-same time, but if you only want to do the latter, then you should use
-the refresh variants.)  Because these secondary diff and log transient
-prefixes are about @strong{changing} the arguments used in the current buffer,
-they @strong{always} start out with the set of arguments that are currently in
-effect in that buffer.
-
-Some commands are usually invoked directly even though they can also
-be invoked as the suffix of a transient prefix command.  Most
-prominently @code{magit-show-commit} is usually invoked by typing @code{RET} 
while
-point is on a commit in a log, but it can also be invoked from the
-@code{magit-diff} transient prefix.
-
-When such a command is invoked directly, then it is important to reuse
-the arguments as specified by the respective buffer-local values,
-instead of using the default arguments.  Imagine you press @code{RET} in a
-log to display the commit at point in a different buffer and then use
-@code{D} to change how the diff is displayed in that buffer.  And then you
-press @code{RET} on another commit to show that instead and the diff
-arguments are reset to the default.  Not cool; so Magit does not do
-that by default.
-
-@defopt magit-prefix-use-buffer-arguments
-This option controls whether the infix arguments initially shown in
-certain transient prefix commands are based on the arguments that
-are currently in effect in the buffer that their suffixes update.
-
-The @code{magit-diff} and @code{magit-log} transient prefix commands are 
affected
-by this option.
-@end defopt
-
-@defopt magit-direct-use-buffer-arguments
-This option controls whether certain commands, when invoked directly
-(i.e., not as the suffix of a transient prefix command), use the
-arguments that are currently active in the buffer that they are
-about to update.  The alternative is to use the default value for
-these arguments, which might change the arguments that are used in
-the buffer.
-@end defopt
-
-@noindent
-Valid values for both of the above options are:
-
-@itemize
-@item
-@code{always}: Always use the set of arguments that is currently active
-in the respective buffer, provided that buffer exists of course.
-@item
-@code{selected} or @code{t}: Use the set of arguments from the respective
-buffer, but only if it is displayed in a window of the current
-frame.  This is the default for both variables.
-@item
-@code{current}: Use the set of arguments from the respective buffer, but
-only if it is the current buffer.
-@item
-@code{never}: Never use the set of arguments from the respective buffer.
-@end itemize
-
-@noindent
-I am afraid it gets more complicated still:
-
-@itemize
-@item
-The global diff and log arguments are set for each supported mode
-individually.  The diff arguments for example have different values
-in @code{magit-diff-mode}, @code{magit-revision-mode}, 
@code{magit-merge-preview-mode}
-and @code{magit-status-mode} buffers.  Setting or saving the value for one
-mode does not change the value for other modes.  The history however
-is shared.
-
-@item
-When @code{magit-show-commit} is invoked directly from a log buffer, then
-the file filter is picked up from that buffer, not from the revision
-buffer or the mode's global diff arguments.
-
-@item
-Even though they are suffixes of the diff prefix @code{magit-show-commit}
-and @code{magit-stash-show} do not use the diff buffer used by the diff
-commands, instead they use the dedicated revision and stash buffers.
-
-At the time you invoke the diff prefix it is unknown to Magit which
-of the suffix commands you are going to invoke.  While not certain,
-more often than not users invoke one of the commands that use the
-diff buffer, so the initial infix arguments are those used in that
-buffer.  However if you invoke one of these commands directly, then
-Magit knows that it should use the arguments from the revision resp.
-stash buffer.
-
-@item
-The log prefix also features reflog commands, but these commands do
-not use the log arguments.
-
-@item
-If @code{magit-show-refs} is invoked from a @code{magit-refs-mode} buffer, 
then it
-acts as a refresh prefix and therefore unconditionally uses the
-buffer's arguments as initial arguments. If it is invoked elsewhere
-with a prefix argument, then it acts as regular prefix and therefore
-respects @code{magit-prefix-use-buffer-arguments}.  If it is invoked
-elsewhere without a prefix argument, then it acts as a direct
-command and therefore respects @code{magit-direct-use-buffer-arguments}.
-@end itemize
-
-@node Completion Confirmation and the Selection
-@section Completion, Confirmation and the Selection
-
-@menu
-* Action Confirmation::
-* Completion and Confirmation::
-* The Selection::
-* The hunk-internal region::
-* Support for Completion Frameworks::
-* Additional Completion Options::
-@end menu
-
-@node Action Confirmation
-@subsection Action Confirmation
-
-By default many actions that could potentially lead to data loss have
-to be confirmed.  This includes many very common actions, so this can
-quickly become annoying.  Many of these actions can be undone and if
-you have thought about how to undo certain mistakes, then it should
-be safe to disable confirmation for the respective actions.
-
-The option @code{magit-no-confirm} can be used to tell Magit to perform
-certain actions without the user having to confirm them.  Note that
-while this option can only be used to disable confirmation for a
-specific set of actions, the next section explains another way of
-telling Magit to ask fewer questions.
-
-@defopt magit-no-confirm
-The value of this option is a list of symbols, representing actions
-that do not have to be confirmed by the user before being carried
-out.
-
-By default many potentially dangerous commands ask the user for
-confirmation.  Each of the below symbols stands for an action which,
-when invoked unintentionally or without being fully aware of the
-consequences, could lead to tears.  In many cases there are several
-commands that perform variations of a certain action, so we don't
-use the command names but more generic symbols.
-
-@itemize
-@item
-Applying changes:
-
-@itemize
-@item
-@code{discard} Discarding one or more changes (i.e., hunks or the
-complete diff for a file) loses that change, obviously.
-
-@item
-@code{reverse} Reverting one or more changes can usually be undone by
-reverting the reversion.
-
-@item
-@code{stage-all-changes}, @code{unstage-all-changes} When there are both
-staged and unstaged changes, then un-/staging everything would
-destroy that distinction.  Of course that also applies when
-un-/staging a single change, but then less is lost and one does
-that so often that having to confirm every time would be
-unacceptable.
-@end itemize
-
-@item
-Files:
-
-@itemize
-@item
-@code{delete} When a file that isn't yet tracked by Git is deleted,
-then it is completely lost, not just the last changes.  Very
-dangerous.
-
-@item
-@code{trash} Instead of deleting a file it can also be move to the
-system trash.  Obviously much less dangerous than deleting it.
-
-Also see option @code{magit-delete-by-moving-to-trash}.
-
-@item
-@code{resurrect} A deleted file can easily be resurrected by "deleting"
-the deletion, which is done using the same command that was used
-to delete the same file in the first place.
-
-@item
-@code{untrack} Untracking a file can be undone by tracking it again.
-
-@item
-@code{rename} Renaming a file can easily be undone.
-@end itemize
-
-@item
-Sequences:
-
-@itemize
-@item
-@code{reset-bisect} Aborting (known to Git as "resetting") a bisect
-operation loses all information collected so far.
-
-@item
-@code{abort-cherry-pick} Aborting a cherry-pick throws away all
-conflict resolutions which have already been carried out by the
-user.
-
-@item
-@code{abort-revert} Aborting a revert throws away all conflict
-resolutions which have already been carried out by the user.
-
-@item
-@code{abort-rebase} Aborting a rebase throws away all already modified
-commits, but it's possible to restore those from the reflog.
-
-@item
-@code{abort-merge} Aborting a merge throws away all conflict
-resolutions which have already been carried out by the user.
-
-@item
-@code{merge-dirty} Merging with a dirty worktree can make it hard to go
-back to the state before the merge was initiated.
-@end itemize
-
-@item
-References:
-
-@itemize
-@item
-@code{delete-unmerged-branch} Once a branch has been deleted, it can
-only be restored using low-level recovery tools provided by Git.
-And even then the reflog is gone.  The user always has to
-confirm the deletion of a branch by accepting the default choice
-(or selecting another branch), but when a branch has not been
-merged yet, also make sure the user is aware of that.
-
-@item
-@code{delete-pr-remote} When deleting a branch that was created from a
-pull-request and if no other branches still exist on that
-remote, then @code{magit-branch-delete} offers to delete the remote
-as well.  This should be safe because it only happens if no
-other refs exist in the remotes namespace, and you can recreate
-the remote if necessary.
-
-@item
-@code{drop-stashes} Dropping a stash is dangerous because Git stores
-stashes in the reflog.  Once a stash is removed, there is no
-going back without using low-level recovery tools provided by
-Git.  When a single stash is dropped, then the user always has
-to confirm by accepting the default (or selecting another).
-This action only concerns the deletion of multiple stashes at
-once.
-@end itemize
-
-@item
-Publishing:
-
-@itemize
-@item
-@code{set-and-push} When pushing to the upstream or the push-remote
-and that isn't actually configured yet, then the user can first
-set the target.  If s/he confirms the default too quickly, then
-s/he might end up pushing to the wrong branch and if the remote
-repository is configured to disallow fixing such mistakes, then
-that can be quite embarrassing and annoying.
-@end itemize
-
-@item
-Edit published history:
-
-Without adding these symbols here, you will be warned before
-editing commits that have already been pushed to one of the
-branches listed in @code{magit-published-branches}.
-
-@itemize
-@item
-@code{amend-published} Affects most commands that amend to "HEAD".
-
-@item
-@code{rebase-published} Affects commands that perform interactive
-rebases.  This includes commands from the commit transient that
-modify a commit other than "HEAD", namely the various fixup and
-squash variants.
-
-@item
-@code{edit-published} Affects the commands @code{magit-edit-line-commit} and
-@code{magit-diff-edit-hunk-commit}.  These two commands make it quite
-easy to accidentally edit a published commit, so you should
-think twice before configuring them not to ask for confirmation.
-@end itemize
-
-To disable confirmation completely, add all three symbols here or
-set @code{magit-published-branches} to @code{nil}.
-
-@item
-Various:
-
-@itemize
-@item
-@code{stash-apply-3way} When a stash cannot be applied using @code{git stash
-      apply}, then Magit uses @code{git apply} instead, possibly using the
-@code{--3way} argument, which isn't always perfectly safe.  See also
-@code{magit-stash-apply}.
-
-@item
-@code{kill-process} There seldom is a reason to kill a process.
-@end itemize
-
-@item
-Global settings:
-
-Instead of adding all of the above symbols to the value of this
-option, you can also set it to the atom `t', which has the same
-effect as adding all of the above symbols.  Doing that most
-certainly is a bad idea, especially because other symbols might be
-added in the future.  So even if you don't want to be asked for
-confirmation for any of these actions, you are still better of
-adding all of the respective symbols individually.
-
-When @code{magit-wip-before-change-mode} is enabled, then the following
-actions can be undone fairly easily: @code{discard}, @code{reverse},
-@code{stage-all-changes}, and @code{unstage-all-changes}.  If and only if
-this mode is enabled, then @code{safe-with-wip} has the same effect as
-adding all of these symbols individually.
-@end itemize
-@end defopt
-
-@node Completion and Confirmation
-@subsection Completion and Confirmation
-
-Many Magit commands ask the user to select from a list of possible
-things to act on, while offering the most likely choice as the
-default.  For many of these commands the default is the thing at
-point, provided that it actually is a valid thing to act on.  For
-many commands that act on a branch, the current branch serves as
-the default if there is no branch at point.
-
-These commands combine asking for confirmation and asking for a target
-to act on into a single action.  The user can confirm the default
-target using @code{RET} or abort using @code{C-g}.  This is similar to a 
@code{y-or-n-p}
-prompt, but the keys to confirm or abort differ.
-
-At the same time the user is also given the opportunity to select
-another target, which is useful because for some commands and/or in
-some situations you might want to select the action before selecting
-the target by moving to it.
-
-However you might find that for some commands you always want to use
-the default target, if any, or even that you want the command to act
-on the default without requiring any confirmation at all.  The option
-@code{magit-dwim-selection} can be used to configure certain commands to that
-effect.
-
-Note that when the region is active then many commands act on the
-things that are selected using a mechanism based on the region, in
-many cases after asking for confirmation.  This region-based mechanism
-is called the "selection" and is described in detail in the next
-section.  When a selection exists that is valid for the invoked
-command, then that command never offers to act on something else, and
-whether it asks for confirmation is not controlled by this option.
-
-Also note that Magit asks for confirmation of certain actions that are
-not coupled with completion (or the selection).  Such dialogs are also
-not affected by this option and are described in the previous section.
-
-@defopt magit-dwim-selection
-@end defopt
-This option can be used to tell certain commands to use the thing
-at point instead of asking the user to select a candidate to act
-on, with or without confirmation.
-
-The value has the form @code{((COMMAND nil|PROMPT DEFAULT)...)}.
-
-@itemize
-@item
-COMMAND is the command that should not prompt for a choice.
-To have an effect, the command has to use the function
-@code{magit-completing-read} or a utility function which in turn uses
-that function.
-
-@item
-If the command uses @code{magit-completing-read} multiple times, then
-PROMPT can be used to only affect one of these uses.  PROMPT, if
-non-nil, is a regular expression that is used to match against
-the PROMPT argument passed to @code{magit-completing-read}.
-
-@item
-DEFAULT specifies how to use the default.  If it is @code{t}, then
-the DEFAULT argument passed to @code{magit-completing-read} is used
-without confirmation.  If it is @code{ask}, then the user is given
-a chance to abort.  DEFAULT can also be @code{nil}, in which case the
-entry has no effect.
-@end itemize
-
-@node The Selection
-@subsection The Selection
-
-If the region is active, then many Magit commands act on the things
-that are selected using a mechanism based on the region instead of one
-single thing.  When the region is not active, then these commands act
-on the thing at point or read a single thing to act on.  This is
-described in the previous section — this section only covers how
-multiple things are selected, how that is visualized, and how certain
-commands behave when that is the case.
-
-Magit's mechanism for selecting multiple things, or rather sections
-that represent these things, is based on the Emacs region, but the
-area that Magit considers to be selected is typically larger than the
-region and additional restrictions apply.
-
-Magit makes a distinction between a region that qualifies as forming a
-valid Magit selection and a region that does not.  If the region does
-not qualify, then it is displayed as it is in other Emacs buffers.  If
-the region does qualify as a Magit selection, then the selection is
-always visualized, while the region itself is only visualized if it
-begins and ends on the same line.
-
-For a region to qualify as a Magit selection, it must begin in the
-heading of one section and end in the heading of a sibling section.
-Note that if the end of the region is at the very beginning of section
-heading (i.e., at the very beginning of a line) then that section is
-considered to be @strong{inside} the selection.
-
-This is not consistent with how the region is normally treated in
-Emacs — if the region ends at the beginning of a line, then that line
-is outside the region.  Due to how Magit visualizes the selection, it
-should be obvious that this difference exists.
-
-Not every command acts on every valid selection.  Some commands do not
-even consider the location of point, others may act on the section at
-point but not support acting on the selection, and even commands that
-do support the selection of course only do so if it selects things
-that they can act on.
-
-This is the main reason why the selection must include the section at
-point.  Even if a selection exists, the invoked command may disregard
-it, in which case it may act on the current section only.  It is much
-safer to only act on the current section but not the other selected
-sections than it is to act on the current section @strong{instead} of the
-selected sections.  The latter would be much more surprising and if
-the current section always is part of the selection, then that cannot
-happen.
-
-@defvar magit-keep-region-overlay
-This variable controls whether the region is visualized as usual
-even when a valid Magit selection or a hunk-internal region exists.
-See the doc-string for more information.
-@end defvar
-
-@node The hunk-internal region
-@subsection The hunk-internal region
-
-Somewhat related to the Magit selection described in the previous
-section is the hunk-internal region.
-
-Like the selection, the hunk-internal region is based on the Emacs
-region but causes that region to not be visualized as it would in
-other Emacs buffers, and includes the line on which the region ends
-even if it ends at the very beginning of that line.
-
-Unlike the selection, which is based on a region that must begin in
-the heading of one section and ends in the section of a sibling
-section, the hunk-internal region must begin inside the @strong{body} of a
-hunk section and end in the body of the @strong{same} section.
-
-The hunk-internal region is honored by "apply" commands, which can,
-among other targets, act on a hunk.  If the hunk-internal region is
-active, then such commands act only on the marked part of the hunk
-instead of on the complete hunk.
-
-@node Support for Completion Frameworks
-@subsection Support for Completion Frameworks
-
-The built-in option @code{completing-read-function} specifies the low-level
-function used by @code{completing-read} to ask a user to select from a list
-of choices.  Its default value is @code{completing-read-default}.
-Alternative completion frameworks typically activate themselves by
-substituting their own implementation.
-
-Mostly for historic reasons Magit provides a similar option named
-@code{magit-completing-read-function}, which only controls the low-level
-function used by @code{magit-completing-read}.  This option also makes it
-possible to use a different completing mechanism for Magit than for
-the rest of Emacs, but doing that is not recommend.
-
-You most likely don't have to customize the magit-specific option to
-use an alternative completion framework.  For example, if you enable
-@code{ivy-mode}, then Magit will respect that, and if you enable 
@code{helm-mode},
-then you are done too.
-
-However if you want to use Ido, then @code{ido-mode} won't do the trick.  You
-will also have to install the @code{ido-completing-read+} package and use
-@code{magit-ido-completing-read} as @code{magit-completing-read-function}.
-
-@defopt magit-completing-read-function
-The value of this variable is the low-level function used to perform
-completion by code that uses @code{magit-completing-read} (as opposed to
-the built-in @code{completing-read}).
-
-The default value, @code{magit-builtin-completing-read}, is suitable for
-the standard completion mechanism, @code{ivy-mode}, and @code{helm-mode} at 
least.
-
-The built-in @code{completing-read} and @code{completing-read-default} are 
@strong{not}
-suitable to be used here.  @code{magit-builtin-completing-read} performs
-some additional work, and any function used in its place has to do
-the same.
-@end defopt
-
-@defun magit-builtin-completing-read prompt choices &optional predicate 
require-match initial-input hist def
-This function performs completion using the built-in @code{completing-read}
-and does some additional magit-specific work.
-@end defun
-
-@defun magit-ido-completing-read prompt choices &optional predicate 
require-match initial-input hist def
-This function performs completion using @code{ido-completing-read+} from the
-package by the same name (which you have to explicitly install) and
-does some additional magit-specific work.
-
-We have to use @code{ido-completing-read+} instead of the
-@code{ido-completing-read} that comes with Ido itself, because the latter,
-while intended as a drop-in replacement, cannot serve that purpose
-because it violates too many of the implicit conventions.
-@end defun
-
-@defun magit-completing-read prompt choices &optional predicate require-match 
initial-input hist def fallback
-This is the function that Magit commands use when they need the user
-to select a single thing to act on.  The arguments have the same
-meaning as for @code{completing-read}, except for FALLBACK, which is unique
-to this function and is described below.
-
-Instead of asking the user to choose from a list of possible
-candidates, this function may just return the default specified by
-DEF, with or without requiring user confirmation.  Whether that is
-the case depends on PROMPT, @code{this-command} and 
@code{magit-dwim-selection}.
-See the documentation of the latter for more information.
-
-If it does read a value in the minibuffer, then this function acts
-similar to @code{completing-read}, except for the following:
-
-@itemize
-@item
-COLLECTION must be a list of choices.  A function is not
-supported.
-
-@item
-If REQUIRE-MATCH is @code{nil} and the user exits without a choice, then
-@code{nil} is returned instead of an empty string.
-
-@item
-If REQUIRE-MATCH is non-nil and the users exits without a choice,
-an user-error is raised.
-
-@item
-FALLBACK specifies a secondary default that is only used if the
-primary default DEF is @code{nil}.  The secondary default is not subject
-to @code{magit-dwim-selection} — if DEF is @code{nil} but FALLBACK is not, then
-this function always asks the user to choose a candidate, just as
-if both defaults were @code{nil}.
-
-@item
-@code{format-prompt} is called on PROMPT and DEF (or FALLBACK if
-DEF is @code{nil}).  This appends ": " to the prompt and may also
-add the default to the prompt, using the format specified by
-@code{minibuffer-default-prompt-format} and depending on
-@code{magit-completing-read-default-prompt-predicate}.
-@end itemize
-@end defun
-
-@node Additional Completion Options
-@subsection Additional Completion Options
-
-@defopt magit-list-refs-sortby
-For many commands that read a ref or refs from the user, the value
-of this option can be used to control the order of the refs.  Valid
-values include any key accepted by the @code{--sort} flag of @code{git
-  for-each-ref}.  By default, refs are sorted alphabetically by their
-full name (e.g., "refs/heads/master").
-@end defopt
-
-@node Mouse Support
-@section Mouse Support
-
-Double clicking on a section heading toggles the visibility of its
-body, if any.  Likewise clicking in the left fringe toggles the
-visibility of the appropriate section.
-
-A context menu is provided but has to be enabled explicitly.  In Emacs
-28 and greater, enable the global mode @code{context-menu-mode}.  If you use an
-older Emacs release, set @code{magit-section-show-context-menu-for-emacs<28}.
-
-@node Running Git
-@section Running Git
-
-@menu
-* Viewing Git Output::
-* Git Process Status::
-* Running Git Manually::
-* Git Executable::
-* Global Git Arguments::
-@end menu
-
-@node Viewing Git Output
-@subsection Viewing Git Output
-
-Magit runs Git either for side-effects (e.g., when pushing) or to get
-some value (e.g., the name of the current branch).
-
-When Git is run for side-effects, the process output is logged in a
-per-repository log buffer, which can be consulted using the
-@code{magit-process} command when things don't go as expected.
-
-The output/errors for up to `magit-process-log-max' Git commands are
-retained.
-
-@table @asis
-@item @kbd{$} (@code{magit-process})
-@kindex $
-@findex magit-process
-This commands displays the process buffer for the current
-repository.
-@end table
-
-Inside that buffer, the usual key bindings for navigating and showing
-sections are available.  There is one additional command.
-
-@table @asis
-@item @kbd{k} (@code{magit-process-kill})
-@kindex k
-@findex magit-process-kill
-This command kills the process represented by the section at point.
-@end table
-
-@defvar magit-git-debug
-This option controls whether additional reporting of git errors is
-enabled.
-
-Magit basically calls git for one of these two reasons: for
-side-effects or to do something with its standard output.
-
-When git is run for side-effects then its output, including error
-messages, go into the process buffer which is shown when using @code{$}.
-
-When git's output is consumed in some way, then it would be too
-expensive to also insert it into this buffer, but when this
-option is non-nil and git returns with a non-zero exit status,
-then at least its standard error is inserted into this buffer.
-
-This is only intended for debugging purposes.  Do not enable this
-permanently, that would negatively affect performance.
-
-This is only intended for debugging purposes.  Do not enable this
-permanently, that would negatively affect performance.  Also note
-that just because git exits with a non-zero exit status and prints
-an error message that usually doesn't mean that it is an error as
-far as Magit is concerned, which is another reason we usually hide
-these error messages.  Whether some error message is relevant in
-the context of some unexpected behavior has to be judged on a case
-by case basis.
-
-The command @code{magit-toggle-git-debug} changes the value of this
-variable.
-@end defvar
-
-@defvar magit-process-extreme-logging
-This option controls whether @code{magit-process-file} logs to the
-@code{*Messages*} buffer.
-
-Only intended for temporary use when you try to figure out how
-Magit uses Git behind the scene.  Output that normally goes to
-the magit-process buffer continues to go there.  Not all output
-goes to either of these two buffers.
-@end defvar
-
-@node Git Process Status
-@subsection Git Process Status
-
-When a Git process is running for side-effects, Magit displays an
-indicator in the mode line, using the @code{magit-mode-line-process} face.
-
-If the Git process exits successfully, the process indicator is
-removed from the mode line immediately.
-
-In the case of a Git error, the process indicator is not removed, but
-is instead highlighted with the @code{magit-mode-line-process-error} face,
-and the error details from the process buffer are provided as a
-tooltip for mouse users.  This error indicator persists in the mode
-line until the next magit buffer refresh.
-
-If you do not wish process errors to be indicated in the mode line,
-customize the @code{magit-process-display-mode-line-error} user option.
-
-Process errors are additionally indicated at the top of the status
-buffer.
-
-@node Running Git Manually
-@subsection Running Git Manually
-
-While Magit provides many Emacs commands to interact with Git, it does
-not cover everything.  In those cases your existing Git knowledge will
-come in handy.  Magit provides some commands for running arbitrary Git
-commands by typing them into the minibuffer, instead of having to
-switch to a shell.
-
-@table @asis
-@item @kbd{!} (@code{magit-run})
-@kindex !
-@findex magit-run
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{! !} (@code{magit-git-command-topdir})
-@kindex ! !
-@findex magit-git-command-topdir
-This command reads a command from the user and executes it in the
-top-level directory of the current working tree.
-
-The string "git " is used as initial input when prompting the user
-for the command.  It can be removed to run another command.
-
-@item @kbd{:} (@code{magit-git-command})
-@itemx @kbd{! p}
-@kindex :
-@kindex ! p
-@findex magit-git-command
-This command reads a command from the user and executes it in
-@code{default-directory}.  With a prefix argument the command is executed
-in the top-level directory of the current working tree instead.
-
-The string "git " is used as initial input when prompting the user
-for the command.  It can be removed to run another command.
-
-@item @kbd{! s} (@code{magit-shell-command-topdir})
-@kindex ! s
-@findex magit-shell-command-topdir
-This command reads a command from the user and executes it in the
-top-level directory of the current working tree.
-
-@item @kbd{! S} (@code{magit-shell-command})
-@kindex ! S
-@findex magit-shell-command
-This command reads a command from the user and executes it in
-@code{default-directory}.  With a prefix argument the command is executed
-in the top-level directory of the current working tree instead.
-@end table
-
-@defopt magit-shell-command-verbose-prompt
-Whether the prompt, used by the above commands when reading a
-shell command, shows the directory in which it will be run.
-@end defopt
-
-These suffix commands start external gui tools.
-
-@table @asis
-@item @kbd{! k} (@code{magit-run-gitk})
-@kindex ! k
-@findex magit-run-gitk
-This command runs @code{gitk} in the current repository.
-
-@item @kbd{! a} (@code{magit-run-gitk-all})
-@kindex ! a
-@findex magit-run-gitk-all
-This command runs @code{gitk --all} in the current repository.
-
-@item @kbd{! b} (@code{magit-run-gitk-branches})
-@kindex ! b
-@findex magit-run-gitk-branches
-This command runs @code{gitk --branches} in the current repository.
-
-@item @kbd{! g} (@code{magit-run-git-gui})
-@kindex ! g
-@findex magit-run-git-gui
-This command runs @code{git gui} in the current repository.
-
-@item @kbd{! m} (@code{magit-git-mergetool})
-@kindex ! m
-@findex magit-git-mergetool
-This command runs @samp{git mergetool --gui} in the current repository.
-
-With a prefix argument this acts as a transient prefix command,
-allowing the user to select the mergetool and change some settings.
-@end table
-
-@node Git Executable
-@subsection Git Executable
-
-When Magit calls Git, then it may do so using the absolute path to the
-@code{git} executable, or using just its name.
-
-When running @code{git} locally and the @code{system-type} is 
@code{windows-nt} (any
-Windows version) or @code{darwin} (macOS) then @code{magit-git-executable} is 
set
-to an absolute path when Magit is loaded.
-
-On Windows it is necessary to use an absolute path because Git comes
-with several wrapper scripts for the actual @code{git} binary, which are also
-placed on @code{$PATH}, and using one of these wrappers instead of the binary
-would degrade performance horribly.  For some macOS users using just
-the name of the executable also performs horribly, so we avoid doing
-that on that platform as well.  On other platforms, using just the
-name seems to work just fine.
-
-Using an absolute path when running @code{git} on a remote machine over
-Tramp, would be problematic to use an absolute path that is suitable
-on the local machine, so a separate option is used to control the name
-or path that is used on remote machines.
-
-@defopt magit-git-executable
-The @code{git} executable used by Magit on the local host.  This should be
-either the absolute path to the executable, or the string "git" to
-let Emacs find the executable itself, using the standard mechanism
-for doing such things.
-@end defopt
-
-@defopt magit-remote-git-executable
-The @code{git} executable used by Magit on remote machines over Tramp.
-Normally this should be just the string "git".  Consider customizing
-@code{tramp-remote-path} instead of this option.
-@end defopt
-
-If Emacs is unable to find the correct executable, then you can
-work around that by explicitly setting the value of one of these two
-options.  Doing that should be considered a kludge; it is better to
-make sure that the order in @code{exec-path} or @code{tramp-remote-path} is 
correct.
-
-Note that @code{exec-path} is set based on the value of the @code{PATH} 
environment
-variable that is in effect when Emacs is started.  If you set @code{PATH} in
-your shell's init files, then that only has an effect on Emacs if you
-start it from that shell (because the environment of a process is only
-passed to its child processes, not to arbitrary other processes).  If
-that is not how you start Emacs, then the @code{exec-path-from-shell} package
-can help; though honestly I consider that a kludge too.
-
-The command @code{magit-debug-git-executable} can be useful to find out where
-Emacs is searching for @code{git}.
-
-@table @asis
-@item @kbd{M-x magit-debug-git-executable}
-@findex magit-debug-git-executable
-This command displays a buffer with information about
-@code{magit-git-executable} and  @code{magit-remote-git-executable}.
-
-@item @kbd{M-x magit-version}
-@findex magit-version
-This command shows the currently used versions of Magit, Git, and
-Emacs in the echo area.  Non-interactively this just returns the
-Magit version.
-@end table
-
-@node Global Git Arguments
-@subsection Global Git Arguments
-
-@defopt magit-git-global-arguments
-The arguments set here are used every time the git executable is run
-as a subprocess.  They are placed right after the executable itself
-and before the git command - as in @code{git HERE... COMMAND REST}.  For
-valid arguments see 
-@ifinfo
-@ref{git,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git";>git(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git(1) manpage.
-@end iftex
-
-Be careful what you add here, especially if you are using Tramp to
-connect to servers with ancient Git versions.  Never remove anything
-that is part of the default value, unless you really know what you
-are doing.  And think very hard before adding something; it will be
-used every time Magit runs Git for any purpose.
-@end defopt
-
-@node Inspecting
-@chapter Inspecting
-
-The functionality provided by Magit can be roughly divided into three
-groups: inspecting existing data, manipulating existing data or adding
-new data, and transferring data.  Of course that is a rather crude
-distinction that often falls short, but it's more useful than no
-distinction at all.  This section is concerned with inspecting data,
-the next two with manipulating and transferring it.  Then follows a
-section about miscellaneous functionality, which cannot easily be fit
-into this distinction.
-
-Of course other distinctions make sense too, e.g., Git's distinction
-between porcelain and plumbing commands, which for the most part is
-equivalent to Emacs' distinction between interactive commands and
-non-interactive functions.  All of the sections mentioned before are
-mainly concerned with the porcelain -- Magit's plumbing layer is
-described later.
-
-@menu
-* Status Buffer::
-* Repository List::
-* Logging::
-* Diffing::
-* Ediffing::
-* References Buffer::
-* Bisecting::
-* Visiting Files and Blobs::
-* Blaming::
-@end menu
-
-@node Status Buffer
-@section Status Buffer
-
-While other Magit buffers contain, e.g., one particular diff or one
-particular log, the status buffer contains the diffs for staged and
-unstaged changes, logs for unpushed and unpulled commits, lists of
-stashes and untracked files, and information related to the current
-branch.
-
-During certain incomplete operations -- for example when a merge
-resulted in a conflict -- additional information is displayed that
-helps proceeding with or aborting the operation.
-
-The command @code{magit-status} displays the status buffer belonging to the
-current repository in another window.  This command is used so often
-that it should be bound globally.  We recommend using @code{C-x g}:
-
-@lisp
-(global-set-key (kbd "C-x g") 'magit-status)
-@end lisp
-
-@table @asis
-@item @kbd{C-x g} (@code{magit-status})
-@kindex C-x g
-@findex magit-status
-When invoked from within an existing Git repository, then this
-command shows the status of that repository in a buffer.
-
-If the current directory isn't located within a Git repository, then
-this command prompts for an existing repository or an arbitrary
-directory, depending on the option @code{magit-repository-directories}, and
-the status for the selected repository is shown instead.
-
-@itemize
-@item
-If that option specifies any existing repositories, then the user
-is asked to select one of them.
-
-@item
-Otherwise the user is asked to select an arbitrary directory using
-regular file-name completion.  If the selected directory is the
-top-level directory of an existing working tree, then the status
-buffer for that is shown.
-
-@item
-Otherwise the user is offered to initialize the selected directory
-as a new repository.  After creating the repository its status
-buffer is shown.
-@end itemize
-
-These fallback behaviors can also be forced using one or more
-prefix arguments:
-
-@itemize
-@item
-With two prefix arguments (or more precisely a numeric prefix
-value of 16 or greater) an arbitrary directory is read, which is
-then acted on as described above.  The same could be accomplished
-using the command @code{magit-init}.
-
-@item
-With a single prefix argument an existing repository is read from
-the user, or if no repository can be found based on the value of
-@code{magit-repository-directories}, then the behavior is the same as with
-two prefix arguments.
-@end itemize
-@end table
-
-@defopt magit-repository-directories
-List of directories that are Git repositories or contain Git
-repositories.
-
-Each element has the form @code{(DIRECTORY . DEPTH)}.  DIRECTORY has to be
-a directory or a directory file-name, a string.  DEPTH, an integer,
-specifies the maximum depth to look for Git repositories.  If it is
-0, then only add DIRECTORY itself.
-
-This option controls which repositories are being listed by
-@code{magit-list-repositories}.  It also affects @code{magit-status} (which 
see)
-in potentially surprising ways (see above).
-@end defopt
-
-@deffn Command magit-status-quick
-This command is an alternative to @code{magit-status} that usually avoids
-refreshing the status buffer.
-
-If the status buffer of the current Git repository exists but isn't
-being displayed in the selected frame, then it is displayed without
-being refreshed.
-
-If the status buffer is being displayed in the selected frame,
-then this command refreshes it.
-
-Prefix arguments have the same meaning as for @code{magit-status},
-and additionally cause the buffer to be refresh.
-
-To use this command add this to your init file:
-
-@lisp
-(global-set-key (kbd "C-x g") 'magit-status-quick).
-@end lisp
-
-If you do that and then for once want to redisplay the buffer and
-also immediately refresh it, then type @code{C-x g} followed by @code{g}.
-
-A possible alternative command is @code{magit-display-repository-buffer}.
-It supports displaying any existing Magit buffer that belongs to the
-current repository; not just the status buffer.
-@end deffn
-
-@deffn Command ido-enter-magit-status
-From an Ido prompt used to open a file, instead drop into
-@code{magit-status}.  This is similar to @code{ido-magic-delete-char}, which,
-despite its name, usually causes a Dired buffer to be created.
-
-To make this command available, use something like:
-
-@lisp
-(add-hook 'ido-setup-hook
-          (lambda ()
-            (define-key ido-completion-map
-              (kbd \"C-x g\") 'ido-enter-magit-status)))
-@end lisp
-
-Starting with Emacs 25.1 the Ido keymaps are defined just once
-instead of every time Ido is invoked, so now you can modify it
-like pretty much every other keymap:
-
-@lisp
-(define-key ido-common-completion-map
-  (kbd \"C-x g\") 'ido-enter-magit-status)
-@end lisp
-@end deffn
-
-@menu
-* Status Sections::
-* Status Header Sections::
-* Status Module Sections::
-* Status Options::
-@end menu
-
-@node Status Sections
-@subsection Status Sections
-
-The contents of status buffers is controlled using the hook
-@code{magit-status-sections-hook}.  See @ref{Section Hooks} to learn about such
-hooks and how to customize them.
-
-@defopt magit-status-sections-hook
-Hook run to insert sections into a status buffer.
-@end defopt
-
-The first function on that hook by default is
-@code{magit-insert-status-headers}; it is described in the next section.
-By default the following functions are also members of that hook:
-
-@defun magit-insert-merge-log
-Insert section for the on-going merge.  Display the heads that are
-being merged.  If no merge is in progress, do nothing.
-@end defun
-
-@defun magit-insert-rebase-sequence
-Insert section for the on-going rebase sequence.
-If no such sequence is in progress, do nothing.
-@end defun
-
-@defun magit-insert-am-sequence
-Insert section for the on-going patch applying sequence.
-If no such sequence is in progress, do nothing.
-@end defun
-
-@defun magit-insert-sequencer-sequence
-Insert section for the on-going cherry-pick or revert sequence.
-If no such sequence is in progress, do nothing.
-@end defun
-
-@defun magit-insert-bisect-output
-While bisecting, insert section with output from @code{git bisect}.
-@end defun
-
-@defun magit-insert-bisect-rest
-While bisecting, insert section visualizing the bisect state.
-@end defun
-
-@defun magit-insert-bisect-log
-While bisecting, insert section logging bisect progress.
-@end defun
-
-@defun magit-insert-untracked-files
-Maybe insert a list or tree of untracked files.
-
-Do so depending on the value of @code{status.showUntrackedFiles}.  Note
-that even if the value is @code{all}, Magit still initially only shows
-directories.  But the directory sections can then be expanded using
-@code{TAB}.
-@end defun
-
-@defun magit-insert-unstaged-changes
-Insert section showing unstaged changes.
-@end defun
-
-@defun magit-insert-staged-changes
-Insert section showing staged changes.
-@end defun
-
-@defun magit-insert-stashes &optional ref heading
-Insert the @code{stashes} section showing reflog for "refs/stash".
-If optional REF is non-nil show reflog for that instead.
-If optional HEADING is non-nil use that as section heading
-instead of "Stashes:".
-@end defun
-
-@defun magit-insert-unpulled-from-upstream
-Insert section showing commits that haven't been pulled from the
-upstream branch yet.
-@end defun
-
-@defun magit-insert-unpulled-from-pushremote
-Insert section showing commits that haven't been pulled from the
-push-remote branch yet.
-@end defun
-
-@defun magit-insert-unpushed-to-upstream
-Insert section showing commits that haven't been pushed to the
-upstream yet.
-@end defun
-
-@defun magit-insert-unpushed-to-pushremote
-Insert section showing commits that haven't been pushed to the
-push-remote yet.
-@end defun
-
-The following functions can also be added to the above hook:
-
-@defun magit-insert-tracked-files
-Insert a tree of tracked files.
-@end defun
-
-@defun magit-insert-ignored-files
-Insert a tree of ignored files.
-Its possible to limit the logs in the current buffer to a certain
-directory using @code{D = f <DIRECTORY> RET g}.  If you do that, then that
-that also affects this command.
-
-The log filter can be used to limit to multiple files.  In that case
-this function only respects the first of the files and only if it is
-a directory.
-@end defun
-
-@defun magit-insert-skip-worktree-files
-Insert a tree of skip-worktree files.
-If the first element of @code{magit-buffer-diff-files} is a
-directory, then limit the list to files below that.  The value
-of that variable can be set using @code{D -- DIRECTORY RET g}.
-@end defun
-
-@defun magit-insert-assumed-unchanged-files
-Insert a tree of files that are assumed to be unchanged.
-If the first element of @code{magit-buffer-diff-files} is a
-directory, then limit the list to files below that.  The value
-of that variable can be set using @code{D -- DIRECTORY RET g}.
-@end defun
-
-@defun magit-insert-unpulled-or-recent-commits
-Insert section showing unpulled or recent commits.
-If an upstream is configured for the current branch and it is
-ahead of the current branch, then show the missing commits.
-Otherwise, show the last @code{magit-log-section-commit-count}
-commits.
-@end defun
-
-@defun magit-insert-recent-commits
-Insert section showing the last @code{magit-log-section-commit-count}
-commits.
-@end defun
-
-@defopt magit-log-section-commit-count
-How many recent commits @code{magit-insert-recent-commits} and
-@code{magit-insert-unpulled-or-recent-commits} (provided there are no
-unpulled commits) show.
-@end defopt
-
-@defun magit-insert-unpulled-cherries
-Insert section showing unpulled commits.
-Like @code{magit-insert-unpulled-commits} but prefix each commit
-that has not been applied yet (i.e., a commit with a patch-id
-not shared with any local commit) with "+", and all others
-with "-".
-@end defun
-
-@defun magit-insert-unpushed-cherries
-Insert section showing unpushed commits.
-Like @code{magit-insert-unpushed-commits} but prefix each commit
-which has not been applied to upstream yet (i.e., a commit with
-a patch-id not shared with any upstream commit) with "+" and
-all others with "-".
-@end defun
-
-See @ref{References Buffer} for some more section inserters, which could be
-used here.
-
-@node Status Header Sections
-@subsection Status Header Sections
-
-The contents of status buffers is controlled using the hook
-@code{magit-status-sections-hook} (see @ref{Status Sections}).
-
-By default @code{magit-insert-status-headers} is the first member of that
-hook variable.
-
-@defun magit-insert-status-headers
-Insert headers sections appropriate for @code{magit-status-mode} buffers.
-The sections are inserted by running the functions on the hook
-@code{magit-status-headers-hook}.
-@end defun
-
-@defopt magit-status-headers-hook
-Hook run to insert headers sections into the status buffer.
-
-This hook is run by @code{magit-insert-status-headers}, which in turn has
-to be a member of @code{magit-status-sections-hook} to be used at all.
-@end defopt
-
-By default the following functions are members of the above hook:
-
-@defun magit-insert-error-header
-Insert a header line showing the message about the Git error that
-just occurred.
-
-This function is only aware of the last error that occur when Git
-was run for side-effects.  If, for example, an error occurs while
-generating a diff, then that error won't be inserted.  Refreshing
-the status buffer causes this section to disappear again.
-@end defun
-
-@defun magit-insert-diff-filter-header
-Insert a header line showing the effective diff filters.
-@end defun
-
-@defun magit-insert-head-branch-header
-Insert a header line about the current branch or detached @code{HEAD}.
-@end defun
-
-@defun magit-insert-upstream-branch-header
-Insert a header line about the branch that is usually pulled into
-the current branch.
-@end defun
-
-@defun magit-insert-push-branch-header
-Insert a header line about the branch that the current branch is
-usually pushed to.
-@end defun
-
-@defun magit-insert-tags-header
-Insert a header line about the current and/or next tag, along with
-the number of commits between the tag and @code{HEAD}.
-@end defun
-
-The following functions can also be added to the above hook:
-
-@defun magit-insert-repo-header
-Insert a header line showing the path to the repository top-level.
-@end defun
-
-@defun magit-insert-remote-header
-Insert a header line about the remote of the current branch.
-
-If no remote is configured for the current branch, then fall back
-showing the "origin" remote, or if that does not exist the first
-remote in alphabetic order.
-@end defun
-
-@defun magit-insert-user-header
-Insert a header line about the current user.
-@end defun
-
-@node Status Module Sections
-@subsection Status Module Sections
-
-The contents of status buffers is controlled using the hook
-@code{magit-status-sections-hook} (see @ref{Status Sections}).
-
-By default @code{magit-insert-modules} is @emph{not} a member of that hook
-variable.
-
-@defun magit-insert-modules
-Insert submodule sections.
-
-Hook @code{magit-module-sections-hook} controls which module sections are
-inserted, and option @code{magit-module-sections-nested} controls whether
-they are wrapped in an additional section.
-@end defun
-
-@defopt magit-module-sections-hook
-Hook run by @code{magit-insert-modules}.
-@end defopt
-
-@defopt magit-module-sections-nested
-This option controls whether @code{magit-insert-modules} wraps inserted
-sections in an additional section.
-
-If this is non-nil, then only a single top-level section is inserted.
-If it is nil, then all sections listed in @code{magit-module-sections-hook}
-become top-level sections.
-@end defopt
-
-@defun magit-insert-modules-overview
-Insert sections for all submodules.  For each section insert the
-path, the branch, and the output of @code{git describe --tags},
-or, failing that, the abbreviated HEAD commit hash.
-
-Press @code{RET} on such a submodule section to show its own status buffer.
-Press @code{RET} on the "Modules" section to display a list of submodules
-in a separate buffer.  This shows additional information not
-displayed in the super-repository's status buffer.
-@end defun
-
-@defun magit-insert-modules-unpulled-from-upstream
-Insert sections for modules that haven't been pulled from the
-upstream yet.  These sections can be expanded to show the respective
-commits.
-@end defun
-
-@defun magit-insert-modules-unpulled-from-pushremote
-Insert sections for modules that haven't been pulled from the
-push-remote yet.  These sections can be expanded to show the
-respective commits.
-@end defun
-
-@defun magit-insert-modules-unpushed-to-upstream
-Insert sections for modules that haven't been pushed to the upstream
-yet.  These sections can be expanded to show the respective commits.
-@end defun
-
-@defun magit-insert-modules-unpushed-to-pushremote
-Insert sections for modules that haven't been pushed to the
-push-remote yet.  These sections can be expanded to show the
-respective commits.
-@end defun
-
-@node Status Options
-@subsection Status Options
-
-@defopt magit-status-margin
-This option specifies whether the margin is initially shown in
-Magit-Status mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-Also see the proceeding section for more options concerning status
-buffers.
-
-@node Repository List
-@section Repository List
-
-@deffn Command magit-list-repositories
-This command displays a list of repositories in a separate buffer.
-
-The option @code{magit-repository-directories} controls which repositories are
-displayed.
-@end deffn
-
-@defopt magit-repolist-columns
-This option controls what columns are displayed by the command
-@code{magit-list-repositories} and how they are displayed.
-
-Each element has the form @code{(HEADER WIDTH FORMAT PROPS)}.
-
-HEADER is the string displayed in the header.  WIDTH is the width
-of the column.  FORMAT is a function that is called with one
-argument, the repository identification (usually its basename),
-and with @code{default-directory} bound to the toplevel of its working
-tree.  It has to return a string to be inserted or nil.  PROPS is
-an alist that supports the keys @code{:right-align}, @code{:pad-right} and
-@code{:sort}.
-
-The @code{:sort} function has a weird interface described in the
-docstring of @code{tabulated-list--get-sort}.  Alternatively @code{<} and
-@code{magit-repolist-version<} can be used as those functions are
-automatically replaced with functions that satisfy the interface.
-Set @code{:sort} to @code{nil} to inhibit sorting; if unspecified, then the
-column is sortable using the default sorter.
-
-You may wish to display a range of numeric columns using just one
-character per column and without any padding between columns, in
-which case you should use an appropriate HEADER, set WIDTH to 1,
-and set @code{:pad-right} to 9. @code{+} is substituted for numbers higher 
than 9.
-@end defopt
-
-@noindent
-The following functions can be added to the above option:
-
-@defun magit-repolist-column-ident
-This function inserts the identification of the repository.  Usually
-this is just its basename.
-@end defun
-
-@defun magit-repolist-column-path
-This function inserts the absolute path of the repository.
-@end defun
-
-@defun magit-repolist-column-version
-This function inserts a description of the repository's @code{HEAD} revision.
-@end defun
-
-@defun magit-repolist-column-branch
-This function inserts the name of the current branch.
-@end defun
-
-@defun magit-repolist-column-upstream
-This function inserts the name of the upstream branch of the current
-branch.
-@end defun
-
-@defun magit-repolist-column-branches
-This function inserts the number of branches.
-@end defun
-
-@defun magit-repolist-column-stashes
-This function inserts the number of stashes.
-@end defun
-
-@defun magit-repolist-column-flag
-This function inserts a flag as specified by
-@code{magit-repolist-column-flag-alist}.
-
-By default this indicates whether there are uncommitted changes.
-
-@itemize
-@item
-@code{N} if there is at least one untracked file.
-@item
-@code{U} if there is at least one unstaged file.
-@item
-@code{S} if there is at least one staged file.
-@end itemize
-
-Only the first one of these that applies is shown.
-@end defun
-
-@defun magit-repolist-column-flags
-This functions insert all flags as specified by
-@code{magit-repolist-column-flag-alist}.
-
-This is an alternative to function @code{magit-repolist-column-flag},
-which only lists the first one found.
-@end defun
-
-@defun magit-repolist-column-unpulled-from-upstream
-This function inserts the number of upstream commits not in the
-current branch.
-@end defun
-
-@defun magit-repolist-column-unpulled-from-pushremote
-This function inserts the number of commits in the push branch but
-not the current branch.
-@end defun
-
-@defun magit-repolist-column-unpushed-to-upstream
-This function inserts the number of commits in the current branch
-but not its upstream.
-@end defun
-
-@defun magit-repolist-column-unpushed-to-pushremote
-This function inserts the number of commits in the current branch
-but not its push branch.
-@end defun
-
-@noindent
-The following commands are available in repolist buffers:
-
-@table @asis
-@item @kbd{@key{RET}} (@code{magit-repolist-status})
-@kindex RET
-@findex magit-repolist-status
-This command shows the status for the repository at point.
-
-@item @kbd{m} (@code{magit-repolist-mark})
-@kindex m
-@findex magit-repolist-mark
-This command marks the repository at point.
-
-@item @kbd{u} (@code{magit-repolist-unmark})
-@kindex u
-@findex magit-repolist-unmark
-This command unmarks the repository at point.
-
-@item @kbd{f} (@code{magit-repolist-fetch})
-@kindex f
-@findex magit-repolist-fetch
-This command fetches all marked repositories.  If no repositories
-are marked, then it offers to fetch all displayed repositories.
-
-@item @kbd{5} (@code{magit-repolist-find-file-other-frame})
-@kindex 5
-@findex magit-repolist-find-file-other-frame
-This command reads a relative file-name (without completion) and
-opens the respective file in each marked repository in a new frame.
-If no repositories are marked, then it offers to do this for all
-displayed repositories.
-@end table
-
-@node Logging
-@section Logging
-
-The status buffer contains logs for the unpushed and unpulled commits,
-but that obviously isn't enough.  The transient prefix command
-@code{magit-log}, on @code{l}, features several suffix commands, which show a
-specific log in a separate log buffer.
-
-Like other transient prefix commands, @code{magit-log} also features several
-infix arguments that can be changed before invoking one of the suffix
-commands.  However, in the case of the log transient, these arguments
-may be taken from those currently in use in the current repository's
-log buffer, depending on the value of @code{magit-prefix-use-buffer-arguments}
-(see @ref{Transient Arguments and Buffer Variables}).
-
-For information about the various arguments, see 
-@ifinfo
-@ref{git-log,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-log";>git-log(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-log(1) manpage.
-@end iftex
-The switch @code{++order=VALUE} is converted to one of 
@code{--author-date-order},
-@code{--date-order}, or @code{--topo-order} before being passed to @code{git 
log}.
-
-The log transient also features several reflog commands.  See @ref{Reflog}.
-
-@table @asis
-@item @kbd{l} (@code{magit-log})
-@kindex l
-@findex magit-log
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{l l} (@code{magit-log-current})
-@kindex l l
-@findex magit-log-current
-Show log for the current branch.  When @code{HEAD} is detached or with a
-prefix argument, show log for one or more revs read from the
-minibuffer.
-
-@item @kbd{l h} (@code{magit-log-head})
-@kindex l h
-@findex magit-log-head
-Show log for @code{HEAD}.
-
-@item @kbd{l u} (@code{magit-log-related})
-@kindex l u
-@findex magit-log-related
-Show log for the current branch, its upstream and its push target.
-When the upstream is a local branch, then also show its own
-upstream.  When @code{HEAD} is detached, then show log for that, the
-previously checked out branch and its upstream and push-target.
-
-@item @kbd{l o} (@code{magit-log-other})
-@kindex l o
-@findex magit-log-other
-Show log for one or more revs read from the minibuffer.  The user
-can input any revision or revisions separated by a space, or even
-ranges, but only branches, tags, and a representation of the
-commit at point are available as completion candidates.
-
-@item @kbd{l L} (@code{magit-log-branches})
-@kindex l L
-@findex magit-log-branches
-Show log for all local branches and @code{HEAD}.
-
-@item @kbd{l b} (@code{magit-log-all-branches})
-@kindex l b
-@findex magit-log-all-branches
-Show log for all local and remote branches and @code{HEAD}.
-
-@item @kbd{l a} (@code{magit-log-all})
-@kindex l a
-@findex magit-log-all
-Show log for all references and @code{HEAD}.
-@end table
-
-Two additional commands that show the log for the file or blob that is
-being visited in the current buffer exists, see @ref{Commands for Buffers 
Visiting Files}.  The command @code{magit-cherry} also shows a log, see
-@ref{Cherries}.
-
-@menu
-* Refreshing Logs::
-* Log Buffer::
-* Log Margin::
-* Select from Log::
-* Reflog::
-* Cherries::
-@end menu
-
-@node Refreshing Logs
-@subsection Refreshing Logs
-
-The transient prefix command @code{magit-log-refresh}, on @code{L}, can be 
used to
-change the log arguments used in the current buffer, without changing
-which log is shown.  This works in dedicated log buffers, but also in
-the status buffer.
-
-@table @asis
-@item @kbd{L} (@code{magit-log-refresh})
-@kindex L
-@findex magit-log-refresh
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{L g} (@code{magit-log-refresh})
-@kindex L g
-@findex magit-log-refresh
-This suffix command sets the local log arguments for the current
-buffer.
-
-@item @kbd{L s} (@code{magit-log-set-default-arguments})
-@kindex L s
-@findex magit-log-set-default-arguments
-This suffix command sets the default log arguments for buffers of
-the same type as that of the current buffer.  Other existing buffers
-of the same type are not affected because their local values have
-already been initialized.
-
-@item @kbd{L w} (@code{magit-log-save-default-arguments})
-@kindex L w
-@findex magit-log-save-default-arguments
-This suffix command sets the default log arguments for buffers of
-the same type as that of the current buffer, and saves the value for
-future sessions.  Other existing buffers of the same type are not
-affected because their local values have already been initialized.
-
-@item @kbd{L L} (@code{magit-toggle-margin})
-@kindex L L
-@findex magit-toggle-margin
-Show or hide the margin.
-@end table
-
-@node Log Buffer
-@subsection Log Buffer
-
-@table @asis
-@item @kbd{L} (@code{magit-log-refresh})
-@kindex L
-@findex magit-log-refresh
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-See @ref{Refreshing Logs}.
-
-@item @kbd{q} (@code{magit-log-bury-buffer})
-@kindex q
-@findex magit-log-bury-buffer
-Bury the current buffer or the revision buffer in the same frame.
-Like @code{magit-mode-bury-buffer} (which see) but with a negative prefix
-argument instead bury the revision buffer, provided it is displayed
-in the current frame.
-
-@item @kbd{C-c C-b} (@code{magit-go-backward})
-@kindex C-c C-b
-@findex magit-go-backward
-Move backward in current buffer's history.
-
-@item @kbd{C-c C-f} (@code{magit-go-forward})
-@kindex C-c C-f
-@findex magit-go-forward
-Move forward in current buffer's history.
-
-@item @kbd{C-c C-n} (@code{magit-log-move-to-parent})
-@kindex C-c C-n
-@findex magit-log-move-to-parent
-Move to a parent of the current commit.  By default, this is the
-first parent, but a numeric prefix can be used to specify another
-parent.
-
-@item @kbd{j} (@code{magit-log-move-to-revision})
-@kindex j
-@findex magit-log-move-to-revision
-Read a revision and move to it in current log buffer.
-
-If the chosen reference or revision isn't being displayed in
-the current log buffer, then inform the user about that and do
-nothing else.
-
-If invoked outside any log buffer, then display the log buffer
-of the current repository first; creating it if necessary.
-
-@item @kbd{@key{SPC}} (@code{magit-diff-show-or-scroll-up})
-@kindex SPC
-@findex magit-diff-show-or-scroll-up
-Update the commit or diff buffer for the thing at point.
-
-Either show the commit or stash at point in the appropriate buffer,
-or if that buffer is already being displayed in the current frame
-and contains information about that commit or stash, then instead
-scroll the buffer up.  If there is no commit or stash at point, then
-prompt for a commit.
-
-@item @kbd{@key{DEL}} (@code{magit-diff-show-or-scroll-down})
-@kindex DEL
-@findex magit-diff-show-or-scroll-down
-Update the commit or diff buffer for the thing at point.
-
-Either show the commit or stash at point in the appropriate buffer,
-or if that buffer is already being displayed in the current frame
-and contains information about that commit or stash, then instead
-scroll the buffer down.  If there is no commit or stash at point,
-then prompt for a commit.
-
-@item @kbd{=} (@code{magit-log-toggle-commit-limit})
-@kindex =
-@findex magit-log-toggle-commit-limit
-Toggle the number of commits the current log buffer is limited to.
-If the number of commits is currently limited, then remove that
-limit.  Otherwise set it to 256.
-
-@item @kbd{+} (@code{magit-log-double-commit-limit})
-@kindex +
-@findex magit-log-double-commit-limit
-Double the number of commits the current log buffer is limited to.
-
-@item @kbd{-} (@code{magit-log-half-commit-limit})
-@kindex -
-@findex magit-log-half-commit-limit
-Half the number of commits the current log buffer is limited to.
-@end table
-
-@defopt magit-log-auto-more
-Insert more log entries automatically when moving past the last
-entry.  Only considered when moving past the last entry with
-@code{magit-goto-*-section} commands.
-@end defopt
-
-@defopt magit-log-show-refname-after-summary
-Whether to show the refnames after the commit summaries.  This is
-useful if you use really long branch names.
-@end defopt
-
-@defopt magit-log-show-color-graph-limit
-When showing more commits than specified by this option, then the
-@code{--color} argument, if specified, is silently dropped.  This is
-necessary because the @code{ansi-color} library, which is used to turn
-control sequences into faces, is just too slow.
-@end defopt
-
-@defopt magit-log-show-signatures-limit
-When showing more commits than specified by this option, then the
-@code{--show-signature} argument, if specified, is silently dropped.  This
-is necessary because checking the signature of a large number of
-commits is just too slow.
-@end defopt
-
-Magit displays references in logs a bit differently from how Git does
-it.
-
-Local branches are blue and remote branches are green.  Of course that
-depends on the used theme, as do the colors used for other types of
-references.  The current branch has a box around it, as do remote
-branches that are their respective remote's @code{HEAD} branch.
-
-If a local branch and its push-target point at the same commit, then
-their names are combined to preserve space and to make that
-relationship visible.  For example:
-
-@example
-origin/feature
-[green][blue-]
-
-instead of
-
-feature origin/feature
-[blue-] [green-------]
-@end example
-
-Also note that while the transient features the @code{--show-signature}
-argument, that won't actually be used when enabled, because Magit
-defaults to use just one line per commit.  Instead the commit
-colorized to indicate the validity of the signed commit object,
-using the faces named @code{magit-signature-*} (which see).
-
-For a description of @code{magit-log-margin} see @ref{Log Margin}.
-
-@node Log Margin
-@subsection Log Margin
-
-In buffers which show one or more logs, it is possible to show
-additional information about each commit in the margin.  The options
-used to configure the margin are named @code{magit-INFIX-margin}, where INFIX
-is the same as in the respective major-mode @code{magit-INFIX-mode}.  In
-regular log buffers that would be @code{magit-log-margin}.
-
-@defopt magit-log-margin
-This option specifies whether the margin is initially shown in
-Magit-Log mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-You can change the STYLE and AUTHOR-WIDTH of all @code{magit-INFIX-margin}
-options to the same values by customizing @code{magit-log-margin} 
@strong{before}
-@code{magit} is loaded.  If you do that, then the respective values for the
-other options will default to what you have set for that variable.
-Likewise if you set INIT in @code{magit-log-margin} to @code{nil}, then that 
is used
-in the default of all other options.  But setting it to @code{t}, i.e.
-re-enforcing the default for that option, does not carry to other
-options.
-
-@defopt magit-log-margin-show-committer-date
-This option specifies whether to show the committer date in the
-margin.  This option only controls whether the committer date is
-displayed instead of the author date.  Whether some date is
-displayed in the margin and whether the margin is displayed at all
-is controlled by other options.
-@end defopt
-
-@table @asis
-@item @kbd{L} (@code{magit-margin-settings})
-@kindex L
-@findex magit-margin-settings
-This transient prefix command binds the following suffix commands,
-each of which changes the appearance of the margin in some way.
-@end table
-
-In some buffers that support the margin, @code{L} is instead bound to
-@code{magit-log-refresh}, but that transient features the same commands, and
-then some other unrelated commands.
-
-@table @asis
-@item @kbd{L L} (@code{magit-toggle-margin})
-@kindex L L
-@findex magit-toggle-margin
-This command shows or hides the margin.
-
-@item @kbd{L l} (@code{magit-cycle-margin-style})
-@kindex L l
-@findex magit-cycle-margin-style
-This command cycles the style used for the margin.
-
-@item @kbd{L d} (@code{magit-toggle-margin-details})
-@kindex L d
-@findex magit-toggle-margin-details
-This command shows or hides details in the margin.
-@end table
-
-@node Select from Log
-@subsection Select from Log
-
-When the user has to select a recent commit that is reachable from
-@code{HEAD}, using regular completion would be inconvenient (because most
-humans cannot remember hashes or "HEAD~5", at least not without double
-checking).  Instead a log buffer is used to select the commit, which
-has the advantage that commits are presented in order and with the
-commit message.
-
-Such selection logs are used when selecting the beginning of a rebase
-and when selecting the commit to be squashed into.
-
-In addition to the key bindings available in all log buffers, the
-following additional key bindings are available in selection log
-buffers:
-
-@table @asis
-@item @kbd{C-c C-c} (@code{magit-log-select-pick})
-@kindex C-c C-c
-@findex magit-log-select-pick
-Select the commit at point and act on it.  Call
-@code{magit-log-select-pick-function} with the selected commit as
-argument.
-
-@item @kbd{C-c C-k} (@code{magit-log-select-quit})
-@kindex C-c C-k
-@findex magit-log-select-quit
-Abort selecting a commit, don't act on any commit.
-@end table
-
-@defopt magit-log-select-margin
-This option specifies whether the margin is initially shown in
-Magit-Log-Select mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-@node Reflog
-@subsection Reflog
-
-Also see 
-@ifinfo
-@ref{git-reflog,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-reflog";>git-reflog(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-reflog(1) manpage.
-@end iftex
-
-These reflog commands are available from the log transient.  See
-@ref{Logging}.
-
-@table @asis
-@item @kbd{l r} (@code{magit-reflog-current})
-@kindex l r
-@findex magit-reflog-current
-Display the reflog of the current branch.
-
-@item @kbd{l O} (@code{magit-reflog-other})
-@kindex l O
-@findex magit-reflog-other
-Display the reflog of a branch or another ref.
-
-@item @kbd{l H} (@code{magit-reflog-head})
-@kindex l H
-@findex magit-reflog-head
-Display the @code{HEAD} reflog.
-@end table
-
-@defopt magit-reflog-margin
-This option specifies whether the margin is initially shown in
-Magit-Reflog mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-@node Cherries
-@subsection Cherries
-
-Cherries are commits that haven't been applied upstream (yet), and are
-usually visualized using a log.  Each commit is prefixed with @code{-} if it
-has an equivalent in the upstream and @code{+} if it does not, i.e., if it is
-a cherry.
-
-The command @code{magit-cherry} shows cherries for a single branch, but the
-references buffer (see @ref{References Buffer}) can show cherries for
-multiple "upstreams" at once.
-
-Also see 
-@ifinfo
-@ref{git-reflog,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-reflog";>git-reflog(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-reflog(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{Y} (@code{magit-cherry})
-@kindex Y
-@findex magit-cherry
-Show commits that are in a certain branch but that have not been
-merged in the upstream branch.
-@end table
-
-@defopt magit-cherry-margin
-This option specifies whether the margin is initially shown in
-Magit-Cherry mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-@node Diffing
-@section Diffing
-
-The status buffer contains diffs for the staged and unstaged commits,
-but that obviously isn't enough.  The transient prefix command
-@code{magit-diff}, on @code{d}, features several suffix commands, which show a
-specific diff in a separate diff buffer.
-
-Like other transient prefix commands, @code{magit-diff} also features several
-infix arguments that can be changed before invoking one of the suffix
-commands.  However, in the case of the diff transient, these arguments may
-be taken from those currently in use in the current repository's diff
-buffer, depending on the value of @code{magit-prefix-use-buffer-arguments}
-(see @ref{Transient Arguments and Buffer Variables}).
-
-Also see 
-@ifinfo
-@ref{git-diff,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-diff";>git-diff(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-diff(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{d} (@code{magit-diff})
-@kindex d
-@findex magit-diff
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{d d} (@code{magit-diff-dwim})
-@kindex d d
-@findex magit-diff-dwim
-Show changes for the thing at point.
-
-@item @kbd{d r} (@code{magit-diff-range})
-@kindex d r
-@findex magit-diff-range
-Show differences between two commits.
-
-RANGE should be a range (A..B or A@dots{}B) but can also be a single
-commit.  If one side of the range is omitted, then it defaults to
-@code{HEAD}.  If just a commit is given, then changes in the working tree
-relative to that commit are shown.
-
-If the region is active, use the revisions on the first and last
-line of the region.  With a prefix argument, instead of diffing the
-revisions, choose a revision to view changes along, starting at the
-common ancestor of both revisions (i.e., use a "@dots{}"  range).
-
-@item @kbd{d w} (@code{magit-diff-working-tree})
-@kindex d w
-@findex magit-diff-working-tree
-Show changes between the current working tree and the @code{HEAD} commit.
-With a prefix argument show changes between the working tree and a
-commit read from the minibuffer.
-
-@item @kbd{d s} (@code{magit-diff-staged})
-@kindex d s
-@findex magit-diff-staged
-Show changes between the index and the @code{HEAD} commit.  With a prefix
-argument show changes between the index and a commit read from the
-minibuffer.
-
-@item @kbd{d u} (@code{magit-diff-unstaged})
-@kindex d u
-@findex magit-diff-unstaged
-Show changes between the working tree and the index.
-
-@item @kbd{d p} (@code{magit-diff-paths})
-@kindex d p
-@findex magit-diff-paths
-Show changes between any two files on disk.
-@end table
-
-All of the above suffix commands update the repository's diff buffer.
-The diff transient also features two commands which show differences
-in another buffer:
-
-@table @asis
-@item @kbd{d c} (@code{magit-show-commit})
-@kindex d c
-@findex magit-show-commit
-Show the commit at point.  If there is no commit at point or with a
-prefix argument, prompt for a commit.
-
-@item @kbd{d t} (@code{magit-stash-show})
-@kindex d t
-@findex magit-stash-show
-Show all diffs of a stash in a buffer.
-@end table
-
-Two additional commands that show the diff for the file or blob that
-is being visited in the current buffer exists, see @ref{Commands for Buffers 
Visiting Files}.
-
-@menu
-* Refreshing Diffs::
-* Commands Available in Diffs::
-* Diff Options::
-* Revision Buffer::
-@end menu
-
-@node Refreshing Diffs
-@subsection Refreshing Diffs
-
-The transient prefix command @code{magit-diff-refresh}, on @code{D}, can be 
used to
-change the diff arguments used in the current buffer, without changing
-which diff is shown.  This works in dedicated diff buffers, but also
-in the status buffer.
-
-(There is one exception; diff arguments cannot be changed in buffers
-created by @code{magit-merge-preview} because the underlying Git command does
-not support these arguments.)
-
-@table @asis
-@item @kbd{D} (@code{magit-diff-refresh})
-@kindex D
-@findex magit-diff-refresh
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{D g} (@code{magit-diff-refresh})
-@kindex D g
-@findex magit-diff-refresh
-This suffix command sets the local diff arguments for the current
-buffer.
-
-@item @kbd{D s} (@code{magit-diff-set-default-arguments})
-@kindex D s
-@findex magit-diff-set-default-arguments
-This suffix command sets the default diff arguments for buffers of
-the same type as that of the current buffer.  Other existing buffers
-of the same type are not affected because their local values have
-already been initialized.
-
-@item @kbd{D w} (@code{magit-diff-save-default-arguments})
-@kindex D w
-@findex magit-diff-save-default-arguments
-This suffix command sets the default diff arguments for buffers of
-the same type as that of the current buffer, and saves the value for
-future sessions.  Other existing buffers of the same type are not
-affected because their local values have already been initialized.
-
-@item @kbd{D t} (@code{magit-diff-toggle-refine-hunk})
-@kindex D t
-@findex magit-diff-toggle-refine-hunk
-This command toggles hunk refinement on or off.
-
-@item @kbd{D r} (@code{magit-diff-switch-range-type})
-@kindex D r
-@findex magit-diff-switch-range-type
-This command converts the diff range type from "revA..revB" to
-"revB@dots{}revA", or vice versa.
-
-@item @kbd{D f} (@code{magit-diff-flip-revs})
-@kindex D f
-@findex magit-diff-flip-revs
-This command swaps revisions in the diff range from "revA..revB"
-to "revB..revA", or vice versa.
-
-@item @kbd{D F} (@code{magit-diff-toggle-file-filter})
-@kindex D F
-@findex magit-diff-toggle-file-filter
-This command toggles the file restriction of the diffs in the
-current buffer, allowing you to quickly switch between viewing all
-the changes in the commit and the restricted subset.  As a special
-case, when this command is called from a log buffer, it toggles the
-file restriction in the repository's revision buffer, which is
-useful when you display a revision from a log buffer that is
-restricted to a file or files.
-@end table
-
-In addition to the above transient, which allows changing any of the
-supported arguments, there also exist some commands that change only
-a particular argument.
-
-@table @asis
-@item @kbd{-} (@code{magit-diff-less-context})
-@kindex -
-@findex magit-diff-less-context
-This command decreases the context for diff hunks by COUNT lines.
-
-@item @kbd{+} (@code{magit-diff-more-context})
-@kindex +
-@findex magit-diff-more-context
-This command increases the context for diff hunks by COUNT lines.
-
-@item @kbd{0} (@code{magit-diff-default-context})
-@kindex 0
-@findex magit-diff-default-context
-This command resets the context for diff hunks to the default height.
-@end table
-
-The following commands quickly change what diff is being displayed
-without having to using one of the diff transient.
-
-@table @asis
-@item @kbd{C-c C-d} (@code{magit-diff-while-committing})
-@kindex C-c C-d
-@findex magit-diff-while-committing
-While committing, this command shows the changes that are about to
-be committed.  While amending, invoking the command again toggles
-between showing just the new changes or all the changes that will be
-committed.
-
-This binding is available in the diff buffer as well as the commit
-message buffer.
-
-@item @kbd{C-c C-b} (@code{magit-go-backward})
-@kindex C-c C-b
-@findex magit-go-backward
-This command moves backward in current buffer's history.
-
-@item @kbd{C-c C-f} (@code{magit-go-forward})
-@kindex C-c C-f
-@findex magit-go-forward
-This command moves forward in current buffer's history.
-@end table
-
-@node Commands Available in Diffs
-@subsection Commands Available in Diffs
-
-Some commands are only available if point is inside a diff.
-
-@code{magit-diff-visit-file} and related commands visit the appropriate
-version of the file that the diff at point is about.  Likewise
-@code{magit-diff-visit-worktree-file} and related commands visit the worktree
-version of the file that the diff at point is about.  See @ref{Visiting Files 
and Blobs from a Diff} for more information and the key bindings.
-
-@table @asis
-@item @kbd{C-c C-t} (@code{magit-diff-trace-definition})
-@kindex C-c C-t
-@findex magit-diff-trace-definition
-This command shows a log for the definition at point.
-@end table
-
-@defopt magit-log-trace-definition-function
-The function specified by this option is used by
-@code{magit-log-trace-definition} to determine the function at point.  For
-major-modes that have special needs, you could set the local value
-using the mode's hook.
-@end defopt
-
-@table @asis
-@item @kbd{C-c C-e} (@code{magit-diff-edit-hunk-commit})
-@kindex C-c C-e
-@findex magit-diff-edit-hunk-commit
-From a hunk, this command edits the respective commit and visits
-the file.
-
-First it visits the file being modified by the hunk at the correct
-location using @code{magit-diff-visit-file}.  This actually visits a blob.
-When point is on a diff header, not within an individual hunk, then
-this visits the blob the first hunk is about.
-
-Then it invokes @code{magit-edit-line-commit}, which uses an interactive
-rebase to make the commit editable, or if that is not possible
-because the commit is not reachable from @code{HEAD} by checking out that
-commit directly.  This also causes the actual worktree file to be
-visited.
-
-Neither the blob nor the file buffer are killed when finishing
-the rebase.  If that is undesirable, then it might be better to
-use @code{magit-rebase-edit-commit} instead of this command.
-
-@item @kbd{j} (@code{magit-jump-to-diffstat-or-diff})
-@kindex j
-@findex magit-jump-to-diffstat-or-diff
-This command jumps to the diffstat or diff.  When point is on a file
-inside the diffstat section, then jump to the respective diff
-section.  Otherwise, jump to the diffstat section or a child
-thereof.
-@end table
-
-The next two commands are not specific to Magit-Diff mode (or and
-Magit buffer for that matter), but it might be worth pointing out
-that they are available here too.
-
-@table @asis
-@item @kbd{@key{SPC}} (@code{scroll-up})
-@kindex SPC
-@findex scroll-up
-This command scrolls text upward.
-
-@item @kbd{@key{DEL}} (@code{scroll-down})
-@kindex DEL
-@findex scroll-down
-This command scrolls text downward.
-@end table
-
-@node Diff Options
-@subsection Diff Options
-
-@defopt magit-diff-refine-hunk
-Whether to show word-granularity differences within diff hunks.
-
-@itemize
-@item
-@code{nil} Never show fine differences.
-@item
-@code{t} Show fine differences for the current diff hunk only.
-@item
-@code{all} Show fine differences for all displayed diff hunks.
-@end itemize
-@end defopt
-
-@defopt magit-diff-refine-ignore-whitespace
-Whether to ignore whitespace changes in word-granularity
-differences.
-@end defopt
-
-@defopt magit-diff-adjust-tab-width
-Whether to adjust the width of tabs in diffs.
-
-Determining the correct width can be expensive if it requires
-opening large and/or many files, so the widths are cached in the
-variable @code{magit-diff--tab-width-cache}.  Set that to nil to invalidate
-the cache.
-
-@itemize
-@item
-@code{nil} Never adjust tab width.  Use `tab-width's value from the Magit
-buffer itself instead.
-
-@item
-@code{t} If the corresponding file-visiting buffer exits, then use
-@code{tab-width}'s value from that buffer.  Doing this is cheap, so this
-value is used even if a corresponding cache entry exists.
-
-@item
-@code{always} If there is no such buffer, then temporarily visit the file
-to determine the value.
-
-@item
-NUMBER Like @code{always}, but don't visit files larger than NUMBER
-bytes.
-@end itemize
-@end defopt
-
-@defopt magit-diff-paint-whitespace
-Specify where to highlight whitespace errors.
-
-See @code{magit-diff-highlight-trailing},
-@code{magit-diff-highlight-indentation}.  The symbol @code{t} means in all
-diffs, @code{status} means only in the status buffer, and nil means
-nowhere.
-
-@itemize
-@item
-@code{nil} Never highlight whitespace errors.
-@item
-@code{t} Highlight whitespace errors everywhere.
-@item
-@code{uncommitted} Only highlight whitespace errors in diffs showing
-uncommitted changes.  For backward compatibility @code{status} is treated
-as a synonym.
-@end itemize
-@end defopt
-
-@defopt magit-diff-paint-whitespace-lines
-Specify in what kind of lines to highlight whitespace errors.
-
-@itemize
-@item
-@code{t} Highlight only in added lines.
-@item
-@code{both} Highlight in added and removed lines.
-@item
-@code{all} Highlight in added, removed and context lines.
-@end itemize
-@end defopt
-
-@defopt magit-diff-highlight-trailing
-Whether to highlight whitespace at the end of a line in diffs.  Used
-only when @code{magit-diff-paint-whitespace} is non-nil.
-@end defopt
-
-@defopt magit-diff-highlight-indentation
-This option controls whether to highlight the indentation in case it
-used the "wrong" indentation style.  Indentation is only highlighted
-if @code{magit-diff-paint-whitespace} is also non-nil.
-
-The value is an alist of the form @code{((REGEXP . INDENT)...)}.  The path
-to the current repository is matched against each element in reverse
-order.  Therefore if a REGEXP matches, then earlier elements are not
-tried.
-
-If the used INDENT is @code{tabs}, highlight indentation with tabs.  If
-INDENT is an integer, highlight indentation with at least that many
-spaces.  Otherwise, highlight neither.
-@end defopt
-
-@defopt magit-diff-hide-trailing-cr-characters
-Whether to hide ^M characters at the end of a line in diffs.
-@end defopt
-
-@defopt magit-diff-highlight-hunk-region-functions
-This option specifies the functions used to highlight the
-hunk-internal region.
-
-@code{magit-diff-highlight-hunk-region-dim-outside} overlays the outside of
-the hunk internal selection with a face that causes the added and
-removed lines to have the same background color as context lines.
-This function should not be removed from the value of this option.
-
-@code{magit-diff-highlight-hunk-region-using-overlays} and
-@code{magit-diff-highlight-hunk-region-using-underline} emphasize the
-region by placing delimiting horizontal lines before and after it.
-Both of these functions have glitches which cannot be fixed due to
-limitations of Emacs' display engine.  For more information see
-@uref{https://github.com/magit/magit/issues/2758} ff.
-
-Instead of, or in addition to, using delimiting horizontal lines,
-to emphasize the boundaries, you may wish to emphasize the text
-itself, using @code{magit-diff-highlight-hunk-region-using-face}.
-
-In terminal frames it's not possible to draw lines as the overlay
-and underline variants normally do, so there they fall back to
-calling the face function instead.
-@end defopt
-
-@defopt magit-diff-unmarked-lines-keep-foreground
-This option controls whether added and removed lines outside the
-hunk-internal region only lose their distinct background color or
-also the foreground color.  Whether the outside of the region is
-dimmed at all depends on @code{magit-diff-highlight-hunk-region-functions}.
-@end defopt
-
-@defopt magit-diff-extra-stat-arguments
-This option specifies additional arguments to be used alongside
-@code{--stat}.
-
-The value is a list of zero or more arguments or a function that
-takes no argument and returns such a list.  These arguments are
-allowed here: @code{--stat-width}, @code{--stat-name-width},
-@code{--stat-graph-width} and @code{--compact-summary}.  Also see 
-@ifinfo
-@ref{git-diff,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-diff";>git-diff(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-diff(1) manpage.
-@end iftex
-@end defopt
-
-@node Revision Buffer
-@subsection Revision Buffer
-
-@defopt magit-revision-insert-related-refs
-Whether to show related branches in revision buffers.
-
-@itemize
-@item
-@code{nil} Don't show any related branches.
-@item
-@code{t} Show related local branches.
-@item
-@code{all} Show related local and remote branches.
-@item
-@code{mixed} Show all containing branches and local merged branches.
-@end itemize
-@end defopt
-
-@defopt magit-revision-show-gravatars
-Whether to show gravatar images in revision buffers.
-
-If @code{nil}, then don't insert any gravatar images.  If @code{t}, then insert
-both images.  If @code{author} or @code{committer}, then insert only the
-respective image.
-
-If you have customized the option @code{magit-revision-headers-format}
-and want to insert the images then you might also have to specify
-where to do so.  In that case the value has to be a cons-cell of
-two regular expressions.  The car specifies where to insert the
-author's image.  The top half of the image is inserted right
-after the matched text, the bottom half on the next line in the
-same column.  The cdr specifies where to insert the committer's
-image, accordingly.  Either the car or the cdr may be nil."
-@end defopt
-
-@defopt magit-revision-use-hash-sections
-Whether to turn hashes inside the commit message into sections.
-
-If non-nil, then hashes inside the commit message are turned into
-@code{commit} sections.  There is a trade off to be made between
-performance and reliability:
-
-@itemize
-@item
-@code{slow} calls git for every word to be absolutely sure.
-@item
-@code{quick} skips words less than seven characters long.
-@item
-@code{quicker} additionally skips words that don't contain a number.
-@item
-@code{quickest} uses all words that are at least seven characters long
-and which contain at least one number as well as at least one
-letter.
-@end itemize
-
-If nil, then no hashes are turned into sections, but you can still
-visit the commit at point using "RET".
-@end defopt
-
-The diffs shown in the revision buffer may be automatically restricted
-to a subset of the changed files.  If the revision buffer is displayed
-from a log buffer, the revision buffer will share the same file
-restriction as that log buffer (also see the command
-@code{magit-diff-toggle-file-filter}).
-
-@defopt magit-revision-filter-files-on-follow
-Whether showing a commit from a log buffer honors the log's file
-filter when the log arguments include @code{--follow}.
-
-When this option is nil, displaying a commit from a log ignores the
-log's file filter if the log arguments include @code{--follow}.  Doing so
-avoids showing an empty diff in revision buffers for commits before
-a rename event.  In such cases, the @code{--patch} argument of the log
-transient can be used to show the file-restricted diffs inline.
-
-Set this option to non-nil to keep the log's file restriction even
-if @code{--follow} is present in the log arguments.
-@end defopt
-
-If the revision buffer is not displayed from a log buffer, the file
-restriction is determined as usual (see @ref{Transient Arguments and Buffer 
Variables}).
-
-@node Ediffing
-@section Ediffing
-
-This section describes how to enter Ediff from Magit buffers.  For
-information on how to use Ediff itself, see @ref{Top,,,ediff,}.
-
-@table @asis
-@item @kbd{e} (@code{magit-ediff-dwim})
-@kindex e
-@findex magit-ediff-dwim
-Compare, stage, or resolve using Ediff.
-
-This command tries to guess what file, and what commit or range the
-user wants to compare, stage, or resolve using Ediff.  It might only
-be able to guess either the file, or range/commit, in which case
-the user is asked about the other.  It might not always guess right,
-in which case the appropriate @code{magit-ediff-*} command has to be used
-explicitly.  If it cannot read the user's mind at all, then it asks
-the user for a command to run.
-
-@item @kbd{E} (@code{magit-ediff})
-@kindex E
-@findex magit-ediff
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{E r} (@code{magit-ediff-compare})
-@kindex E r
-@findex magit-ediff-compare
-Compare two revisions of a file using Ediff.
-
-If the region is active, use the revisions on the first and last
-line of the region.  With a prefix argument, instead of diffing the
-revisions, choose a revision to view changes along, starting at the
-common ancestor of both revisions (i.e., use a "@dots{}"  range).
-
-@item @kbd{E m} (@code{magit-ediff-resolve-rest})
-@kindex E m
-@findex magit-ediff-resolve-rest
-This command allows you to resolve outstanding conflicts in the file
-at point using Ediff.  If there is no file at point or if it doesn't
-have any unmerged changes, then this command prompts for a file.
-
-Provided that the value of @code{merge.conflictstyle} is @code{diff3}, you can
-view the file's merge-base revision using @code{/} in the Ediff control
-buffer.
-
-The A, B and Ancestor buffers are constructed from the conflict
-markers in the worktree file.  Because you and/or Git may have
-already resolved some conflicts, that means that these buffers
-may not contain the actual versions from the respective blobs.
-
-@item @kbd{E M} (@code{magit-ediff-resolve-all})
-@kindex E M
-@findex magit-ediff-resolve-all
-This command allows you to resolve all conflicts in the file at
-point using Ediff.  If there is no file at point or if it doesn't
-have any unmerged changes, then this command prompts for a file.
-
-Provided that the value of @code{merge.conflictstyle} is @code{diff3}, you can
-view the file's merge-base revision using @code{/} in the Ediff control
-buffer.
-
-First the file in the worktree is moved aside, appending the suffix
-@samp{.ORIG}, so that you could later go back to that version.  Then it is
-reconstructed from the two sides of the conflict and the merge-base,
-if available.
-
-It would be nice if the worktree file were just used as-is, but
-Ediff does not support that.  This means that all conflicts, that
-Git has already resolved, are restored.  On the other hand Ediff
-also tries to resolve conflicts, and in many cases Ediff and Git
-should produce similar results.
-
-However if you have already resolved some conflicts manually, then
-those changes are discarded (though you can recover them from the
-backup file).  In such cases @code{magit-ediff-resolve-rest} might be more
-suitable.
-
-The advantage that this command has over @code{magit-ediff-resolve-rest}
-is that the A, B and Ancestor buffers correspond to blobs from the
-respective commits, allowing you to inspect a side in context and
-to use Magit commands in these buffers to do so.  Blame and log
-commands are particularly useful here.
-
-@item @kbd{E t} (@code{magit-git-mergetool})
-@kindex E t
-@findex magit-git-mergetool
-This command does not actually use Ediff.  While it serves the same
-purpose as @samp{magit-ediff-resolve-rest}, it uses @samp{git mergetool --gui} 
to
-resolve conflicts.
-
-With a prefix argument this acts as a transient prefix command,
-allowing the user to select the mergetool and change some settings.
-
-@item @kbd{E s} (@code{magit-ediff-stage})
-@kindex E s
-@findex magit-ediff-stage
-Stage and unstage changes to a file using Ediff, defaulting to the
-file at point.
-
-@item @kbd{E u} (@code{magit-ediff-show-unstaged})
-@kindex E u
-@findex magit-ediff-show-unstaged
-Show unstaged changes to a file using Ediff.
-
-@item @kbd{E i} (@code{magit-ediff-show-staged})
-@kindex E i
-@findex magit-ediff-show-staged
-Show staged changes to a file using Ediff.
-
-@item @kbd{E w} (@code{magit-ediff-show-working-tree})
-@kindex E w
-@findex magit-ediff-show-working-tree
-Show changes in a file between @code{HEAD} and working tree using Ediff.
-
-@item @kbd{E c} (@code{magit-ediff-show-commit})
-@kindex E c
-@findex magit-ediff-show-commit
-Show changes to a file introduced by a commit using Ediff.
-
-@item @kbd{E z} (@code{magit-ediff-show-stash})
-@kindex E z
-@findex magit-ediff-show-stash
-Show changes to a file introduced by a stash using Ediff.
-@end table
-
-@defopt magit-ediff-dwim-resolve-function
-This option controls which function @code{magit-ediff-dwim} uses to resolve
-conflicts.  One of @code{magit-ediff-resolve-rest}, 
@code{magit-ediff-resolve-all}
-or @code{magit-git-mergetool}; which are all discussed above.
-@end defopt
-
-@defopt magit-ediff-dwim-show-on-hunks
-This option controls what command @code{magit-ediff-dwim} calls when
-point is on uncommitted hunks.  When nil, always run
-@code{magit-ediff-stage}.  Otherwise, use @code{magit-ediff-show-staged} and
-@code{magit-ediff-show-unstaged} to show staged and unstaged changes,
-respectively.
-@end defopt
-
-@defopt magit-ediff-show-stash-with-index
-This option controls whether @code{magit-ediff-show-stash} includes a
-buffer containing the file's state in the index at the time the
-stash was created.  This makes it possible to tell which changes in
-the stash were staged.
-@end defopt
-
-@defopt magit-ediff-quit-hook
-This hook is run after quitting an Ediff session that was created
-using a Magit command.  The hook functions are run inside the Ediff
-control buffer, and should not change the current buffer.
-
-This is similar to @code{ediff-quit-hook} but takes the needs of Magit into
-account.  The regular @code{ediff-quit-hook} is ignored by Ediff sessions
-that were created using a Magit command.
-@end defopt
-
-@node References Buffer
-@section References Buffer
-
-@table @asis
-@item @kbd{y} (@code{magit-show-refs})
-@kindex y
-@findex magit-show-refs
-This command lists branches and tags in a dedicated buffer.
-
-However if this command is invoked again from this buffer or if it
-is invoked with a prefix argument, then it acts as a transient
-prefix command, which binds the following suffix commands and some
-infix arguments.
-@end table
-
-All of the following suffix commands list exactly the same branches
-and tags.  The only difference the optional feature that can be
-enabled by changing the value of @code{magit-refs-show-commit-count} (see
-below).  These commands specify a different branch or commit against
-which all the other references are compared.
-
-@table @asis
-@item @kbd{y y} (@code{magit-show-refs-head})
-@kindex y y
-@findex magit-show-refs-head
-This command lists branches and tags in a dedicated buffer.  Each
-reference is being compared with @code{HEAD}.
-
-@item @kbd{y c} (@code{magit-show-refs-current})
-@kindex y c
-@findex magit-show-refs-current
-This command lists branches and tags in a dedicated buffer.  Each
-reference is being compared with the current branch or @code{HEAD} if it
-is detached.
-
-@item @kbd{y o} (@code{magit-show-refs-other})
-@kindex y o
-@findex magit-show-refs-other
-This command lists branches and tags in a dedicated buffer.  Each
-reference is being compared with a branch read from the user.
-
-@item @kbd{y r} (@code{magit-refs-set-show-commit-count})
-@kindex y r
-@findex magit-refs-set-show-commit-count
-This command changes for which refs the commit count is shown.
-@end table
-
-@defopt magit-refs-show-commit-count
-Whether to show commit counts in Magit-Refs mode buffers.
-
-@itemize
-@item
-@code{all} Show counts for branches and tags.
-@item
-@code{branch} Show counts for branches only.
-@item
-@code{nil} Never show counts.
-@end itemize
-
-The default is @code{nil} because anything else can be very expensive.
-@end defopt
-
-@defopt magit-refs-pad-commit-counts
-Whether to pad all commit counts on all sides in Magit-Refs mode
-buffers.
-
-If this is nil, then some commit counts are displayed right next to
-one of the branches that appear next to the count, without any space
-in between.  This might look bad if the branch name faces look too
-similar to @code{magit-dimmed}.
-
-If this is non-nil, then spaces are placed on both sides of all
-commit counts.
-@end defopt
-
-@defopt magit-refs-show-remote-prefix
-Whether to show the remote prefix in lists of remote branches.
-
-Showing the prefix is redundant because the name of the remote is
-already shown in the heading preceding the list of its branches.
-@end defopt
-
-@defopt magit-refs-primary-column-width
-Width of the primary column in `magit-refs-mode' buffers.  The
-primary column is the column that contains the name of the branch
-that the current row is about.
-
-If this is an integer, then the column is that many columns wide.
-Otherwise it has to be a cons-cell of two integers.  The first
-specifies the minimal width, the second the maximal width.  In that
-case the actual width is determined using the length of the names of
-the shown local branches.  (Remote branches and tags are not taken
-into account when calculating to optimal width.)
-@end defopt
-
-@defopt magit-refs-focus-column-width
-Width of the focus column in `magit-refs-mode' buffers.
-
-The focus column is the first column, which marks one branch
-(usually the current branch) as the focused branch using @code{*} or @code{@@}.
-For each other reference, this column optionally shows how many
-commits it is ahead of the focused branch and @code{<}, or if it isn't
-ahead then the commits it is behind and @code{>}, or if it isn't behind
-either, then a @code{=}.
-
-This column may also display only @code{*} or @code{@@} for the focused 
branch, in
-which case this option is ignored.  Use @code{L v} to change the verbosity
-of this column.
-@end defopt
-
-@defopt magit-refs-margin
-This option specifies whether the margin is initially shown in
-Magit-Refs mode buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-@defopt magit-refs-margin-for-tags
-This option specifies whether to show information about tags in the
-margin.  This is disabled by default because it is slow if there are
-many tags.
-@end defopt
-
-The following variables control how individual refs are displayed.  If
-you change one of these variables (especially the "%c" part), then you
-should also change the others to keep things aligned.  The following
-%-sequences are supported:
-
-@itemize
-@item
-@code{%a} Number of commits this ref has over the one we compare to.
-@item
-@code{%b} Number of commits the ref we compare to has over this one.
-@item
-@code{%c} Number of commits this ref has over the one we compare to.  For
-the ref which all other refs are compared this is instead "@@", if
-it is the current branch, or "#" otherwise.
-@item
-@code{%C} For the ref which all other refs are compared this is "@@", if it
-is the current branch, or "#" otherwise.  For all other refs " ".
-@item
-@code{%h} Hash of this ref's tip.
-@item
-@code{%m} Commit summary of the tip of this ref.
-@item
-@code{%n} Name of this ref.
-@item
-@code{%u} Upstream of this local branch.
-@item
-@code{%U} Upstream of this local branch and additional local vs. upstream
-information.
-@end itemize
-
-@defopt magit-refs-filter-alist
-The purpose of this option is to forgo displaying certain refs
-based on their name.  If you want to not display any refs of a
-certain type, then you should remove the appropriate function
-from @code{magit-refs-sections-hook} instead.
-
-This alist controls which tags and branches are omitted from being
-displayed in @code{magit-refs-mode} buffers.  If it is @code{nil}, then all 
refs
-are displayed (subject to @code{magit-refs-sections-hook}).
-
-All keys are tried in order until one matches.  Then its value is
-used and subsequent elements are ignored.  If the value is non-nil,
-then the reference is displayed, otherwise it is not.  If no element
-matches, then the reference is displayed.
-
-A key can either be a regular expression that the refname has to
-match, or a function that takes the refname as only argument and
-returns a boolean.  A remote branch such as "origin/master" is
-displayed as just "master", however for this comparison the
-former is used.
-@end defopt
-
-@table @asis
-@item @kbd{@key{RET}} (@code{magit-visit-ref})
-@kindex RET
-@findex magit-visit-ref
-This command visits the reference or revision at point in another
-buffer.  If there is no revision at point or with a prefix argument
-then it prompts for a revision.
-
-This command behaves just like @code{magit-show-commit} as described above,
-except if point is on a reference in a @code{magit-refs-mode} buffer, in
-which case the behavior may be different, but only if you have
-customized the option @code{magit-visit-ref-behavior}.
-@end table
-
-@defopt magit-visit-ref-behavior
-This option controls how @code{magit-visit-ref} behaves in 
@code{magit-refs-mode}
-buffers.
-
-By default @code{magit-visit-ref} behaves like @code{magit-show-commit}, in all
-buffers, including @code{magit-refs-mode} buffers.  When the type of the
-section at point is @code{commit} then "RET" is bound to 
@code{magit-show-commit},
-and when the type is either @code{branch} or @code{tag} then it is bound to
-@code{magit-visit-ref}.
-
-"RET" is one of Magit's most essential keys and at least by default
-it should behave consistently across all of Magit, especially
-because users quickly learn that it does something very harmless; it
-shows more information about the thing at point in another buffer.
-
-However "RET" used to behave differently in @code{magit-refs-mode} buffers,
-doing surprising things, some of which cannot really be described as
-"visit this thing".  If you've grown accustomed this behavior, you
-can restore it by adding one or more of the below symbols to the
-value of this option.  But keep in mind that by doing so you don't
-only introduce inconsistencies, you also lose some functionality and
-might have to resort to @code{M-x magit-show-commit} to get it back.
-
-@code{magit-visit-ref} looks for these symbols in the order in which they
-are described here.  If the presence of a symbol applies to the
-current situation, then the symbols that follow do not affect the
-outcome.
-
-@itemize
-@item
-@code{focus-on-ref}
-
-With a prefix argument update the buffer to show commit counts
-and lists of cherry commits relative to the reference at point
-instead of relative to the current buffer or @code{HEAD}.
-
-Instead of adding this symbol, consider pressing "C-u y o RET".
-
-@item
-@code{create-branch}
-
-If point is on a remote branch, then create a new local branch
-with the same name, use the remote branch as its upstream, and
-then check out the local branch.
-
-Instead of adding this symbol, consider pressing "b c RET RET",
-like you would do in other buffers.
-
-@item
-@code{checkout-any}
-
-Check out the reference at point.  If that reference is a tag
-or a remote branch, then this results in a detached @code{HEAD}.
-
-Instead of adding this symbol, consider pressing "b b RET",
-like you would do in other buffers.
-
-@item
-@code{checkout-branch}
-
-Check out the local branch at point.
-
-Instead of adding this symbol, consider pressing "b b RET",
-like you would do in other buffers.
-@end itemize
-@end defopt
-
-@menu
-* References Sections::
-@end menu
-
-@node References Sections
-@subsection References Sections
-
-The contents of references buffers is controlled using the hook
-@code{magit-refs-sections-hook}.  See @ref{Section Hooks} to learn about such 
hooks
-and how to customize them.  All of the below functions are members of
-the default value.  Note that it makes much less sense to customize
-this hook than it does for the respective hook used for the status
-buffer.
-
-@defopt magit-refs-sections-hook
-Hook run to insert sections into a references buffer.
-@end defopt
-
-@defun magit-insert-local-branches
-Insert sections showing all local branches.
-@end defun
-
-@defun magit-insert-remote-branches
-Insert sections showing all remote-tracking branches.
-@end defun
-
-@defun magit-insert-tags
-Insert sections showing all tags.
-@end defun
-
-@node Bisecting
-@section Bisecting
-
-Also see 
-@ifinfo
-@ref{git-bisect,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-bisect";>git-bisect(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-bisect(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{B} (@code{magit-bisect})
-@kindex B
-@findex magit-bisect
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-@end table
-
-When bisecting is not in progress, then the transient features the
-following suffix commands.
-
-@table @asis
-@item @kbd{B B} (@code{magit-bisect-start})
-@kindex B B
-@findex magit-bisect-start
-Start a bisect session.
-
-Bisecting a bug means to find the commit that introduced it.
-This command starts such a bisect session by asking for a known
-good commit and a known bad commit.  If you're bisecting a change
-that isn't a regression, you can select alternate terms that are
-conceptually more fitting than "bad" and "good", but the infix
-arguments to do so are disabled by default.
-
-@item @kbd{B s} (@code{magit-bisect-run})
-@kindex B s
-@findex magit-bisect-run
-Bisect automatically by running commands after each step.
-@end table
-
-When bisecting in progress, then the transient instead features the
-following suffix commands.
-
-@table @asis
-@item @kbd{B b} (@code{magit-bisect-bad})
-@kindex B b
-@findex magit-bisect-bad
-Mark the current commit as bad.  Use this after you have asserted
-that the commit does contain the bug in question.
-
-@item @kbd{B g} (@code{magit-bisect-good})
-@kindex B g
-@findex magit-bisect-good
-Mark the current commit as good.  Use this after you have asserted
-that the commit does not contain the bug in question.
-
-@item @kbd{B m} (@code{magit-bisect-mark})
-@kindex B m
-@findex magit-bisect-mark
-Mark the current commit with one of the bisect terms.  This command
-provides an alternative to @code{magit-bisect-bad} and
-@code{magit-bisect-good} and is useful when using terms other than "bad"
-and "good".  This suffix is disabled by default.
-
-@item @kbd{B k} (@code{magit-bisect-skip})
-@kindex B k
-@findex magit-bisect-skip
-Skip the current commit.  Use this if for some reason the current
-commit is not a good one to test.  This command lets Git choose a
-different one.
-
-@item @kbd{B r} (@code{magit-bisect-reset})
-@kindex B r
-@findex magit-bisect-reset
-After bisecting, cleanup bisection state and return to original
-@code{HEAD}.
-@end table
-
-By default the status buffer shows information about the ongoing
-bisect session.
-
-@defopt magit-bisect-show-graph
-This option controls whether a graph is displayed for the log of
-commits that still have to be bisected.
-@end defopt
-
-@node Visiting Files and Blobs
-@section Visiting Files and Blobs
-
-Magit provides several commands that visit a file or blob (the version
-of a file that is stored in a certain commit).  Actually it provides
-several @strong{groups} of such commands and the several @strong{variants} 
within each
-group.
-
-Also see @ref{Commands for Buffers Visiting Files}.
-
-@menu
-* General-Purpose Visit Commands::
-* Visiting Files and Blobs from a Diff::
-@end menu
-
-@node General-Purpose Visit Commands
-@subsection General-Purpose Visit Commands
-
-These commands can be used anywhere to open any blob.  Currently no
-keys are bound to these commands by default, but that is likely to
-change.
-
-@deffn Command magit-find-file
-This command reads a filename and revision from the user and visits
-the respective blob in a buffer.  The buffer is displayed in the
-selected window.
-@end deffn
-
-@deffn Command magit-find-file-other-window
-This command reads a filename and revision from the user and visits
-the respective blob in a buffer.  The buffer is displayed in another
-window.
-@end deffn
-
-@deffn Command magit-find-file-other-frame
-This command reads a filename and revision from the user and visits
-the respective blob in a buffer.  The buffer is displayed in another
-frame.
-@end deffn
-
-@node Visiting Files and Blobs from a Diff
-@subsection Visiting Files and Blobs from a Diff
-
-These commands can only be used when point is inside a diff.
-
-@table @asis
-@item @kbd{@key{RET}} (@code{magit-diff-visit-file})
-@kindex RET
-@findex magit-diff-visit-file
-This command visits the appropriate version of the file that the
-diff at point is about.
-
-This commands visits the worktree version of the appropriate file.
-The location of point inside the diff determines which file is being
-visited.  The visited version depends on what changes the diff is
-about.
-
-@enumerate
-@item
-If the diff shows uncommitted changes (i.e., staged or unstaged
-changes), then visit the file in the working tree (i.e., the
-same "real" file that @code{find-file} would visit.  In all other
-cases visit a "blob" (i.e., the version of a file as stored
-in some commit).
-
-@item
-If point is on a removed line, then visit the blob for the
-first parent of the commit that removed that line, i.e., the
-last commit where that line still exists.
-
-@item
-If point is on an added or context line, then visit the blob
-that adds that line, or if the diff shows from more than a
-single commit, then visit the blob from the last of these
-commits.
-@end enumerate
-
-In the file-visiting buffer this command goes to the line that
-corresponds to the line that point is on in the diff.
-
-The buffer is displayed in the selected window.  With a prefix
-argument the buffer is displayed in another window instead.
-@end table
-
-@defopt magit-diff-visit-previous-blob
-This option controls whether @code{magit-diff-visit-file} may visit the
-previous blob.  When this is @code{t} (the default) and point is on a
-removed line in a diff for a committed change, then
-@code{magit-diff-visit-file} visits the blob from the last revision which
-still had that line.
-
-Currently this is only supported for committed changes, for staged
-and unstaged changes @code{magit-diff-visit-file} always visits the file in
-the working tree.
-@end defopt
-
-@table @asis
-@item @kbd{C-<return>} (@code{magit-diff-visit-file-worktree})
-@kindex C-<return>
-@findex magit-diff-visit-file-worktree
-This command visits the worktree version of the appropriate file.
-The location of point inside the diff determines which file is being
-visited.  Unlike @code{magit-diff-visit-file} it always visits the "real"
-file in the working tree, i.e the "current version" of the file.
-
-In the file-visiting buffer this command goes to the line that
-corresponds to the line that point is on in the diff.  Lines that
-were added or removed in the working tree, the index and other
-commits in between are automatically accounted for.
-
-The buffer is displayed in the selected window.  With a prefix
-argument the buffer is displayed in another window instead.
-@end table
-
-Variants of the above two commands exist that instead visit the file
-in another window or in another frame.  If you prefer such behavior,
-then you may want to change the above key bindings, but note that the
-above commands also use another window when invoked with a prefix
-argument.
-
-@deffn Command magit-diff-visit-file-other-window
-@end deffn
-@deffn Command magit-diff-visit-file-other-frame
-@end deffn
-@deffn Command magit-diff-visit-worktree-file-other-window
-@end deffn
-@deffn Command magit-diff-visit-worktree-file-other-frame
-@end deffn
-
-@node Blaming
-@section Blaming
-
-Also see 
-@ifinfo
-@ref{git-blame,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-blame";>git-blame(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-blame(1) manpage.
-@end iftex
-
-To start blaming, invoke the @code{magit-file-dispatch} transient prefix
-command.  When using the default key bindings, that can be done
-by pressing @code{C-c M-g}.  When using the recommended bindings, this
-command is instead bound to @code{C-c f}.  Also see @ref{Global Bindings}.
-
-The blaming suffix commands can be invoked directly from the file
-dispatch transient.  However if you want to set an infix argument,
-then you have to enter the blaming sub-prefix first.
-
-@table @asis
-@item @kbd{C-c f B} (@code{magit-blame})
-@itemx @kbd{C-c f b} (@code{magit-blame-addition})
-@itemx @kbd{C-c f B b}
-@itemx @kbd{C-c f r} (@code{magit-blame-removal})
-@itemx @kbd{C-c f B r}
-@itemx @kbd{C-c f f} (@code{magit-blame-reverse})
-@itemx @kbd{C-c f B f}
-@itemx @kbd{C-c f e} (@code{magit-blame-echo})
-@itemx @kbd{C-c f B e}
-@itemx @kbd{C-c f q} (@code{magit-blame-quit})
-@itemx @kbd{C-c f B q}
-@kindex C-c f B
-@kindex C-c f b
-@kindex C-c f B b
-@kindex C-c f r
-@kindex C-c f B r
-@kindex C-c f f
-@kindex C-c f B f
-@kindex C-c f e
-@kindex C-c f B e
-@kindex C-c f q
-@kindex C-c f B q
-@findex magit-blame
-@findex magit-blame-addition
-@findex magit-blame-removal
-@findex magit-blame-reverse
-@findex magit-blame-echo
-@findex magit-blame-quit
-Each of these commands is documented individually right below,
-alongside their default key bindings.  The bindings shown above
-are the recommended bindings, which you can enable by following
-the instructions in @ref{Global Bindings}.
-
-@item @kbd{C-c M-g B} (@code{magit-blame})
-@kindex C-c M-g B
-@findex magit-blame
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-Note that not all of the following suffixes are available at all
-times.  For example if @code{magit-blame-mode} is not enabled, then the
-command whose purpose is to turn off that mode would not be of any
-use and therefore isn't available.
-
-@table @asis
-@item @kbd{C-c M-g b} (@code{magit-blame-addition})
-@itemx @kbd{C-c M-g B b}
-@kindex C-c M-g b
-@kindex C-c M-g B b
-@findex magit-blame-addition
-This command augments each line or chunk of lines in the current
-file-visiting or blob-visiting buffer with information about what
-commits last touched these lines.
-
-If the buffer visits a revision of that file, then history up to
-that revision is considered.  Otherwise, the file's full history is
-considered, including uncommitted changes.
-
-If Magit-Blame mode is already turned on in the current buffer then
-blaming is done recursively, by visiting REVISION:FILE (using
-@code{magit-find-file}), where REVISION is a parent of the revision that
-added the current line or chunk of lines.
-
-@item @kbd{C-c M-g r} (@code{magit-blame-removal})
-@itemx @kbd{C-c M-g B r}
-@kindex C-c M-g r
-@kindex C-c M-g B r
-@findex magit-blame-removal
-This command augments each line or chunk of lines in the current
-blob-visiting buffer with information about the revision that
-removes it.  It cannot be used in file-visiting buffers.
-
-Like @code{magit-blame-addition}, this command can be used recursively.
-
-@item @kbd{C-c M-g f} (@code{magit-blame-reverse})
-@itemx @kbd{C-c M-g B f}
-@kindex C-c M-g f
-@kindex C-c M-g B f
-@findex magit-blame-reverse
-This command augments each line or chunk of lines in the current
-file-visiting or blob-visiting buffer with information about the
-last revision in which a line still existed.
-
-Like @code{magit-blame-addition}, this command can be used recursively.
-
-@item @kbd{C-c M-g e} (@code{magit-blame-echo})
-@itemx @kbd{C-c M-g B e}
-@kindex C-c M-g e
-@kindex C-c M-g B e
-@findex magit-blame-echo
-This command is like @code{magit-blame-addition} except that it doesn't
-turn on @code{read-only-mode} and that it initially uses the visualization
-style specified by option @code{magit-blame-echo-style}.
-@end table
-
-The following key bindings are available when Magit-Blame mode is
-enabled and Read-Only mode is not enabled.  These commands are also
-available in other buffers; here only the behavior is described that
-is relevant in file-visiting buffers that are being blamed.
-
-@table @asis
-@item @kbd{C-c M-g q} (@code{magit-blame-quit})
-@itemx @kbd{C-c M-g B q}
-@kindex C-c M-g q
-@kindex C-c M-g B q
-@findex magit-blame-quit
-This command turns off Magit-Blame mode.  If the buffer was created
-during a recursive blame, then it also kills the buffer.
-
-@item @kbd{@key{RET}} (@code{magit-show-commit})
-@kindex RET
-@findex magit-show-commit
-This command shows the commit that last touched the line at point.
-
-@item @kbd{@key{SPC}} (@code{magit-diff-show-or-scroll-up})
-@kindex SPC
-@findex magit-diff-show-or-scroll-up
-This command updates the commit buffer.
-
-This either shows the commit that last touched the line at point in
-the appropriate buffer, or if that buffer is already being displayed
-in the current frame and if that buffer contains information about
-that commit, then the buffer is scrolled up instead.
-
-@item @kbd{@key{DEL}} (@code{magit-diff-show-or-scroll-down})
-@kindex DEL
-@findex magit-diff-show-or-scroll-down
-This command updates the commit buffer.
-
-This either shows the commit that last touched the line at point in
-the appropriate buffer, or if that buffer is already being displayed
-in the current frame and if that buffer contains information about
-that commit, then the buffer is scrolled down instead.
-@end table
-
-The following key bindings are available when both Magit-Blame mode
-and Read-Only mode are enabled.
-
-@table @asis
-@item @kbd{b} (@code{magit-blame})
-@kindex b
-@findex magit-blame
-See above.
-
-@item @kbd{n} (@code{magit-blame-next-chunk})
-@kindex n
-@findex magit-blame-next-chunk
-This command moves to the next chunk.
-
-@item @kbd{N} (@code{magit-blame-next-chunk-same-commit})
-@kindex N
-@findex magit-blame-next-chunk-same-commit
-This command moves to the next chunk from the same commit.
-
-@item @kbd{p} (@code{magit-blame-previous-chunk})
-@kindex p
-@findex magit-blame-previous-chunk
-This command moves to the previous chunk.
-
-@item @kbd{P} (@code{magit-blame-previous-chunk-same-commit})
-@kindex P
-@findex magit-blame-previous-chunk-same-commit
-This command moves to the previous chunk from the same commit.
-
-@item @kbd{q} (@code{magit-blame-quit})
-@kindex q
-@findex magit-blame-quit
-This command turns off Magit-Blame mode.  If the buffer was created
-during a recursive blame, then it also kills the buffer.
-
-@item @kbd{M-w} (@code{magit-blame-copy-hash})
-@kindex M-w
-@findex magit-blame-copy-hash
-This command saves the hash of the current chunk's commit to the
-kill ring.
-
-When the region is active, the command saves the region's content
-instead of the hash, like @code{kill-ring-save} would.
-
-@item @kbd{c} (@code{magit-blame-cycle-style})
-@kindex c
-@findex magit-blame-cycle-style
-This command changes how blame information is visualized in the
-current buffer by cycling through the styles specified using the
-option @code{magit-blame-styles}.
-@end table
-
-Blaming is also controlled using the following options.
-
-@defopt magit-blame-styles
-This option defines a list of styles used to visualize blame
-information.  For now see its doc-string to learn more.
-@end defopt
-
-@defopt magit-blame-echo-style
-This option specifies the blame visualization style used by the
-command @code{magit-blame-echo}.  This must be a symbol that is used as the
-identifier for one of the styles defined in @code{magit-blame-styles}.
-@end defopt
-
-@defopt magit-blame-time-format
-This option specifies the format string used to display times when
-showing blame information.
-@end defopt
-
-@defopt magit-blame-read-only
-This option controls whether blaming a buffer also makes temporarily
-read-only.
-@end defopt
-
-@defopt magit-blame-disable-modes
-This option lists incompatible minor-modes that should be disabled
-temporarily when a buffer contains blame information.  They are
-enabled again when the buffer no longer shows blame information.
-@end defopt
-
-@defopt magit-blame-goto-chunk-hook
-This hook is run when moving between chunks.
-@end defopt
-
-@node Manipulating
-@chapter Manipulating
-
-@menu
-* Creating Repository::
-* Cloning Repository::
-* Staging and Unstaging::
-* Applying::
-* Committing::
-* Branching::
-* Merging::
-* Resolving Conflicts::
-* Rebasing::
-* Cherry Picking::
-* Resetting::
-* Stashing::
-@end menu
-
-@node Creating Repository
-@section Creating Repository
-
-@table @asis
-@item @kbd{I} (@code{magit-init})
-@kindex I
-@findex magit-init
-This command initializes a repository and then shows the status
-buffer for the new repository.
-
-If the directory is below an existing repository, then the user has
-to confirm that a new one should be created inside.  If the
-directory is the root of the existing repository, then the user has
-to confirm that it should be reinitialized.
-@end table
-
-@node Cloning Repository
-@section Cloning Repository
-
-To clone a remote or local repository use @code{C}, which is bound to the
-command @code{magit-clone}.  This command either act as a transient prefix
-command, which binds several infix arguments and suffix commands, or
-it can invoke @code{git clone} directly, depending on whether a prefix
-argument is used and on the value of @code{magit-clone-always-transient}.
-
-@defopt magit-clone-always-transient
-This option controls whether the command @code{magit-clone} always acts as
-a transient prefix command, regardless of whether a prefix argument
-is used or not.  If @code{t}, then that command always acts as a transient
-prefix.  If @code{nil}, then a prefix argument has to be used for it to act
-as a transient.
-@end defopt
-
-@table @asis
-@item @kbd{C} (@code{magit-clone})
-@kindex C
-@findex magit-clone
-This command either acts as a transient prefix command as described
-above or does the same thing as @code{transient-clone-regular} as described
-below.
-
-If it acts as a transient prefix, then it binds the following suffix
-commands and several infix arguments.
-
-@item @kbd{C C} (@code{magit-clone-regular})
-@kindex C C
-@findex magit-clone-regular
-This command creates a regular clone of an existing repository.
-The repository and the target directory are read from the user.
-
-@item @kbd{C s} (@code{magit-clone-shallow})
-@kindex C s
-@findex magit-clone-shallow
-This command creates a shallow clone of an existing repository.
-The repository and the target directory are read from the user.
-By default the depth of the cloned history is a single commit,
-but with a prefix argument the depth is read from the user.
-
-@item @kbd{C >} (@code{magit-clone-sparse})
-@kindex C >
-@findex magit-clone-sparse
-This command creates a clone of an existing repository and
-initializes a sparse checkout, avoiding a checkout of the full
-working tree.  To add more directories, use the
-@code{magit-sparse-checkout} transient (see @ref{Sparse checkouts}).
-
-@item @kbd{C b} (@code{magit-clone-bare})
-@kindex C b
-@findex magit-clone-bare
-This command creates a bare clone of an existing repository.
-The repository and the target directory are read from the user.
-
-@item @kbd{C m} (@code{magit-clone-mirror})
-@kindex C m
-@findex magit-clone-mirror
-This command creates a mirror of an existing repository.
-The repository and the target directory are read from the user.
-@end table
-
-The following suffixes are disabled by default. See
-@ref{Enabling and Disabling Suffixes,,,transient,} for how to enable them.
-
-@table @asis
-@item @kbd{C d} (@code{magit-clone-shallow-since})
-@kindex C d
-@findex magit-clone-shallow-since
-This command creates a shallow clone of an existing repository.
-Only commits that were committed after a date are cloned, which
-is read from the user.  The repository and the target directory
-are also read from the user.
-
-@item @kbd{C e} (@code{magit-clone-shallow-exclude})
-@kindex C e
-@findex magit-clone-shallow-exclude
-This command creates a shallow clone of an existing repository.
-This reads a branch or tag from the user.  Commits that are
-reachable from that are not cloned.  The repository and the target
-directory are also read from the user.
-@end table
-
-@defopt magit-clone-set-remote-head
-This option controls whether cloning causes the reference
-@code{refs/remotes/<remote>/HEAD} to be created in the clone.  The default
-is to delete the reference after running @code{git clone}, which insists on
-creating it.  This is because the reference has not been found to be
-particularly useful as it is not automatically updated when the @code{HEAD}
-of the remote changes.  Setting this option to @code{t} preserves Git's
-default behavior of creating the reference.
-@end defopt
-
-@defopt magit-clone-set-remote.pushDefault
-This option controls whether the value of the Git variable
-@code{remote.pushDefault} is set after cloning.
-
-@itemize
-@item
-If @code{t}, then it is always set without asking.
-@item
-If @code{ask}, then the users are asked every time they clone a
-repository.
-@item
-If @code{nil}, then it is never set.
-@end itemize
-@end defopt
-
-@defopt magit-clone-default-directory
-This option control the default directory name used when reading the
-destination for a cloning operation.
-
-@itemize
-@item
-If @code{nil} (the default), then the value of @code{default-directory} is 
used.
-@item
-If a directory, then that is used.
-@item
-If a function, then that is called with the remote url as the only
-argument and the returned value is used.
-@end itemize
-@end defopt
-
-@defopt magit-clone-name-alist
-This option maps regular expressions, which match repository names,
-to repository urls, making it possible for users to enter short
-names instead of urls when cloning repositories.
-
-Each element has the form @code{(REGEXP HOSTNAME USER)}.  When the user
-enters a name when a cloning command asks for a name or url, then
-that is looked up in this list.  The first element whose REGEXP
-matches is used.
-
-The format specified by option @code{magit-clone-url-format} is used to
-turn the name into an url, using HOSTNAME and the repository name.
-If the provided name contains a slash, then that is used.  Otherwise
-if the name omits the owner of the repository, then the default user
-specified in the matched entry is used.
-
-If USER contains a dot, then it is treated as a Git variable and the
-value of that is used as the username.  Otherwise it is used as the
-username itself.
-@end defopt
-
-@defopt magit-clone-url-format
-The format specified by this option is used when turning repository
-names into urls.  @code{%h} is the hostname and @code{%n} is the repository
-name, including the name of the owner.  The value can be a string
-(representing a single static format) or an alist with elements
-@code{(HOSTNAME . FORMAT)} mapping hostnames to formats.  When an alist
-is used, the @code{t} key represents the default format.
-
-Example of a single format string:
-
-@lisp
-(setq magit-clone-url-format
-      "git@@%h:%n.git")
-@end lisp
-
-Example of by-hostname format strings:
-
-@lisp
-(setq magit-clone-url-format
-      '(("git.example.com" . "git@@%h:~%n")
-        (nil . "git@@%h:%n.git")))
-@end lisp
-@end defopt
-
-@defopt magit-post-clone-hook
-Hook run after the Git process has successfully finished cloning the
-repository.  When the hook is called, @code{default-directory} is
-let-bound to the directory where the repository has been cloned.
-@end defopt
-
-@node Staging and Unstaging
-@section Staging and Unstaging
-
-Like Git, Magit can of course stage and unstage complete files.
-Unlike Git, it also allows users to gracefully un-/stage
-individual hunks and even just part of a hunk.  To stage individual
-hunks and parts of hunks using Git directly, one has to use the very
-modal and rather clumsy interface of a @code{git add --interactive} session.
-
-With Magit, on the other hand, one can un-/stage individual hunks by
-just moving point into the respective section inside a diff displayed
-in the status buffer or a separate diff buffer and typing @code{s} or 
@code{u}.  To
-operate on just parts of a hunk, mark the changes that should be
-un-/staged using the region and then press the same key that would be
-used to un-/stage.  To stage multiple files or hunks at once use a
-region that starts inside the heading of such a section and ends
-inside the heading of a sibling section of the same type.
-
-Besides staging and unstaging, Magit also provides several other
-"apply variants" that can also operate on a file, multiple files at
-once, a hunk, multiple hunks at once, and on parts of a hunk.  These
-apply variants are described in the next section.
-
-You can also use Ediff to stage and unstage.  See @ref{Ediffing}.
-
-@table @asis
-@item @kbd{s} (@code{magit-stage})
-@kindex s
-@findex magit-stage
-Add the change at point to the staging area.
-
-With a prefix argument and an untracked file (or files) at point,
-stage the file but not its content.  This makes it possible to stage
-only a subset of the new file's changes.
-
-@item @kbd{S} (@code{magit-stage-modified})
-@kindex S
-@findex magit-stage-modified
-Stage all changes to files modified in the worktree.  Stage all new
-content of tracked files and remove tracked files that no longer
-exist in the working tree from the index also.  With a prefix
-argument also stage previously untracked (but not ignored) files.
-
-@item @kbd{u} (@code{magit-unstage})
-@kindex u
-@findex magit-unstage
-Remove the change at point from the staging area.
-
-Only staged changes can be unstaged.  But by default this command
-performs an action that is somewhat similar to unstaging, when it is
-called on a committed change: it reverses the change in the index
-but not in the working tree.
-
-@item @kbd{U} (@code{magit-unstage-all})
-@kindex U
-@findex magit-unstage-all
-Remove all changes from the staging area.
-@end table
-
-@defopt magit-unstage-committed
-This option controls whether @code{magit-unstage} "unstages" committed
-changes by reversing them in the index but not the working tree.
-The alternative is to raise an error.
-@end defopt
-
-@table @asis
-@item @kbd{M-x magit-reverse-in-index}
-@findex magit-reverse-in-index
-This command reverses the committed change at point in the index but
-not the working tree.  By default no key is bound directly to this
-command, but it is indirectly called when @code{u} (@code{magit-unstage}) is
-pressed on a committed change.
-
-This allows extracting a change from @code{HEAD}, while leaving it in the
-working tree, so that it can later be committed using a separate
-commit.  A typical workflow would be:
-
-@enumerate
-@item
-Optionally make sure that there are no uncommitted changes.
-@item
-Visit the @code{HEAD} commit and navigate to the change that should
-not have been included in that commit.
-@item
-Type @code{u} (@code{magit-unstage}) to reverse it in the index.
-This assumes that @code{magit-unstage-committed} is non-nil.
-@item
-Type @code{c e} to extend @code{HEAD} with the staged changes,
-including those that were already staged before.
-@item
-Optionally stage the remaining changes using @code{s} or @code{S} and then
-type @code{c c} to create a new commit.
-@end enumerate
-
-@item @kbd{M-x magit-reset-index}
-@findex magit-reset-index
-Reset the index to some commit.  The commit is read from the user
-and defaults to the commit at point.  If there is no commit at
-point, then it defaults to @code{HEAD}.
-@end table
-
-@menu
-* Staging from File-Visiting Buffers::
-@end menu
-
-@node Staging from File-Visiting Buffers
-@subsection Staging from File-Visiting Buffers
-
-Fine-grained un-/staging has to be done from the status or a diff
-buffer, but it's also possible to un-/stage all changes made to the
-file visited in the current buffer right from inside that buffer.
-
-@table @asis
-@item @kbd{M-x magit-stage-file}
-@findex magit-stage-file
-When invoked inside a file-visiting buffer, then stage all changes
-to that file.  In a Magit buffer, stage the file at point if any.
-Otherwise prompt for a file to be staged.  With a prefix argument
-always prompt the user for a file, even in a file-visiting buffer or
-when there is a file section at point.
-
-@item @kbd{M-x magit-unstage-file}
-@findex magit-unstage-file
-When invoked inside a file-visiting buffer, then unstage all changes
-to that file.  In a Magit buffer, unstage the file at point if any.
-Otherwise prompt for a file to be unstaged.  With a prefix argument
-always prompt the user for a file, even in a file-visiting buffer or
-when there is a file section at point.
-@end table
-
-@node Applying
-@section Applying
-
-Magit provides several "apply variants": stage, unstage, discard,
-reverse, and "regular apply".  At least when operating on a hunk they
-are all implemented using @code{git apply}, which is why they are called
-"apply variants".
-
-@itemize
-@item
-Stage.  Apply a change from the working tree to the index.  The change
-also remains in the working tree.
-
-@item
-Unstage.  Remove a change from the index.  The change remains in the
-working tree.
-
-@item
-Discard.  On a staged change, remove it from the working tree and the
-index.  On an unstaged change, remove it from the working tree only.
-
-@item
-Reverse.  Reverse a change in the working tree.  Both committed and
-staged changes can be reversed.  Unstaged changes cannot be
-reversed.  Discard them instead.
-
-@item
-Apply.  Apply a change to the working tree.  Both committed and staged
-changes can be applied.  Unstaged changes cannot be applied - as
-they already have been applied.
-@end itemize
-
-The previous section described the staging and unstaging commands.
-What follows are the commands which implement the remaining apply
-variants.
-
-@table @asis
-@item @kbd{a} (@code{magit-apply})
-@kindex a
-@findex magit-apply
-Apply the change at point to the working tree.
-
-With a prefix argument fallback to a 3-way merge.  Doing so causes
-the change to be applied to the index as well.
-
-@item @kbd{k} (@code{magit-discard})
-@kindex k
-@findex magit-discard
-Remove the change at point from the working tree.
-
-On a hunk or file with unresolved conflicts prompt which side to
-keep (while discarding the other).  If point is within the text
-of a side, then keep that side without prompting.
-
-@item @kbd{v} (@code{magit-reverse})
-@kindex v
-@findex magit-reverse
-Reverse the change at point in the working tree.
-
-With a prefix argument fallback to a 3-way merge.  Doing so causes
-the change to be applied to the index as well.
-@end table
-
-With a prefix argument all apply variants attempt a 3-way merge when
-appropriate (i.e., when @code{git apply} is used internally).
-
-@node Committing
-@section Committing
-
-When the user initiates a commit, Magit calls @code{git commit} without any
-arguments, so Git has to get it from the user.  It creates the file
-@code{.git/COMMIT_EDITMSG} and then opens that file in an editor.  Magit
-arranges for that editor to be the Emacsclient.  Once the user
-finishes the editing session, the Emacsclient exits and Git creates the
-commit using the file's content as message.
-
-@menu
-* Initiating a Commit::
-* Editing Commit Messages::
-@end menu
-
-@node Initiating a Commit
-@subsection Initiating a Commit
-
-Also see 
-@ifinfo
-@ref{git-commit,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-commit";>git-commit(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-commit(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{c} (@code{magit-commit})
-@kindex c
-@findex magit-commit
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{c c} (@code{magit-commit-create})
-@kindex c c
-@findex magit-commit-create
-Create a new commit on @code{HEAD}.  With a prefix argument amend to the
-commit at @code{HEAD} instead.
-
-@item @kbd{c a} (@code{magit-commit-amend})
-@kindex c a
-@findex magit-commit-amend
-Amend the last commit.
-
-@item @kbd{c e} (@code{magit-commit-extend})
-@kindex c e
-@findex magit-commit-extend
-Amend the last commit, without editing the message.  With a prefix
-argument keep the committer date, otherwise change it.  The option
-@code{magit-commit-extend-override-date} can be used to inverse the meaning
-of the prefix argument.
-
-Non-interactively respect the optional OVERRIDE-DATE argument and
-ignore the option.
-
-@item @kbd{c w} (@code{magit-commit-reword})
-@kindex c w
-@findex magit-commit-reword
-Reword the last commit, ignoring staged changes.  With a prefix
-argument keep the committer date, otherwise change it.  The option
-@code{magit-commit-reword-override-date} can be used to inverse the meaning
-of the prefix argument.
-
-Non-interactively respect the optional OVERRIDE-DATE argument and
-ignore the option.
-
-@item @kbd{c f} (@code{magit-commit-fixup})
-@kindex c f
-@findex magit-commit-fixup
-Create a fixup commit.
-
-With a prefix argument the target commit has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option @code{magit-commit-squash-confirm}.
-
-@item @kbd{c F} (@code{magit-commit-instant-fixup})
-@kindex c F
-@findex magit-commit-instant-fixup
-Create a fixup commit and instantly rebase.
-
-@item @kbd{c s} (@code{magit-commit-squash})
-@kindex c s
-@findex magit-commit-squash
-Create a squash commit, without editing the squash message.
-
-With a prefix argument the target commit has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option @code{magit-commit-squash-confirm}.
-
-@item @kbd{c S} (@code{magit-commit-instant-squash})
-@kindex c S
-@findex magit-commit-instant-squash
-Create a squash commit and instantly rebase.
-
-@item @kbd{c A} (@code{magit-commit-augment})
-@kindex c A
-@findex magit-commit-augment
-Create a squash commit, editing the squash message.
-
-With a prefix argument the target commit has to be confirmed.
-Otherwise the commit at point may be used without confirmation
-depending on the value of option @code{magit-commit-squash-confirm}.
-@end table
-
-@defopt magit-commit-ask-to-stage
-Whether to ask to stage all unstaged changes when committing and nothing is
-staged.
-@end defopt
-
-@defopt magit-commit-show-diff
-Whether the relevant diff is automatically shown when committing.
-@end defopt
-
-@defopt magit-commit-extend-override-date
-Whether using @code{magit-commit-extend} changes the committer date.
-@end defopt
-
-@defopt magit-commit-reword-override-date
-Whether using @code{magit-commit-reword} changes the committer date.
-@end defopt
-
-@defopt magit-commit-squash-confirm
-Whether the commit targeted by squash and fixup has to be confirmed.
-When non-nil then the commit at point (if any) is used as default
-choice.  Otherwise it has to be confirmed.  This option only affects
-@code{magit-commit-squash} and @code{magit-commit-fixup}.  The "instant" 
variants
-always require confirmation because making an error while using
-those is harder to recover from.
-@end defopt
-
-@defopt magit-post-commit-hook
-Hook run after creating a commit without the user editing a message.
-
-This hook is run by @code{magit-refresh} if @code{this-command} is a member
-of @code{magit-post-commit-hook-commands}.  This only includes commands
-named @code{magit-commit-*} that do @strong{not} require that the user edits
-the commit message in a buffer.
-
-Also see @code{git-commit-post-finish-hook}.
-@end defopt
-
-@defopt magit-commit-diff-inhibit-same-window
-Whether to inhibit use of same window when showing diff while
-committing.
-
-When writing a commit, then a diff of the changes to be committed
-is automatically shown.  The idea is that the diff is shown in a
-different window of the same frame and for most users that just
-works.  In other words most users can completely ignore this
-option because its value doesn't make a difference for them.
-
-However for users who configured Emacs to never create a new
-window even when the package explicitly tries to do so, then
-displaying two new buffers necessarily means that the first is
-immediately replaced by the second.  In our case the message
-buffer is immediately replaced by the diff buffer, which is of
-course highly undesirable.
-
-A workaround is to suppress this user configuration in this
-particular case.  Users have to explicitly opt-in by toggling
-this option.  We cannot enable the workaround unconditionally
-because that again causes issues for other users: if the frame
-is too tiny or the relevant settings too aggressive, then the
-diff buffer would end up being displayed in a new frame.
-
-Also see @uref{https://github.com/magit/magit/issues/4132}.
-@end defopt
-
-@node Editing Commit Messages
-@subsection Editing Commit Messages
-
-After initiating a commit as described in the previous section, two new
-buffers appear.  One shows the changes that are about to be committed,
-while the other is used to write the message.
-
-Commit messages are edited in an edit session - in the background @code{git}
-is waiting for the editor, in our case @code{emacsclient}, to save the commit
-message in a file (in most cases @code{.git/COMMIT_EDITMSG}) and then return.
-If the editor returns with a non-zero exit status then @code{git} does not
-create the commit.  So the most important commands are those for
-finishing and aborting the commit.
-
-@table @asis
-@item @kbd{C-c C-c} (@code{with-editor-finish})
-@kindex C-c C-c
-@findex with-editor-finish
-Finish the current editing session by returning with exit code 0.
-Git then creates the commit using the message it finds in the file.
-
-@item @kbd{C-c C-k} (@code{with-editor-cancel})
-@kindex C-c C-k
-@findex with-editor-cancel
-Cancel the current editing session by returning with exit code 1.
-Git then cancels the commit, but leaves the file untouched.
-@end table
-
-In addition to being used by @code{git commit}, messages may also be stored
-in a ring that persists until Emacs is closed.  By default the message
-is stored at the beginning and the end of an edit session (regardless
-of whether the session is finished successfully or was canceled).  It
-is sometimes useful to bring back messages from that ring.
-
-@table @asis
-@item @kbd{C-c M-s} (@code{git-commit-save-message})
-@kindex C-c M-s
-@findex git-commit-save-message
-Save the current buffer content to the commit message ring.
-
-@item @kbd{M-p} (@code{git-commit-prev-message})
-@kindex M-p
-@findex git-commit-prev-message
-Cycle backward through the commit message ring, after saving the
-current message to the ring.  With a numeric prefix ARG, go back
-ARG comments.
-
-@item @kbd{M-n} (@code{git-commit-next-message})
-@kindex M-n
-@findex git-commit-next-message
-Cycle forward through the commit message ring, after saving the
-current message to the ring.  With a numeric prefix ARG, go back
-ARG comments.
-@end table
-
-By default the diff for the changes that are about to be committed are
-automatically shown when invoking the commit.  To prevent that, remove
-@code{magit-commit-diff} from @code{server-switch-hook}.
-
-When amending to an existing commit it may be useful to show either
-the changes that are about to be added to that commit or to show those
-changes alongside those that have already been committed.
-
-@table @asis
-@item @kbd{C-c C-d} (@code{magit-diff-while-committing})
-@kindex C-c C-d
-@findex magit-diff-while-committing
-While committing, show the changes that are about to be committed.
-While amending, invoking the command again toggles between showing
-just the new changes or all the changes that will be committed.
-@end table
-
-@menu
-* Using the Revision Stack::
-* Commit Pseudo Headers::
-* Commit Mode and Hooks::
-* Commit Message Conventions::
-@end menu
-
-@node Using the Revision Stack
-@unnumberedsubsubsec Using the Revision Stack
-
-@table @asis
-@item @kbd{C-c C-w} (@code{magit-pop-revision-stack})
-@kindex C-c C-w
-@findex magit-pop-revision-stack
-This command inserts a representation of a revision into the current
-buffer.  It can be used inside buffers used to write commit messages
-but also in other buffers such as buffers used to edit emails or
-ChangeLog files.
-
-By default this command pops the revision which was last added to
-the @code{magit-revision-stack} and inserts it into the current buffer
-according to @code{magit-pop-revision-stack-format}.  Revisions can be put
-on the stack using @code{magit-copy-section-value} and
-@code{magit-copy-buffer-revision}.
-
-If the stack is empty or with a prefix argument it instead reads a
-revision in the minibuffer.  By using the minibuffer history this
-allows selecting an item which was popped earlier or to insert an
-arbitrary reference or revision without first pushing it onto the
-stack.
-
-When reading the revision from the minibuffer, then it might not
-be possible to guess the correct repository.  When this command
-is called inside a repository (e.g., while composing a commit
-message), then that repository is used.  Otherwise (e.g., while
-composing an email) then the repository recorded for the top
-element of the stack is used (even though we insert another
-revision).  If not called inside a repository and with an empty
-stack, or with two prefix arguments, then read the repository in
-the minibuffer too.
-@end table
-
-@defopt magit-pop-revision-stack-format
-This option controls how the command @code{magit-pop-revision-stack}
-inserts a revision into the current buffer.
-
-The entries on the stack have the format @code{(HASH TOPLEVEL)} and this
-option has the format @code{(POINT-FORMAT EOB-FORMAT INDEX-REGEXP)}, all
-of which may be nil or a string (though either one of EOB-FORMAT
-or POINT-FORMAT should be a string, and if INDEX-REGEXP is
-non-nil, then the two formats should be too).
-
-First INDEX-REGEXP is used to find the previously inserted entry,
-by searching backward from point.  The first submatch must match
-the index number.  That number is incremented by one, and becomes
-the index number of the entry to be inserted.  If you don't want
-to number the inserted revisions, then use nil for INDEX-REGEXP@.
-
-If INDEX-REGEXP is non-nil then both POINT-FORMAT and EOB-FORMAT
-should contain \"%N\", which is replaced with the number that was
-determined in the previous step.
-
-Both formats, if non-nil and after removing %N, are then expanded
-using @code{git show --format=FORMAT ...} inside TOPLEVEL@.
-
-The expansion of POINT-FORMAT is inserted at point, and the
-expansion of EOB-FORMAT is inserted at the end of the buffer (if the
-buffer ends with a comment, then it is inserted right before that).
-@end defopt
-
-@node Commit Pseudo Headers
-@unnumberedsubsubsec Commit Pseudo Headers
-
-Some projects use pseudo headers in commit messages.  Magit colorizes
-such headers and provides some commands to insert such headers.
-
-@defopt git-commit-known-pseudo-headers
-A list of Git pseudo headers to be highlighted.
-@end defopt
-
-@table @asis
-@item @kbd{C-c C-i} (@code{git-commit-insert-pseudo-header})
-@kindex C-c C-i
-@findex git-commit-insert-pseudo-header
-Insert a commit message pseudo header.
-
-@item @kbd{C-c C-a} (@code{git-commit-ack})
-@kindex C-c C-a
-@findex git-commit-ack
-Insert a header acknowledging that you have looked at the commit.
-
-@item @kbd{C-c C-r} (@code{git-commit-review})
-@kindex C-c C-r
-@findex git-commit-review
-Insert a header acknowledging that you have reviewed the commit.
-
-@item @kbd{C-c C-s} (@code{git-commit-signoff})
-@kindex C-c C-s
-@findex git-commit-signoff
-Insert a header to sign off the commit.
-
-@item @kbd{C-c C-t} (@code{git-commit-test})
-@kindex C-c C-t
-@findex git-commit-test
-Insert a header acknowledging that you have tested the commit.
-
-@item @kbd{C-c C-o} (@code{git-commit-cc})
-@kindex C-c C-o
-@findex git-commit-cc
-Insert a header mentioning someone who might be interested.
-
-@item @kbd{C-c C-p} (@code{git-commit-reported})
-@kindex C-c C-p
-@findex git-commit-reported
-Insert a header mentioning the person who reported the issue being
-fixed by the commit.
-
-@item @kbd{C-c M-i} (@code{git-commit-suggested})
-@kindex C-c M-i
-@findex git-commit-suggested
-Insert a header mentioning the person who suggested the change.
-@end table
-
-@node Commit Mode and Hooks
-@unnumberedsubsubsec Commit Mode and Hooks
-
-@code{git-commit-mode} is a minor mode that is only used to establish certain
-key bindings.  This makes it possible to use an arbitrary major mode
-in buffers used to edit commit messages.  It is even possible to use
-different major modes in different repositories, which is useful when
-different projects impose different commit message conventions.
-
-@defopt git-commit-major-mode
-The value of this option is the major mode used to edit Git commit
-messages.
-@end defopt
-
-Because @code{git-commit-mode} is a minor mode, we don't use its mode hook
-to setup the buffer, except for the key bindings.  All other setup
-happens in the function @code{git-commit-setup}, which among other things runs
-the hook @code{git-commit-setup-hook}.
-
-@defopt git-commit-setup-hook
-Hook run at the end of @code{git-commit-setup}.
-@end defopt
-
-@noindent
-The following functions are suitable for this hook:
-
-@defun git-commit-save-message
-Save the current buffer content to the commit message ring.
-@end defun
-
-@defun git-commit-setup-changelog-support
-After this function is called, ChangeLog entries are treated as
-paragraphs.
-@end defun
-
-@defun git-commit-turn-on-auto-fill
-Turn on @code{auto-fill-mode}.
-@end defun
-
-@defun git-commit-turn-on-flyspell
-Turn on Flyspell mode.  Also prevent comments from being checked and
-finally check current non-comment text.
-@end defun
-
-@defun git-commit-propertize-diff
-Propertize the diff shown inside the commit message buffer.  Git
-inserts such diffs into the commit message template when the
-@code{--verbose} argument is used.  @code{magit-commit} by default does not 
offer
-that argument because the diff that is shown in a separate buffer is
-more useful.  But some users disagree, which is why this function
-exists.
-@end defun
-
-@defun bug-reference-mode
-Hyperlink bug references in the buffer.
-@end defun
-
-@defun with-editor-usage-message
-Show usage information in the echo area.
-@end defun
-
-@defopt git-commit-post-finish-hook
-Hook run after the user finished writing a commit message.
-
-This hook is only run after pressing @code{C-c C-c} in a buffer used to
-edit a commit message.  If a commit is created without the user
-typing a message into a buffer, then this hook is not run.
-
-This hook is not run until the new commit has been created.  If
-doing so takes Git longer than one second, then this hook isn't run
-at all.  For certain commands such as @code{magit-rebase-continue} this
-hook is never run because doing so would lead to a race condition.
-
-This hook is only run if @code{magit} is available.
-
-Also see @code{magit-post-commit-hook}.
-@end defopt
-
-@node Commit Message Conventions
-@unnumberedsubsubsec Commit Message Conventions
-
-Git-Commit highlights certain violations of commonly accepted commit
-message conventions.  Certain violations even cause Git-Commit to ask
-you to confirm that you really want to do that.  This nagging can of
-course be turned off, but the result of doing that usually is that
-instead of some code it's now the human who is reviewing your commits
-who has to waste some time telling you to fix your commits.
-
-@defopt git-commit-summary-max-length
-The intended maximal length of the summary line of commit messages.
-Characters beyond this column are colorized to indicate that this
-preference has been violated.
-@end defopt
-
-@defopt git-commit-finish-query-functions
-List of functions called to query before performing commit.
-
-The commit message buffer is current while the functions are called.
-If any of them returns nil, then the commit is not performed and the
-buffer is not killed.  The user should then fix the issue and try
-again.
-
-The functions are called with one argument.  If it is non-nil then
-that indicates that the user used a prefix argument to force
-finishing the session despite issues.  Functions should usually
-honor this wish and return non-nil.
-
-By default the only member is @code{git-commit-check-style-conventions}.
-@end defopt
-
-@defun git-commit-check-style-conventions
-This function checks for violations of certain basic style
-conventions.  For each violation it asks users if they want to
-proceed anyway.
-@end defun
-
-@defopt git-commit-style-convention-checks
-This option controls what conventions the function by the same name
-tries to enforce.  The value is a list of self-explanatory symbols
-identifying certain conventions; @code{non-empty-second-line} and
-@code{overlong-summary-line}.
-@end defopt
-
-@node Branching
-@section Branching
-
-@menu
-* The Two Remotes::
-* Branch Commands::
-* Branch Git Variables::
-* Auxiliary Branch Commands::
-@end menu
-
-@node The Two Remotes
-@subsection The Two Remotes
-
-The upstream branch of some local branch is the branch into which the
-commits on that local branch should eventually be merged, usually
-something like @code{origin/master}.  For the @code{master} branch itself the
-upstream branch and the branch it is being pushed to, are usually the
-same remote branch.  But for a feature branch the upstream branch and
-the branch it is being pushed to should differ.
-
-The commits on feature branches too should @emph{eventually} end up in a
-remote branch such as @code{origin/master} or @code{origin/maint}.  Such a 
branch
-should therefore be used as the upstream.  But feature branches
-shouldn't be pushed directly to such branches.  Instead a feature
-branch @code{my-feature} is usually pushed to @code{my-fork/my-feature} or if 
you
-are a contributor @code{origin/my-feature}.  After the new feature has been
-reviewed, the maintainer merges the feature into @code{master}.  And finally
-@code{master} (not @code{my-feature} itself) is pushed to @code{origin/master}.
-
-But new features seldom are perfect on the first try, and so feature
-branches usually have to be reviewed, improved, and re-pushed several
-times.  Pushing should therefore be easy to do, and for that reason
-many Git users have concluded that it is best to use the remote branch
-to which the local feature branch is being pushed as its upstream.
-
-But luckily Git has long ago gained support for a push-remote which
-can be configured separately from the upstream branch, using the
-variables @code{branch.<name>.pushRemote} and @code{remote.pushDefault}.  So 
we no
-longer have to choose which of the two remotes should be used as "the
-remote".
-
-Each of the fetching, pulling, and pushing transient commands features
-three suffix commands that act on the current branch and some other
-branch.  Of these, @code{p} is bound to a command which acts on the
-push-remote, @code{u} is bound to a command which acts on the upstream, and 
@code{e}
-is bound to a command which acts on any other branch.  The status
-buffer shows unpushed and unpulled commits for both the push-remote
-and the upstream.
-
-It's fairly simple to configure these two remotes.  The values of all
-the variables that are related to fetching, pulling, and pushing (as
-well as some other branch-related variables) can be inspected and
-changed using the command @code{magit-branch-configure}, which is available
-from many transient prefix commands that deal with branches.  It is
-also possible to set the push-remote or upstream while pushing (see
-@ref{Pushing}).
-
-@node Branch Commands
-@subsection Branch Commands
-
-The transient prefix command @code{magit-branch} is used to create and
-checkout branches, and to make changes to existing branches.  It is
-not used to fetch, pull, merge, rebase, or push branches, i.e., this
-command deals with branches themselves, not with the commits reachable
-from them.  Those features are available from separate transient
-command.
-
-@table @asis
-@item @kbd{b} (@code{magit-branch})
-@kindex b
-@findex magit-branch
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-By default it also binds and displays the values of some
-branch-related Git variables and allows changing their values.
-@end table
-
-@defopt magit-branch-direct-configure
-This option controls whether the transient command @code{magit-branch} can
-be used to directly change the values of Git variables.  This defaults
-to @code{t} (to avoid changing key bindings).  When set to @code{nil}, then no
-variables are displayed by that transient command, and its suffix
-command @code{magit-branch-configure} has to be used instead to view and
-change branch related variables.
-@end defopt
-
-@table @asis
-@item @kbd{b C} (@code{magit-branch-configure})
-@itemx @kbd{f C}
-@itemx @kbd{F C}
-@itemx @kbd{P C}
-@kindex b C
-@kindex f C
-@kindex F C
-@kindex P C
-@findex magit-branch-configure
-This transient prefix command binds commands that set the value of
-branch-related variables and displays them in a temporary buffer
-until the transient is exited.
-
-With a prefix argument, this command always prompts for a branch.
-
-Without a prefix argument this depends on whether it was invoked as
-a suffix of @code{magit-branch} and on the @code{magit-branch-direct-configure}
-option.  If @code{magit-branch} already displays the variables for the
-current branch, then it isn't useful to invoke another transient
-that displays them for the same branch.  In that case this command
-prompts for a branch.
-@end table
-
-The variables are described in @ref{Branch Git Variables}.
-
-@table @asis
-@item @kbd{b b} (@code{magit-checkout})
-@kindex b b
-@findex magit-checkout
-Checkout a revision read in the minibuffer and defaulting to the
-branch or arbitrary revision at point.  If the revision is a local
-branch then that becomes the current branch.  If it is something
-else then @code{HEAD} becomes detached.  Checkout fails if the working tree
-or the staging area contain changes.
-
-@item @kbd{b n} (@code{magit-branch-create})
-@kindex b n
-@findex magit-branch-create
-Create a new branch.  The user is asked for a branch or arbitrary
-revision to use as the starting point of the new branch.  When a
-branch name is provided, then that becomes the upstream branch of
-the new branch.  The name of the new branch is also read in the
-minibuffer.
-
-Also see option @code{magit-branch-prefer-remote-upstream}.
-
-@item @kbd{b c} (@code{magit-branch-and-checkout})
-@kindex b c
-@findex magit-branch-and-checkout
-This command creates a new branch like @code{magit-branch-create}, but then
-also checks it out.
-
-Also see option @code{magit-branch-prefer-remote-upstream}.
-
-@item @kbd{b l} (@code{magit-branch-checkout})
-@kindex b l
-@findex magit-branch-checkout
-This command checks out an existing or new local branch.  It reads a
-branch name from the user offering all local branches and a subset
-of remote branches as candidates.  Remote branches for which a local
-branch by the same name exists are omitted from the list of
-candidates.  The user can also enter a completely new branch name.
-
-@itemize
-@item
-If the user selects an existing local branch, then that is checked
-out.
-
-@item
-If the user selects a remote branch, then it creates and checks
-out a new local branch with the same name, and configures the
-selected remote branch as the push target.
-
-@item
-If the user enters a new branch name, then it creates and checks
-that out, after also reading the starting-point from the user.
-@end itemize
-
-In the latter two cases the upstream is also set.  Whether it is set
-to the chosen starting point or something else depends on the value
-of @code{magit-branch-adjust-remote-upstream-alist}.
-
-@item @kbd{b s} (@code{magit-branch-spinoff})
-@kindex b s
-@findex magit-branch-spinoff
-This command creates and checks out a new branch starting at and
-tracking the current branch.  That branch in turn is reset to the
-last commit it shares with its upstream.  If the current branch has
-no upstream or no unpushed commits, then the new branch is created
-anyway and the previously current branch is not touched.
-
-This is useful to create a feature branch after work has already
-began on the old branch (likely but not necessarily "master").
-
-If the current branch is a member of the value of option
-@code{magit-branch-prefer-remote-upstream} (which see), then the current
-branch will be used as the starting point as usual, but the upstream
-of the starting-point may be used as the upstream of the new branch,
-instead of the starting-point itself.
-
-If optional FROM is non-nil, then the source branch is reset
-to @code{FROM~}, instead of to the last commit it shares with its
-upstream.  Interactively, FROM is only ever non-nil, if the
-region selects some commits, and among those commits, FROM is
-the commit that is the fewest commits ahead of the source
-branch.
-
-The commit at the other end of the selection actually does not
-matter, all commits between FROM and @code{HEAD} are moved to the new
-branch.  If FROM is not reachable from @code{HEAD} or is reachable from the
-source branch's upstream, then an error is raised.
-
-@item @kbd{b S} (@code{magit-branch-spinout})
-@kindex b S
-@findex magit-branch-spinout
-This command behaves like @code{magit-branch-spinoff}, except that it does
-not change the current branch.  If there are any uncommitted changes,
-then it behaves exactly like @code{magit-branch-spinoff}.
-
-@item @kbd{b x} (@code{magit-branch-reset})
-@kindex b x
-@findex magit-branch-reset
-This command resets a branch, defaulting to the branch at point, to
-the tip of another branch or any other commit.
-
-When the branch being reset is the current branch, then a hard reset
-is performed.  If there are any uncommitted changes, then the user
-has to confirm the reset because those changes would be lost.
-
-This is useful when you have started work on a feature branch but
-realize it's all crap and want to start over.
-
-When resetting to another branch and a prefix argument is used, then
-the target branch is set as the upstream of the branch that is being
-reset.
-
-@item @kbd{b k} (@code{magit-branch-delete})
-@kindex b k
-@findex magit-branch-delete
-Delete one or multiple branches.  If the region marks multiple
-branches, then offer to delete those.  Otherwise, prompt for a single
-branch to be deleted, defaulting to the branch at point.
-
-Require confirmation when deleting branches is dangerous in some
-way.  Option @code{magit-no-confirm} can be customized to not require
-confirmation in certain cases.  See its docstring to learn why
-confirmation is required by default in certain cases or if a
-prompt is confusing.
-
-@item @kbd{b m} (@code{magit-branch-rename})
-@kindex b m
-@findex magit-branch-rename
-Rename a branch.  The branch and the new name are read in the
-minibuffer.  With prefix argument the branch is renamed even if that
-name conflicts with an existing branch.
-@end table
-
-@defopt magit-branch-read-upstream-first
-When creating a branch, whether to read the upstream branch before
-the name of the branch that is to be created.  The default is @code{t},
-and I recommend you leave it at that.
-@end defopt
-
-@defopt magit-branch-prefer-remote-upstream
-This option specifies whether remote upstreams are favored over
-local upstreams when creating new branches.
-
-When a new branch is created, then the branch, commit, or stash at
-point is suggested as the starting point of the new branch, or if
-there is no such revision at point the current branch.  In either
-case the user may choose another starting point.
-
-If the chosen starting point is a branch, then it may also be set
-as the upstream of the new branch, depending on the value of the
-Git variable `branch.autoSetupMerge'.  By default this is done
-for remote branches, but not for local branches.
-
-You might prefer to always use some remote branch as upstream.
-If the chosen starting point is (1) a local branch, (2) whose
-name matches a member of the value of this option, (3) the
-upstream of that local branch is a remote branch with the same
-name, and (4) that remote branch can be fast-forwarded to the
-local branch, then the chosen branch is used as starting point,
-but its own upstream is used as the upstream of the new branch.
-
-Members of this option's value are treated as branch names that
-have to match exactly unless they contain a character that makes
-them invalid as a branch name.  Recommended characters to use
-to trigger interpretation as a regexp are "*" and "^".  Some
-other characters which you might expect to be invalid, actually
-are not, e.g., ".+$" are all perfectly valid.  More precisely,
-if @code{git check-ref-format --branch STRING} exits with a non-zero
-status, then treat STRING as a regexp.
-
-Assuming the chosen branch matches these conditions you would end
-up with with e.g.:
-
-@example
-feature --upstream--> origin/master
-@end example
-
-instead of
-
-@example
-feature --upstream--> master --upstream--> origin/master
-@end example
-
-Which you prefer is a matter of personal preference.  If you do
-prefer the former, then you should add branches such as @code{master},
-@code{next}, and @code{maint} to the value of this options.
-@end defopt
-
-@defopt magit-branch-adjust-remote-upstream-alist
-The value of this option is an alist of branches to be used as
-the upstream when branching a remote branch.
-
-When creating a local branch from an ephemeral branch located on a
-remote, e.g., a feature or hotfix branch, then that remote branch
-should usually not be used as the upstream branch, since the
-push-remote already allows accessing it and having both the upstream
-and the push-remote reference the same related branch would be
-wasteful.  Instead a branch like "maint" or "master" should be used
-as the upstream.
-
-This option allows specifying the branch that should be used as the
-upstream when branching certain remote branches.  The value is an
-alist of the form @code{((UPSTREAM . RULE)...)}.  The first matching
-element is used, the following elements are ignored.
-
-UPSTREAM is the branch to be used as the upstream for branches
-specified by RULE@.  It can be a local or a remote branch.
-
-RULE can either be a regular expression, matching branches whose
-upstream should be the one specified by UPSTREAM@.  Or it can be a
-list of the only branches that should @strong{not} use UPSTREAM; all other
-branches will.  Matching is done after stripping the remote part of
-the name of the branch that is being branched from.
-
-If you use a finite set of non-ephemeral branches across all your
-repositories, then you might use something like:
-
-@lisp
-(("origin/master" . ("master" "next" "maint")))
-@end lisp
-
-Or if the names of all your ephemeral branches contain a slash,
-at least in some repositories, then a good value could be:
-
-@lisp
-(("origin/master" . "/"))
-@end lisp
-
-Of course you can also fine-tune:
-
-@lisp
-(("origin/maint" . "\\`hotfix/")
- ("origin/master" . "\\`feature/"))
-@end lisp
-
-UPSTREAM can be a local branch:
-
-@lisp
-(("master" . ("master" "next" "maint")))
-@end lisp
-@end defopt
-
-Because the main branch is no longer almost always named "master"
-you should also account for other common names:
-
-@lisp
-(("main"  . ("main" "master" "next" "maint"))
- ("master" . ("main" "master" "next" "maint")))
-@end lisp
-
-@deffn Command magit-branch-orphan
-This command creates and checks out a new orphan branch with
-contents from a given revision.
-@end deffn
-
-@deffn Command magit-branch-or-checkout
-This command is a hybrid between @code{magit-checkout} and
-@code{magit-branch-and-checkout} and is intended as a replacement for the
-former in @code{magit-branch}.
-
-It first asks the user for an existing branch or revision.  If the
-user input actually can be resolved as a branch or revision, then it
-checks that out, just like @code{magit-checkout} would.
-
-Otherwise it creates and checks out a new branch using the input as
-its name.  Before doing so it reads the starting-point for the new
-branch.  This is similar to what @code{magit-branch-and-checkout} does.
-
-To use this command instead of @code{magit-checkout} add this to your init
-file:
-
-@lisp
-(transient-replace-suffix 'magit-branch 'magit-checkout
-  '("b" "dwim" magit-branch-or-checkout))
-@end lisp
-@end deffn
-
-@node Branch Git Variables
-@subsection Branch Git Variables
-
-These variables can be set from the transient prefix command
-@code{magit-branch-configure}.  By default they can also be set from
-@code{magit-branch}.  See @ref{Branch Commands}.
-
-@defvar branch.NAME.merge
-Together with @code{branch.NAME.remote} this variable defines the upstream
-branch of the local branch named NAME@.  The value of this variable
-is the full reference of the upstream @emph{branch}.
-@end defvar
-
-@defvar branch.NAME.remote
-Together with @code{branch.NAME.merge} this variable defines the upstream
-branch of the local branch named NAME@.  The value of this variable
-is the name of the upstream @emph{remote}.
-@end defvar
-
-@defvar branch.NAME.rebase
-This variable controls whether pulling into the branch named NAME is
-done by rebasing or by merging the fetched branch.
-
-@itemize
-@item
-When @code{true} then pulling is done by rebasing.
-@item
-When @code{false} then pulling is done by merging.
-@item
-When undefined then the value of @code{pull.rebase} is used.  The default
-of that variable is @code{false}.
-@end itemize
-@end defvar
-
-@defvar branch.NAME.pushRemote
-This variable specifies the remote that the branch named NAME is
-usually pushed to.  The value has to be the name of an existing
-remote.
-
-It is not possible to specify the name of @emph{branch} to push the local
-branch to.  The name of the remote branch is always the same as the
-name of the local branch.
-
-If this variable is undefined but @code{remote.pushDefault} is defined,
-then the value of the latter is used.  By default @code{remote.pushDefault}
-is undefined.
-@end defvar
-
-@defvar branch.NAME.description
-This variable can be used to describe the branch named NAME@.  That
-description is used, e.g., when turning the branch into a series of
-patches.
-@end defvar
-
-The following variables specify defaults which are used if the above
-branch-specific variables are not set.
-
-@defvar pull.rebase
-This variable specifies whether pulling is done by rebasing or by
-merging.  It can be overwritten using @code{branch.NAME.rebase}.
-
-@itemize
-@item
-When @code{true} then pulling is done by rebasing.
-@item
-When @code{false} (the default) then pulling is done by merging.
-@end itemize
-
-Since it is never a good idea to merge the upstream branch into a
-feature or hotfix branch and most branches are such branches, you
-should consider setting this to @code{true}, and @code{branch.master.rebase} to
-@code{false}.
-@end defvar
-
-@defvar remote.pushDefault
-This variable specifies what remote the local branches are usually
-pushed to.  This can be overwritten per branch using
-@code{branch.NAME.pushRemote}.
-@end defvar
-
-The following variables are used during the creation of a branch and
-control whether the various branch-specific variables are
-automatically set at this time.
-
-@defvar branch.autoSetupMerge
-This variable specifies under what circumstances creating a branch
-NAME should result in the variables @code{branch.NAME.merge} and
-@code{branch.NAME.remote} being set according to the starting point used to
-create the branch.  If the starting point isn't a branch, then these
-variables are never set.
-
-@itemize
-@item
-When @code{always} then the variables are set regardless of whether the
-starting point is a local or a remote branch.
-@item
-When @code{true} (the default) then the variables are set when the starting
-point is a remote branch, but not when it is a local branch.
-@item
-When @code{false} then the variables are never set.
-@end itemize
-@end defvar
-
-@defvar branch.autoSetupRebase
-This variable specifies whether creating a branch NAME should result
-in the variable @code{branch.NAME.rebase} being set to @code{true}.
-
-@itemize
-@item
-When @code{always} then the variable is set regardless of whether the
-starting point is a local or a remote branch.
-@item
-When @code{local} then the variable are set when the starting point is a
-local branch, but not when it is a remote branch.
-@item
-When @code{remote} then the variable are set when the starting point is a
-remote branch, but not when it is a local branch.
-@item
-When @code{never} (the default) then the variable is never set.
-@end itemize
-@end defvar
-
-Note that the respective commands always change the repository-local
-values.  If you want to change the global value, which is used when
-the local value is undefined, then you have to do so on the command
-line, e.g.:
-
-@example
-git config --global remote.autoSetupMerge always
-@end example
-
-For more information about these variables you should also see
-@ifinfo
-@ref{git-config,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-config";>git-config(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-config(1) manpage.
-@end iftex
- Also see 
-@ifinfo
-@ref{git-branch,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-branch";>git-branch(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-branch(1) manpage.
-@end iftex
-, 
-@ifinfo
-@ref{git-checkout,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-checkout";>git-checkout(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-checkout(1) manpage.
-@end iftex
- and @ref{Pushing}.
-
-@defopt magit-prefer-remote-upstream
-This option controls whether commands that read a branch from the
-user and then set it as the upstream branch, offer a local or a
-remote branch as default completion candidate, when they have the
-choice.
-
-This affects all commands that use @code{magit-read-upstream-branch} or
-@code{magit-read-starting-point}, which includes all commands that change
-the upstream and many which create new branches.
-@end defopt
-
-@node Auxiliary Branch Commands
-@subsection Auxiliary Branch Commands
-
-These commands are not available from the transient @code{magit-branch} by
-default.
-
-@deffn Command magit-branch-shelve
-This command shelves a branch.  This is done by deleting the branch,
-and creating a new reference "refs/shelved/BRANCH-NAME" pointing at
-the same commit as the branch pointed at.  If the deleted branch had
-a reflog, then that is preserved as the reflog of the new reference.
-
-This is useful if you want to move a branch out of sight, but are
-not ready to completely discard it yet.
-@end deffn
-
-@deffn Command magit-branch-unshelve
-This command unshelves a branch that was previously shelved using
-@code{magit-branch-shelve}.  This is done by deleting the reference
-"refs/shelved/BRANCH-NAME" and creating a branch "BRANCH-NAME"
-pointing at the same commit as the deleted reference pointed at.
-If the deleted reference had a reflog, then that is restored as
-the reflog of the branch.
-@end deffn
-
-@node Merging
-@section Merging
-
-Also see 
-@ifinfo
-@ref{git-merge,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-merge";>git-merge(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-merge(1) manpage.
-@end iftex
-  For information on how to resolve
-merge conflicts see the next section.
-
-@table @asis
-@item @kbd{m} (@code{magit-merge})
-@kindex m
-@findex magit-merge
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-When no merge is in progress, then the transient features the
-following suffix commands.
-
-@table @asis
-@item @kbd{m m} (@code{magit-merge-plain})
-@kindex m m
-@findex magit-merge-plain
-This command merges another branch or an arbitrary revision into the
-current branch.  The branch or revision to be merged is read in the
-minibuffer and defaults to the branch at point.
-
-Unless there are conflicts or a prefix argument is used, then the
-resulting merge commit uses a generic commit message, and the user
-does not get a chance to inspect or change it before the commit is
-created.  With a prefix argument this does not actually create the
-merge commit, which makes it possible to inspect how conflicts were
-resolved and to adjust the commit message.
-
-@item @kbd{m e} (@code{magit-merge-editmsg})
-@kindex m e
-@findex magit-merge-editmsg
-This command merges another branch or an arbitrary revision into the
-current branch and opens a commit message buffer, so that the user
-can make adjustments.  The commit is not actually created until the
-user finishes with @code{C-c C-c}.
-
-@item @kbd{m n} (@code{magit-merge-nocommit})
-@kindex m n
-@findex magit-merge-nocommit
-This command merges another branch or an arbitrary revision into the
-current branch, but does not actually create the merge commit.  The
-user can then further adjust the merge, even when automatic conflict
-resolution succeeded and/or adjust the commit message.
-
-@item @kbd{m a} (@code{magit-merge-absorb})
-@kindex m a
-@findex magit-merge-absorb
-This command merges another local branch into the current branch and
-then removes the former.
-
-Before the source branch is merged, it is first force pushed to its
-push-remote, provided the respective remote branch already exists.
-This ensures that the respective pull-request (if any) won't get
-stuck on some obsolete version of the commits that are being merged.
-Finally, if @code{magit-branch-pull-request} was used to create the merged
-branch, then the respective remote branch is also removed.
-
-@item @kbd{m i} (@code{magit-merge-into})
-@kindex m i
-@findex magit-merge-into
-This command merges the current branch into another local branch and
-then removes the former.  The latter becomes the new current branch.
-
-Before the source branch is merged, it is first force pushed to its
-push-remote, provided the respective remote branch already exists.
-This ensures that the respective pull-request (if any) won't get
-stuck on some obsolete version of the commits that are being merged.
-Finally, if @code{magit-branch-pull-request} was used to create the merged
-branch, then the respective remote branch is also removed.
-
-@item @kbd{m s} (@code{magit-merge-squash})
-@kindex m s
-@findex magit-merge-squash
-This command squashes the changes introduced by another branch or an
-arbitrary revision into the current branch.  This only applies the
-changes made by the squashed commits.  No information is preserved
-that would allow creating an actual merge commit.  Instead of this
-command you should probably use a command from the apply transient.
-
-@item @kbd{m p} (@code{magit-merge-preview})
-@kindex m p
-@findex magit-merge-preview
-This command shows a preview of merging another branch or an
-arbitrary revision into the current branch.
-
-Note that commands, that normally change how a diff is displayed, do
-not work in buffers created by this command, because the underlying
-Git command does not support diff arguments.
-@end table
-
-When a merge is in progress, then the transient instead features the
-following suffix commands.
-
-@table @asis
-@item @kbd{m m} (@code{magit-merge})
-@kindex m m
-@findex magit-merge
-After the user resolved conflicts, this command proceeds with the
-merge.  If some conflicts weren't resolved, then this command fails.
-
-@item @kbd{m a} (@code{magit-merge-abort})
-@kindex m a
-@findex magit-merge-abort
-This command aborts the current merge operation.
-@end table
-
-@node Resolving Conflicts
-@section Resolving Conflicts
-
-When merging branches (or otherwise combining or changing history)
-conflicts can occur.  If you edited two completely different parts of
-the same file in two branches and then merge one of these branches
-into the other, then Git can resolve that on its own, but if you edit
-the same area of a file, then a human is required to decide how the
-two versions, or "sides of the conflict", are to be combined into one.
-
-Here we can only provide a brief introduction to the subject and point
-you toward some tools that can help.  If you are new to this, then
-please also consult Git's own documentation as well as other
-resources.
-
-If a file has conflicts and Git cannot resolve them by itself, then it
-puts both versions into the affected file along with special markers
-whose purpose is to denote the boundaries of the unresolved part of
-the file and between the different versions.  These boundary lines
-begin with the strings consisting of seven times the same character,
-one of @code{<}, @code{|}, @code{=} and @code{>}, and are followed by 
information about the source
-of the respective versions, e.g.:
-
-@example
-<<<<<<< HEAD
-Take the blue pill.
-=======
-Take the red pill.
->>>>>>> feature
-@end example
-
-In this case you have chosen to take the red pill on one branch and on
-another you picked the blue pill.  Now that you are merging these two
-diverging branches, Git cannot possibly know which pill you want to
-take.
-
-To resolve that conflict you have to create a version of the affected
-area of the file by keeping only one of the sides, possibly by editing
-it in order to bring in the changes from the other side, remove the
-other versions as well as the markers, and then stage the result.  A
-possible resolution might be:
-
-@example
-Take both pills.
-@end example
-
-Often it is useful to see not only the two sides of the conflict but
-also the "original" version from before the same area of the file was
-modified twice on different branches.  Instruct Git to insert that
-version as well by running this command once:
-
-@example
-git config --global merge.conflictStyle diff3
-@end example
-
-The above conflict might then have looked like this:
-
-@example
-<<<<<<< HEAD
-Take the blue pill.
-||||||| merged common ancestors
-Take either the blue or the red pill, but not both.
-=======
-Take the red pill.
->>>>>>> feature
-@end example
-
-If that were the case, then the above conflict resolution would not
-have been correct, which demonstrates why seeing the original version
-alongside the conflicting versions can be useful.
-
-You can perform the conflict resolution completely by hand, but Emacs
-also provides some packages that help in the process: Smerge, Ediff
-(@ref{Top,,,ediff,}), and Emerge (@ref{Emerge,,,emacs,}).  Magit does not 
provide
-its own tools for conflict resolution, but it does make using Smerge
-and Ediff more convenient.  (Ediff supersedes Emerge, so you probably
-don't want to use the latter anyway.)
-
-In the Magit status buffer, files with unresolved conflicts are listed
-in the "Unstaged changes" and/or "Staged changes" sections.  They are
-prefixed with the word "unmerged", which in this context essentially
-is a synonym for "unresolved".
-
-Pressing @code{RET} while point is on such a file section shows a buffer
-visiting that file, turns on @code{smerge-mode} in that buffer, and places
-point inside the first area with conflicts.  You should then resolve
-that conflict using regular edit commands and/or Smerge commands.
-
-Unfortunately Smerge does not have a manual, but you can get a list of
-commands and binding @code{C-c ^ C-h} and press @code{RET} while point is on a
-command name to read its documentation.
-
-Normally you would edit one version and then tell Smerge to keep only
-that version.  Use @code{C-c ^ m} (@code{smerge-keep-mine}) to keep the 
@code{HEAD}
-version or @code{C-c ^ o} (@code{smerge-keep-other}) to keep the version that
-follows "|||||||".  Then use @code{C-c ^ n} to move to the next conflicting
-area in the same file.  Once you are done resolving conflicts, return
-to the Magit status buffer.  The file should now be shown as
-"modified", no longer as "unmerged", because Smerge automatically
-stages the file when you save the buffer after resolving the last
-conflict.
-
-Magit now wraps the mentioned Smerge commands, allowing you to use
-these key bindings without having to go to the file-visiting buffer.
-Additionally @code{k} (@code{magit-discard}) on a hunk with unresolved 
conflicts
-asks which side to keep or, if point is on a side, then it keeps it
-without prompting.  Similarly @code{k} on a unresolved file ask which side
-to keep.
-
-Alternatively you could use Ediff, which uses separate buffers for the
-different versions of the file.  To resolve conflicts in a file using
-Ediff press @code{e} while point is on such a file in the status buffer.
-
-Ediff can be used for other purposes as well.  For more information on
-how to enter Ediff from Magit, see @ref{Ediffing}.  Explaining how to use
-Ediff is beyond the scope of this manual, instead see @ref{Top,,,ediff,}.
-
-If you are unsure whether you should Smerge or Ediff, then use the
-former.  It is much easier to understand and use, and except for
-truly complex conflicts, the latter is usually overkill.
-
-@node Rebasing
-@section Rebasing
-
-Also see 
-@ifinfo
-@ref{git-rebase,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-rebase";>git-rebase(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-rebase(1) manpage.
-@end iftex
-  For information on how to resolve
-conflicts that occur during rebases see the preceding section.
-
-@table @asis
-@item @kbd{r} (@code{magit-rebase})
-@kindex r
-@findex magit-rebase
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-When no rebase is in progress, then the transient features the
-following suffix commands.
-
-Using one of these commands @emph{starts} a rebase sequence.  Git might then
-stop somewhere along the way, either because you told it to do so, or
-because applying a commit failed due to a conflict.  When that
-happens, then the status buffer shows information about the rebase
-sequence which is in progress in a section similar to a log section.
-See @ref{Information About In-Progress Rebase}.
-
-For information about the upstream and the push-remote, see @ref{The Two 
Remotes}.
-
-@table @asis
-@item @kbd{r p} (@code{magit-rebase-onto-pushremote})
-@kindex r p
-@findex magit-rebase-onto-pushremote
-This command rebases the current branch onto its push-remote.
-
-With a prefix argument or when the push-remote is either not
-configured or unusable, then let the user first configure the
-push-remote.
-
-@item @kbd{r u} (@code{magit-rebase-onto-upstream})
-@kindex r u
-@findex magit-rebase-onto-upstream
-This command rebases the current branch onto its upstream branch.
-
-With a prefix argument or when the upstream is either not
-configured or unusable, then let the user first configure
-the upstream.
-
-@item @kbd{r e} (@code{magit-rebase-branch})
-@kindex r e
-@findex magit-rebase-branch
-This command rebases the current branch onto a branch read in the
-minibuffer.  All commits that are reachable from head but not from
-the selected branch TARGET are being rebased.
-
-@item @kbd{r s} (@code{magit-rebase-subset})
-@kindex r s
-@findex magit-rebase-subset
-This command starts a non-interactive rebase sequence to transfer
-commits from START to @code{HEAD} onto NEWBASE@.  START has to be selected
-from a list of recent commits.
-@end table
-
-By default Magit uses the @code{--autostash} argument, which causes
-uncommitted changes to be stored in a stash before the rebase begins.
-These changes are restored after the rebase completes and if possible
-the stash is removed.  If the stash does not apply cleanly, then the
-stash is not removed.  In case something goes wrong when resolving
-the conflicts, this allows you to start over.
-
-Even though one of the actions is dedicated to interactive rebases,
-the transient also features the infix argument @code{--interactive}.  This
-can be used to turn one of the other, non-interactive rebase variants
-into an interactive rebase.
-
-For example if you want to clean up a feature branch and at the same
-time rebase it onto @code{master}, then you could use @code{r-iu}.  But we 
recommend
-that you instead do that in two steps.  First use @code{ri} to cleanup the
-feature branch, and then in a second step @code{ru} to rebase it onto 
@code{master}.
-That way if things turn out to be more complicated than you thought
-and/or you make a mistake and have to start over, then you only have
-to redo half the work.
-
-Explicitly enabling @code{--interactive} won't have an effect on the
-following commands as they always use that argument anyway, even if it
-is not enabled in the transient.
-
-@table @asis
-@item @kbd{r i} (@code{magit-rebase-interactive})
-@kindex r i
-@findex magit-rebase-interactive
-This command starts an interactive rebase sequence.
-
-@item @kbd{r f} (@code{magit-rebase-autosquash})
-@kindex r f
-@findex magit-rebase-autosquash
-This command combines squash and fixup commits with their intended
-targets.
-
-@item @kbd{r m} (@code{magit-rebase-edit-commit})
-@kindex r m
-@findex magit-rebase-edit-commit
-This command starts an interactive rebase sequence that lets the
-user edit a single older commit.
-
-@item @kbd{r w} (@code{magit-rebase-reword-commit})
-@kindex r w
-@findex magit-rebase-reword-commit
-This command starts an interactive rebase sequence that lets the
-user reword a single older commit.
-
-@item @kbd{r k} (@code{magit-rebase-remove-commit})
-@kindex r k
-@findex magit-rebase-remove-commit
-This command removes a single older commit using rebase.
-@end table
-
-When a rebase is in progress, then the transient instead features
-the following suffix commands.
-
-@table @asis
-@item @kbd{r r} (@code{magit-rebase-continue})
-@kindex r r
-@findex magit-rebase-continue
-This command restart the current rebasing operation.
-
-In some cases this pops up a commit message buffer for you do edit.
-With a prefix argument the old message is reused as-is.
-
-@item @kbd{r s} (@code{magit-rebase-skip})
-@kindex r s
-@findex magit-rebase-skip
-This command skips the current commit and restarts the current
-rebase operation.
-
-@item @kbd{r e} (@code{magit-rebase-edit})
-@kindex r e
-@findex magit-rebase-edit
-This command lets the user edit the todo list of the current rebase
-operation.
-
-@item @kbd{r a} (@code{magit-rebase-abort})
-@kindex r a
-@findex magit-rebase-abort
-This command aborts the current rebase operation, restoring the
-original branch.
-@end table
-
-@menu
-* Editing Rebase Sequences::
-* Information About In-Progress Rebase::
-@end menu
-
-@node Editing Rebase Sequences
-@subsection Editing Rebase Sequences
-
-@table @asis
-@item @kbd{C-c C-c} (@code{with-editor-finish})
-@kindex C-c C-c
-@findex with-editor-finish
-Finish the current editing session by returning with exit code 0.
-Git then uses the rebase instructions it finds in the file.
-
-@item @kbd{C-c C-k} (@code{with-editor-cancel})
-@kindex C-c C-k
-@findex with-editor-cancel
-Cancel the current editing session by returning with exit code 1.
-Git then forgoes starting the rebase sequence.
-
-@item @kbd{@key{RET}} (@code{git-rebase-show-commit})
-@kindex RET
-@findex git-rebase-show-commit
-Show the commit on the current line in another buffer and select
-that buffer.
-
-@item @kbd{@key{SPC}} (@code{git-rebase-show-or-scroll-up})
-@kindex SPC
-@findex git-rebase-show-or-scroll-up
-Show the commit on the current line in another buffer without
-selecting that buffer.  If the revision buffer is already visible in
-another window of the current frame, then instead scroll that window
-up.
-
-@item @kbd{@key{DEL}} (@code{git-rebase-show-or-scroll-down})
-@kindex DEL
-@findex git-rebase-show-or-scroll-down
-Show the commit on the current line in another buffer without
-selecting that buffer.  If the revision buffer is already visible in
-another window of the current frame, then instead scroll that window
-down.
-
-@item @kbd{p} (@code{git-rebase-backward-line})
-@kindex p
-@findex git-rebase-backward-line
-Move to previous line.
-
-@item @kbd{n} (@code{forward-line})
-@kindex n
-@findex forward-line
-Move to next line.
-
-@item @kbd{M-p} (@code{git-rebase-move-line-up})
-@kindex M-p
-@findex git-rebase-move-line-up
-Move the current commit (or command) up.
-
-@item @kbd{M-n} (@code{git-rebase-move-line-down})
-@kindex M-n
-@findex git-rebase-move-line-down
-Move the current commit (or command) down.
-
-@item @kbd{r} (@code{git-rebase-reword})
-@kindex r
-@findex git-rebase-reword
-Edit message of commit on current line.
-
-@item @kbd{e} (@code{git-rebase-edit})
-@kindex e
-@findex git-rebase-edit
-Stop at the commit on the current line.
-
-@item @kbd{s} (@code{git-rebase-squash})
-@kindex s
-@findex git-rebase-squash
-Meld commit on current line into previous commit, and edit message.
-
-@item @kbd{f} (@code{git-rebase-fixup})
-@kindex f
-@findex git-rebase-fixup
-Meld commit on current line into previous commit, discarding the
-current commit's message.
-
-@item @kbd{k} (@code{git-rebase-kill-line})
-@kindex k
-@findex git-rebase-kill-line
-Kill the current action line.
-
-@item @kbd{c} (@code{git-rebase-pick})
-@kindex c
-@findex git-rebase-pick
-Use commit on current line.
-
-@item @kbd{x} (@code{git-rebase-exec})
-@kindex x
-@findex git-rebase-exec
-Insert a shell command to be run after the proceeding commit.
-
-If there already is such a command on the current line, then edit
-that instead.  With a prefix argument insert a new command even when
-there already is one on the current line.  With empty input remove
-the command on the current line, if any.
-
-@item @kbd{b} (@code{git-rebase-break})
-@kindex b
-@findex git-rebase-break
-Insert a break action before the current line, instructing Git to
-return control to the user.
-
-@item @kbd{y} (@code{git-rebase-insert})
-@kindex y
-@findex git-rebase-insert
-Read an arbitrary commit and insert it below current line.
-
-@item @kbd{C-x u} (@code{git-rebase-undo})
-@kindex C-x u
-@findex git-rebase-undo
-Undo some previous changes.  Like @code{undo} but works in read-only
-buffers.
-@end table
-
-@defopt git-rebase-auto-advance
-Whether to move to next line after changing a line.
-@end defopt
-
-@defopt git-rebase-show-instructions
-Whether to show usage instructions inside the rebase buffer.
-@end defopt
-
-@defopt git-rebase-confirm-cancel
-Whether confirmation is required to cancel.
-@end defopt
-
-When a rebase is performed with the @code{--rebase-merges} option, the
-sequence will include a few other types of actions and the following
-commands become relevant.
-
-@table @asis
-@item @kbd{l} (@code{git-rebase-label})
-@kindex l
-@findex git-rebase-label
-This commands inserts a label action or edits the one at point.
-
-@item @kbd{t} (@code{git-rebase-reset})
-@kindex t
-@findex git-rebase-reset
-This command inserts a reset action or edits the one at point.  The
-prompt will offer the labels that are currently present in the
-buffer.
-
-@item @kbd{MM} (@code{git-rebase-merge})
-@kindex MM
-@findex git-rebase-merge
-The command inserts a merge action or edits the one at point.  The
-prompt will offer the labels that are currently present in the
-buffer.  Specifying a message to reuse via @code{-c} or @code{-C} is not
-supported; an editor will always be invoked for the merge.
-
-@item @kbd{Mt} (@code{git-rebase-merge-toggle-editmsg})
-@kindex Mt
-@findex git-rebase-merge-toggle-editmsg
-This command toggles between the @code{-C} and @code{-c} options of the merge
-action at point.  These options both specify a commit whose message
-should be reused.  The lower-case variant instructs Git to invoke
-the editor when creating the merge, allowing the user to edit the
-message.
-@end table
-
-@node Information About In-Progress Rebase
-@subsection Information About In-Progress Rebase
-
-While a rebase sequence is in progress, the status buffer features a
-section that lists the commits that have already been applied as well
-as the commits that still have to be applied.
-
-The commits are split in two halves.  When rebase stops at a commit,
-either because the user has to deal with a conflict or because s/he
-explicitly requested that rebase stops at that commit, then point is
-placed on the commit that separates the two groups, i.e., on @code{HEAD}.
-The commits above it have not been applied yet, while the @code{HEAD} and the
-commits below it have already been applied.  In between these two
-groups of applied and yet-to-be applied commits, there sometimes is a
-commit which has been dropped.
-
-Each commit is prefixed with a word and these words are additionally
-shown in different colors to indicate the status of the commits.
-
-The following colors are used:
-
-@itemize
-@item
-Commits that use the same foreground color as the @code{default} face have
-not been applied yet.
-
-@item
-Yellow commits have some special relationship to the commit rebase
-stopped at.  This is used for the words "join", "goal", "same" and
-"work" (see below).
-
-@item
-Gray commits have already been applied.
-
-@item
-The blue commit is the @code{HEAD} commit.
-
-@item
-The green commit is the commit the rebase sequence stopped at.  If
-this is the same commit as @code{HEAD} (e.g., because you haven't done
-anything yet after rebase stopped at the commit, then this commit is
-shown in blue, not green).  There can only be a green @strong{and} a blue
-commit at the same time, if you create one or more new commits after
-rebase stops at a commit.
-
-@item
-Red commits have been dropped.  They are shown for reference only,
-e.g., to make it easier to diff.
-@end itemize
-
-Of course these colors are subject to the color-theme in use.
-
-The following words are used:
-
-@itemize
-@item
-Commits prefixed with @code{pick}, @code{reword}, @code{edit}, @code{squash}, 
and @code{fixup} have not
-been applied yet.  These words have the same meaning here as they do
-in the buffer used to edit the rebase sequence.  See @ref{Editing Rebase 
Sequences}.  When the @code{--rebase-merges} option was specified,
-@code{reset}, @code{label}, and @code{merge} lines may also be present.
-
-@item
-Commits prefixed with @code{done} and @code{onto} have already been applied.
-It is possible for such a commit to be the @code{HEAD}, in which case it
-is blue.  Otherwise it is grey.
-
-@itemize
-@item
-The commit prefixed with @code{onto} is the commit on top of which all
-the other commits are being re-applied.  This commit itself did
-not have to be re-applied, it is the commit rebase did rewind to
-before starting to re-apply other commits.
-
-@item
-Commits prefixed with @code{done} have already been re-applied.  This
-includes commits that have been re-applied but also new commits
-that you have created during the rebase.
-@end itemize
-
-@item
-All other commits, those not prefixed with any of the above words,
-are in some way related to the commit at which rebase stopped.
-
-To determine whether a commit is related to the stopped-at commit
-their hashes, trees and patch-ids @footnote{The patch-id is a hash of the 
@emph{changes} introduced by a
-commit.  It differs from the hash of the commit itself, which is a
-hash of the result of applying that change (i.e., the resulting trees
-and blobs) as well as author and committer information, the commit
-message, and the hashes of the parents of the commit.  The patch-id
-hash on the other hand is created only from the added and removed
-lines, even line numbers and whitespace changes are ignored when
-calculating this hash.  The patch-ids of two commits can be used to
-answer the question "Do these commits make the same change?".} are being 
compared.
-The commit message is not used for this purpose.
-
-Generally speaking commits that are related to the stopped-at commit
-can have any of the used colors, though not all color/word
-combinations are possible.
-
-Words used for stopped-at commits are:
-
-@itemize
-@item
-When a commit is prefixed with @code{void}, then that indicates that
-Magit knows for sure that all the changes in that commit have been
-applied using several new commits.  This commit is no longer
-reachable from @code{HEAD}, and it also isn't one of the commits that
-will be applied when resuming the session.
-
-@item
-When a commit is prefixed with @code{join}, then that indicates that the
-rebase sequence stopped at that commit due to a conflict - you now
-have to join (merge) the changes with what has already been
-applied.  In a sense this is the commit rebase stopped at, but
-while its effect is already in the index and in the worktree (with
-conflict markers), the commit itself has not actually been applied
-yet (it isn't the @code{HEAD}).  So it is shown in yellow, like the other
-commits that still have to be applied.
-
-@item
-When a commit is prefixed with @code{stop} or a @emph{blue} or @emph{green} 
@code{same}, then
-that indicates that rebase stopped at this commit, that it is
-still applied or has been applied again, and that at least its
-patch-id is unchanged.
-
-@itemize
-@item
-When a commit is prefixed with @code{stop}, then that indicates that
-rebase stopped at that commit because you requested that
-earlier, and its patch-id is unchanged.  It might even still be
-the exact same commit.
-
-@item
-When a commit is prefixed with a @emph{blue} or @emph{green} @code{same}, then 
that
-indicates that while its tree or hash changed, its patch-id did
-not.  If it is blue, then it is the @code{HEAD} commit (as always for
-blue).  When it is green, then it no longer is @code{HEAD} because
-other commit have been created since (but before continuing the
-rebase).
-@end itemize
-
-@item
-When a commit is prefixed with @code{goal}, a @emph{yellow} @code{same,} or 
@code{work}, then
-that indicates that rebase applied that commit but that you then
-reset @code{HEAD} to an earlier commit (likely to split it up into
-multiple commits), and that there are some uncommitted changes
-remaining which likely (but not necessarily) originate from that
-commit.
-
-@itemize
-@item
-When a commit is prefixed with @code{goal}, then that indicates that it
-is still possible to create a new commit with the exact same
-tree (the "goal") without manually editing any files, by
-committing the index, or by staging all changes and then
-committing that.  This is the case when the original tree still
-exists in the index or worktree in untainted form.
-
-@item
-When a commit is prefixed with a yellow @code{same}, then that
-indicates that it is no longer possible to create a commit with
-the exact same tree, but that it is still possible to create a
-commit with the same patch-id.  This would be the case if you
-created a new commit with other changes, but the changes from
-the original commit still exist in the index or working tree in
-untainted form.
-
-@item
-When a commit is prefixed with @code{work}, then that indicates that
-you reset @code{HEAD} to an earlier commit, and that there are some
-staged and/or unstaged changes (likely, but not necessarily)
-originating from that commit.  However it is no longer possible
-to create a new commit with the same tree or at least the same
-patch-id because you have already made other changes.
-@end itemize
-
-@item
-When a commit is prefixed with @code{poof} or @code{gone}, then that indicates
-that rebase applied that commit but that you then reset @code{HEAD} to an
-earlier commit (likely to split it up into multiple commits), and
-that there are no uncommitted changes.
-
-@itemize
-@item
-When a commit is prefixed with @code{poof}, then that indicates that it
-is no longer reachable from @code{HEAD}, but that it has been replaced
-with one or more commits, which together have the exact same
-effect.
-
-@item
-When a commit is prefixed with @code{gone}, then that indicates that it
-is no longer reachable from @code{HEAD} and that we also cannot
-determine whether its changes are still in effect in one or more
-new commits.  They might be, but if so, then there must also be
-other changes which makes it impossible to know for sure.
-@end itemize
-@end itemize
-@end itemize
-
-Do not worry if you do not fully understand the above.  That's okay,
-you will acquire a good enough understanding through practice.
-
-For other sequence operations such as cherry-picking, a similar section
-is displayed, but they lack some of the features described above, due
-to limitations in the git commands used to implement them.  Most
-importantly these sequences only support "picking" a commit but not
-other actions such as "rewording", and they do not keep track of the
-commits which have already been applied.
-
-@node Cherry Picking
-@section Cherry Picking
-
-Also see 
-@ifinfo
-@ref{git-cherry-pick,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-cherry-pick";>git-cherry-pick(1)</a> 
manpage.
-@end html
-@end ifhtml
-@iftex
-the git-cherry-pick(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{A} (@code{magit-cherry-pick})
-@kindex A
-@findex magit-cherry-pick
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-When no cherry-pick or revert is in progress, then the transient
-features the following suffix commands.
-
-@table @asis
-@item @kbd{A A} (@code{magit-cherry-copy})
-@kindex A A
-@findex magit-cherry-copy
-This command copies COMMITS from another branch onto the current
-branch.  If the region selects multiple commits, then those are
-copied, without prompting.  Otherwise the user is prompted for a
-commit or range, defaulting to the commit at point.
-
-@item @kbd{A a} (@code{magit-cherry-apply})
-@kindex A a
-@findex magit-cherry-apply
-This command applies the changes in COMMITS from another branch onto
-the current branch.  If the region selects multiple commits, then
-those are used, without prompting.  Otherwise the user is prompted
-for a commit or range, defaulting to the commit at point.
-
-This command also has a top-level binding, which can be invoked
-without using the transient by typing @code{a} at the top-level.
-@end table
-
-The following commands not only apply some commits to some branch, but
-also remove them from some other branch.  The removal is performed
-using either @code{git-update-ref} or if necessary @code{git-rebase}.  Both 
applying
-commits as well as removing them using @code{git-rebase} can lead to
-conflicts.  If that happens, then these commands abort and you not
-only have to resolve the conflicts but also finish the process the
-same way you would have to if these commands didn't exist at all.
-
-@table @asis
-@item @kbd{A h} (@code{magit-cherry-harvest})
-@kindex A h
-@findex magit-cherry-harvest
-This command moves the selected COMMITS that must be located on
-another BRANCH onto the current branch instead, removing them from
-the former.  When this command succeeds, then the same branch is
-current as before.
-
-Applying the commits on the current branch or removing them from the
-other branch can lead to conflicts.  When that happens, then this
-command stops and you have to resolve the conflicts and then finish
-the process manually.
-
-@item @kbd{A d} (@code{magit-cherry-donate})
-@kindex A d
-@findex magit-cherry-donate
-This command moves the selected COMMITS from the current branch onto
-another existing BRANCH, removing them from the former.  When this
-command succeeds, then the same branch is current as before.  @code{HEAD}
-is allowed to be detached initially.
-
-Applying the commits on the other branch or removing them from the
-current branch can lead to conflicts.  When that happens, then this
-command stops and you have to resolve the conflicts and then finish
-the process manually.
-
-@item @kbd{A n} (@code{magit-cherry-spinout})
-@kindex A n
-@findex magit-cherry-spinout
-This command moves the selected COMMITS from the current branch onto
-a new branch BRANCH, removing them from the former.  When this
-command succeeds, then the same branch is current as before.
-
-Applying the commits on the other branch or removing them from the
-current branch can lead to conflicts.  When that happens, then this
-command stops and you have to resolve the conflicts and then finish
-the process manually.
-
-@item @kbd{A s} (@code{magit-cherry-spinoff})
-@kindex A s
-@findex magit-cherry-spinoff
-This command moves the selected COMMITS from the current branch onto
-a new branch BRANCH, removing them from the former.  When this
-command succeeds, then the new branch is checked out.
-
-Applying the commits on the other branch or removing them from the
-current branch can lead to conflicts.  When that happens, then this
-command stops and you have to resolve the conflicts and then finish
-the process manually.
-@end table
-
-When a cherry-pick or revert is in progress, then the transient
-instead features the following suffix commands.
-
-@table @asis
-@item @kbd{A A} (@code{magit-sequence-continue})
-@kindex A A
-@findex magit-sequence-continue
-Resume the current cherry-pick or revert sequence.
-
-@item @kbd{A s} (@code{magit-sequence-skip})
-@kindex A s
-@findex magit-sequence-skip
-Skip the stopped at commit during a cherry-pick or revert sequence.
-
-@item @kbd{A a} (@code{magit-sequence-abort})
-@kindex A a
-@findex magit-sequence-abort
-Abort the current cherry-pick or revert sequence.  This discards all
-changes made since the sequence started.
-@end table
-
-@menu
-* Reverting::
-@end menu
-
-@node Reverting
-@subsection Reverting
-
-@table @asis
-@item @kbd{V} (@code{magit-revert})
-@kindex V
-@findex magit-revert
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-When no cherry-pick or revert is in progress, then the transient
-features the following suffix commands.
-
-@table @asis
-@item @kbd{V V} (@code{magit-revert-and-commit})
-@kindex V V
-@findex magit-revert-and-commit
-Revert a commit by creating a new commit.  Prompt for a commit,
-defaulting to the commit at point.  If the region selects multiple
-commits, then revert all of them, without prompting.
-
-@item @kbd{V v} (@code{magit-revert-no-commit})
-@kindex V v
-@findex magit-revert-no-commit
-Revert a commit by applying it in reverse to the working tree.
-Prompt for a commit, defaulting to the commit at point.  If the
-region selects multiple commits, then revert all of them, without
-prompting.
-@end table
-
-When a cherry-pick or revert is in progress, then the transient
-instead features the following suffix commands.
-
-@table @asis
-@item @kbd{V V} (@code{magit-sequence-continue})
-@kindex V V
-@findex magit-sequence-continue
-Resume the current cherry-pick or revert sequence.
-
-@item @kbd{V s} (@code{magit-sequence-skip})
-@kindex V s
-@findex magit-sequence-skip
-Skip the stopped at commit during a cherry-pick or revert sequence.
-
-@item @kbd{V a} (@code{magit-sequence-abort})
-@kindex V a
-@findex magit-sequence-abort
-Abort the current cherry-pick or revert sequence.  This discards all
-changes made since the sequence started.
-@end table
-
-@node Resetting
-@section Resetting
-
-Also see 
-@ifinfo
-@ref{git-reset,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-reset";>git-reset(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-reset(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{x} (@code{magit-reset-quickly})
-@kindex x
-@findex magit-reset-quickly
-Reset the @code{HEAD} and index to some commit read from the user and
-defaulting to the commit at point, and possibly also reset the
-working tree.  With a prefix argument reset the working tree
-otherwise don't.
-
-@item @kbd{X m} (@code{magit-reset-mixed})
-@kindex X m
-@findex magit-reset-mixed
-Reset the @code{HEAD} and index to some commit read from the user and
-defaulting to the commit at point.  The working tree is kept as-is.
-
-@item @kbd{X s} (@code{magit-reset-soft})
-@kindex X s
-@findex magit-reset-soft
-Reset the @code{HEAD} to some commit read from the user and defaulting
-to the commit at point.  The index and the working tree are kept
-as-is.
-
-@item @kbd{X h} (@code{magit-reset-hard})
-@kindex X h
-@findex magit-reset-hard
-Reset the @code{HEAD}, index, and working tree to some commit read from the
-user and defaulting to the commit at point.
-
-@item @kbd{X k} (@code{magit-reset-keep})
-@kindex X k
-@findex magit-reset-keep
-Reset the @code{HEAD}, index, and working tree to some commit read from the
-user and defaulting to the commit at point.  Uncommitted changes are
-kept as-is.
-
-@item @kbd{X i} (@code{magit-reset-index})
-@kindex X i
-@findex magit-reset-index
-Reset the index to some commit read from the user and defaulting to
-the commit at point.  Keep the @code{HEAD} and working tree as-is, so if
-the commit refers to the @code{HEAD}, then this effectively unstages all
-changes.
-
-@item @kbd{X w} (@code{magit-reset-worktree})
-@kindex X w
-@findex magit-reset-worktree
-Reset the working tree to some commit read from the user and
-defaulting to the commit at point.  Keep the @code{HEAD} and index as-is.
-
-@item @kbd{X f} (@code{magit-file-checkout})
-@kindex X f
-@findex magit-file-checkout
-Update file in the working tree and index to the contents from a
-revision.  Both the revision and file are read from the user.
-@end table
-
-@node Stashing
-@section Stashing
-
-Also see 
-@ifinfo
-@ref{git-stash,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-stash";>git-stash(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-stash(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{z} (@code{magit-stash})
-@kindex z
-@findex magit-stash
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{z z} (@code{magit-stash-both})
-@kindex z z
-@findex magit-stash-both
-Create a stash of the index and working tree.  Untracked files are
-included according to infix arguments.  One prefix argument is
-equivalent to @code{--include-untracked} while two prefix arguments are
-equivalent to @code{--all}.
-
-@item @kbd{z i} (@code{magit-stash-index})
-@kindex z i
-@findex magit-stash-index
-Create a stash of the index only.  Unstaged and untracked changes
-are not stashed.
-
-@item @kbd{z w} (@code{magit-stash-worktree})
-@kindex z w
-@findex magit-stash-worktree
-Create a stash of unstaged changes in the working tree.  Untracked
-files are included according to infix arguments.  One prefix
-argument is equivalent to @code{--include-untracked} while two prefix
-arguments are equivalent to @code{--all}.
-
-@item @kbd{z x} (@code{magit-stash-keep-index})
-@kindex z x
-@findex magit-stash-keep-index
-Create a stash of the index and working tree, keeping index intact.
-Untracked files are included according to infix arguments.  One
-prefix argument is equivalent to @code{--include-untracked} while two
-prefix arguments are equivalent to @code{--all}.
-
-@item @kbd{z Z} (@code{magit-snapshot-both})
-@kindex z Z
-@findex magit-snapshot-both
-Create a snapshot of the index and working tree.  Untracked files
-are included according to infix arguments.  One prefix argument is
-equivalent to @code{--include-untracked} while two prefix arguments are
-equivalent to @code{--all}.
-
-@item @kbd{z I} (@code{magit-snapshot-index})
-@kindex z I
-@findex magit-snapshot-index
-Create a snapshot of the index only.  Unstaged and untracked changes
-are not stashed.
-
-@item @kbd{z W} (@code{magit-snapshot-worktree})
-@kindex z W
-@findex magit-snapshot-worktree
-Create a snapshot of unstaged changes in the working tree.
-Untracked files are included according to infix arguments.  One
-prefix argument is equivalent to @code{--include-untracked} while two
-prefix arguments are equivalent to @code{--all}-.
-
-@item @kbd{z a} (@code{magit-stash-apply})
-@kindex z a
-@findex magit-stash-apply
-Apply a stash to the working tree.
-
-First try @code{git stash apply --index}, which tries to preserve
-the index stored in the stash, if any.  This may fail because
-applying the stash could result in conflicts and those have to
-be stored in the index, making it impossible to also store the
-stash's index there as well.
-
-If the above failed, then try @code{git stash apply}.  This fails
-(with or without @code{--index}) if there are any uncommitted
-changes to files that are also modified in the stash.
-
-If both of the above failed, then apply using @code{git apply}.
-If there are no conflicting files, use @code{--3way}.  If there are
-conflicting files, then using @code{--3way} requires that those
-files are staged first, which may be undesirable, so prompt
-the user whether to use @code{--3way} or @code{--reject}.
-
-Customize @code{magit-no-confirm} if you want to always use @code{--3way},
-without being prompted.
-
-@item @kbd{z p} (@code{magit-stash-pop})
-@kindex z p
-@findex magit-stash-pop
-Apply a stash to the working tree.  On complete success (if the
-stash can be applied without any conflicts, and while preserving
-the stash's index) then remove the stash from stash list.
-
-First try @code{git stash pop --index}, which tries to preserve
-the index stored in the stash, if any.  This may fail because
-applying the stash could result in conflicts and those have to
-be stored in the index, making it impossible to also store the
-stash's index there as well.
-
-If the above failed, then try @code{git stash apply}.  This fails
-(with or without @code{--index}) if there are any uncommitted
-changes to files that are also modified in the stash.
-
-If both of the above failed, then apply using @code{git apply}.
-If there are no conflicting files, use @code{--3way}.  If there are
-conflicting files, then using @code{--3way} requires that those
-files are staged first, which may be undesirable, so prompt
-the user whether to use @code{--3way} or @code{--reject}.
-
-Customize @code{magit-no-confirm} if you want to always use @code{--3way},
-without being prompted.
-
-@item @kbd{z k} (@code{magit-stash-drop})
-@kindex z k
-@findex magit-stash-drop
-Remove a stash from the stash list.  When the region is active, offer
-to drop all contained stashes.
-
-@item @kbd{z v} (@code{magit-stash-show})
-@kindex z v
-@findex magit-stash-show
-Show all diffs of a stash in a buffer.
-
-@item @kbd{z b} (@code{magit-stash-branch})
-@kindex z b
-@findex magit-stash-branch
-Create and checkout a new branch from an existing stash.  The new
-branch starts at the commit that was current when the stash was
-created.
-
-@item @kbd{z B} (@code{magit-stash-branch-here})
-@kindex z B
-@findex magit-stash-branch-here
-Create and checkout a new branch from an existing stash.  Use the
-current branch or @code{HEAD} as the starting-point of the new branch.
-Then apply the stash, dropping it if it applies cleanly.
-
-@item @kbd{z f} (@code{magit-stash-format-patch})
-@kindex z f
-@findex magit-stash-format-patch
-Create a patch from STASH@.
-
-@item @kbd{k} (@code{magit-stash-clear})
-@kindex k
-@findex magit-stash-clear
-Remove all stashes saved in REF's reflog by deleting REF@.
-
-@item @kbd{z l} (@code{magit-stash-list})
-@kindex z l
-@findex magit-stash-list
-List all stashes in a buffer.
-@end table
-
-@defopt magit-stashes-margin
-This option specifies whether the margin is initially shown in
-stashes buffers and how it is formatted.
-
-The value has the form @code{(INIT STYLE WIDTH AUTHOR AUTHOR-WIDTH)}.
-
-@itemize
-@item
-If INIT is non-nil, then the margin is shown initially.
-@item
-STYLE controls how to format the author or committer date.  It can
-be one of @code{age} (to show the age of the commit), @code{age-abbreviated} 
(to
-abbreviate the time unit to a character), or a string (suitable
-for @code{format-time-string}) to show the actual date.  Option
-@code{magit-log-margin-show-committer-date} controls which date is being
-displayed.
-@item
-WIDTH controls the width of the margin.  This exists for forward
-compatibility and currently the value should not be changed.
-@item
-AUTHOR controls whether the name of the author is also shown by
-default.
-@item
-AUTHOR-WIDTH has to be an integer.  When the name of the author
-is shown, then this specifies how much space is used to do so.
-@end itemize
-@end defopt
-
-@node Transferring
-@chapter Transferring
-
-@menu
-* Remotes::
-* Fetching::
-* Pulling::
-* Pushing::
-* Plain Patches::
-* Maildir Patches::
-@end menu
-
-@node Remotes
-@section Remotes
-
-@menu
-* Remote Commands::
-* Remote Git Variables::
-@end menu
-
-@node Remote Commands
-@subsection Remote Commands
-
-The transient prefix command @code{magit-remote} is used to add remotes and
-to make changes to existing remotes.  This command only deals with
-remotes themselves, not with branches or the transfer of commits.
-Those features are available from separate transient commands.
-
-Also see 
-@ifinfo
-@ref{git-remote,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-remote";>git-remote(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-remote(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{M} (@code{magit-remote})
-@kindex M
-@findex magit-remote
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-By default it also binds and displays the values of some
-remote-related Git variables and allows changing their values.
-@end table
-
-@defopt magit-remote-direct-configure
-This option controls whether remote-related Git variables are
-accessible directly from the transient @code{magit-remote}.
-
-If @code{t} (the default) and a local branch is checked out, then
-@code{magit-remote} features the variables for the upstream remote of that
-branch, or if @code{HEAD} is detached, for @code{origin}, provided that exists.
-
-If @code{nil}, then @code{magit-remote-configure} has to be used to do so.
-@end defopt
-
-@table @asis
-@item @kbd{M C} (@code{magit-remote-configure})
-@kindex M C
-@findex magit-remote-configure
-This transient prefix command binds commands that set the value of
-remote-related variables and displays them in a temporary buffer
-until the transient is exited.
-
-With a prefix argument, this command always prompts for a remote.
-
-Without a prefix argument this depends on whether it was invoked as
-a suffix of @code{magit-remote} and on the @code{magit-remote-direct-configure}
-option.  If @code{magit-remote} already displays the variables for the
-upstream, then it does not make sense to invoke another transient
-that displays them for the same remote.  In that case this command
-prompts for a remote.
-@end table
-
-The variables are described in @ref{Remote Git Variables}.
-
-@table @asis
-@item @kbd{M a} (@code{magit-remote-add})
-@kindex M a
-@findex magit-remote-add
-This command add a remote and fetches it.  The remote name and url
-are read in the minibuffer.
-
-@item @kbd{M r} (@code{magit-remote-rename})
-@kindex M r
-@findex magit-remote-rename
-This command renames a remote.  Both the old and the new names are
-read in the minibuffer.
-
-@item @kbd{M u} (@code{magit-remote-set-url})
-@kindex M u
-@findex magit-remote-set-url
-This command changes the url of a remote.  Both the remote and the
-new url are read in the minibuffer.
-
-@item @kbd{M k} (@code{magit-remote-remove})
-@kindex M k
-@findex magit-remote-remove
-This command deletes a remote, read in the minibuffer.
-
-@item @kbd{M p} (@code{magit-remote-prune})
-@kindex M p
-@findex magit-remote-prune
-This command removes stale remote-tracking branches for a remote
-read in the minibuffer.
-
-@item @kbd{M P} (@code{magit-remote-prune-refspecs})
-@kindex M P
-@findex magit-remote-prune-refspecs
-This command removes stale refspecs for a remote read in the
-minibuffer.
-
-A refspec is stale if there no longer exists at least one branch
-on the remote that would be fetched due to that refspec.  A stale
-refspec is problematic because its existence causes Git to refuse
-to fetch according to the remaining non-stale refspecs.
-
-If only stale refspecs remain, then this command offers to either
-delete the remote or to replace the stale refspecs with the default
-refspec ("+refs/heads/*:refs/remotes/REMOTE/*").
-
-This command also removes the remote-tracking branches that were
-created due to the now stale refspecs.  Other stale branches are
-not removed.
-@end table
-
-@defopt magit-remote-add-set-remote.pushDefault
-This option controls whether the user is asked whether they want to
-set @code{remote.pushDefault} after adding a remote.
-
-If @code{ask}, then users is always ask.  If @code{ask-if-unset}, then the 
user is
-only if the variable isn't set already.  If @code{nil}, then the user isn't
-asked and the variable isn't set.  If the value is a string, then
-the variable is set without the user being asked, provided that the
-name of the added remote is equal to that string and the variable
-isn't already set.
-@end defopt
-
-@node Remote Git Variables
-@subsection Remote Git Variables
-
-These variables can be set from the transient prefix command
-@code{magit-remote-configure}.  By default they can also be set from
-@code{magit-remote}.  See @ref{Remote Commands}.
-
-@defvar remote.NAME.url
-This variable specifies the url of the remote named NAME@.  It can
-have multiple values.
-@end defvar
-
-@defvar remote.NAME.fetch
-The refspec used when fetching from the remote named NAME@.  It can
-have multiple values.
-@end defvar
-
-@defvar remote.NAME.pushurl
-This variable specifies the url used for pushing to the remote
-named NAME@.  If it is not specified, then @code{remote.NAME.url} is used
-instead.  It can have multiple values.
-@end defvar
-
-@defvar remote.NAME.push
-The refspec used when pushing to the remote named NAME@.  It can
-have multiple values.
-@end defvar
-
-@defvar remote.NAME.tagOpts
-This variable specifies what tags are fetched by default.  If the
-value is @code{--no-tags} then no tags are fetched.  If the value is
-@code{--tags}, then all tags are fetched.  If this variable has no value,
-then only tags are fetched that are reachable from fetched branches.
-@end defvar
-
-@node Fetching
-@section Fetching
-
-Also see 
-@ifinfo
-@ref{git-fetch,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-fetch";>git-fetch(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-fetch(1) manpage.
-@end iftex
- For information about the upstream and the
-push-remote, see @ref{The Two Remotes}.
-
-@table @asis
-@item @kbd{f} (@code{magit-fetch})
-@kindex f
-@findex magit-fetch
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{f p} (@code{magit-fetch-from-pushremote})
-@kindex f p
-@findex magit-fetch-from-pushremote
-This command fetches from the current push-remote.
-
-With a prefix argument or when the push-remote is either not
-configured or unusable, then let the user first configure the
-push-remote.
-
-@item @kbd{f u} (@code{magit-fetch-from-upstream})
-@kindex f u
-@findex magit-fetch-from-upstream
-This command fetch from the upstream of the current branch.
-
-If the upstream is configured for the current branch and names
-an existing remote, then use that.  Otherwise try to use another
-remote: If only a single remote is configured, then use that.
-Otherwise if a remote named "origin" exists, then use that.
-
-If no remote can be determined, then this command is not available
-from the @code{magit-fetch} transient prefix and invoking it directly
-results in an error.
-
-@item @kbd{f e} (@code{magit-fetch-other})
-@kindex f e
-@findex magit-fetch-other
-This command fetch from a repository read from the minibuffer.
-
-@item @kbd{f o} (@code{magit-fetch-branch})
-@kindex f o
-@findex magit-fetch-branch
-This command fetches a branch from a remote, both of which are read
-from the minibuffer.
-
-@item @kbd{f r} (@code{magit-fetch-refspec})
-@kindex f r
-@findex magit-fetch-refspec
-This command fetches from a remote using an explicit refspec, both
-of which are read from the minibuffer.
-
-@item @kbd{f a} (@code{magit-fetch-all})
-@kindex f a
-@findex magit-fetch-all
-This command fetches from all remotes.
-
-@item @kbd{f m} (@code{magit-fetch-modules})
-@kindex f m
-@findex magit-fetch-modules
-This command fetches all submodules.  With a prefix argument, it
-acts as a transient prefix command, allowing the caller to set
-options.
-@end table
-
-@defopt magit-pull-or-fetch
-By default fetch and pull commands are available from separate
-transient prefix command.  Setting this to @code{t} adds some (but not all)
-of the above suffix commands to the @code{magit-pull} transient.
-
-If you do that, then you might also want to change the key binding
-for these prefix commands, e.g.:
-
-@lisp
-(setq magit-pull-or-fetch t)
-(define-key magit-mode-map "f" 'magit-pull) ; was magit-fetch
-(define-key magit-mode-map "F" nil)         ; was magit-pull
-@end lisp
-@end defopt
-
-@node Pulling
-@section Pulling
-
-Also see 
-@ifinfo
-@ref{git-pull,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-pull";>git-pull(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-pull(1) manpage.
-@end iftex
- For information about the upstream and the
-push-remote, see @ref{The Two Remotes}.
-
-@table @asis
-@item @kbd{F} (@code{magit-pull})
-@kindex F
-@findex magit-pull
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{F p} (@code{magit-pull-from-pushremote})
-@kindex F p
-@findex magit-pull-from-pushremote
-This command pulls from the push-remote of the current branch.
-
-With a prefix argument or when the push-remote is either not
-configured or unusable, then let the user first configure the
-push-remote.
-
-@item @kbd{F u} (@code{magit-pull-from-upstream})
-@kindex F u
-@findex magit-pull-from-upstream
-This command pulls from the upstream of the current branch.
-
-With a prefix argument or when the upstream is either not
-configured or unusable, then let the user first configure
-the upstream.
-
-@item @kbd{F e} (@code{magit-pull-branch})
-@kindex F e
-@findex magit-pull-branch
-This command pulls from a branch read in the minibuffer.
-@end table
-
-@node Pushing
-@section Pushing
-
-Also see 
-@ifinfo
-@ref{git-push,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-push";>git-push(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-push(1) manpage.
-@end iftex
- For information about the upstream and the
-push-remote, see @ref{The Two Remotes}.
-
-@table @asis
-@item @kbd{P} (@code{magit-push})
-@kindex P
-@findex magit-push
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{P p} (@code{magit-push-current-to-pushremote})
-@kindex P p
-@findex magit-push-current-to-pushremote
-This command pushes the current branch to its push-remote.
-
-With a prefix argument or when the push-remote is either not
-configured or unusable, then let the user first configure the
-push-remote.
-
-@item @kbd{P u} (@code{magit-push-current-to-upstream})
-@kindex P u
-@findex magit-push-current-to-upstream
-This command pushes the current branch to its upstream branch.
-
-With a prefix argument or when the upstream is either not
-configured or unusable, then let the user first configure
-the upstream.
-
-@item @kbd{P e} (@code{magit-push-current})
-@kindex P e
-@findex magit-push-current
-This command pushes the current branch to a branch read in the
-minibuffer.
-
-@item @kbd{P o} (@code{magit-push-other})
-@kindex P o
-@findex magit-push-other
-This command pushes an arbitrary branch or commit somewhere.  Both
-the source and the target are read in the minibuffer.
-
-@item @kbd{P r} (@code{magit-push-refspecs})
-@kindex P r
-@findex magit-push-refspecs
-This command pushes one or multiple refspecs to a remote, both of
-which are read in the minibuffer.
-
-To use multiple refspecs, separate them with commas.  Completion is
-only available for the part before the colon, or when no colon is
-used.
-
-@item @kbd{P m} (@code{magit-push-matching})
-@kindex P m
-@findex magit-push-matching
-This command pushes all matching branches to another repository.
-
-If only one remote exists, then push to that.  Otherwise prompt for
-a remote, offering the remote configured for the current branch as
-default.
-
-@item @kbd{P t} (@code{magit-push-tags})
-@kindex P t
-@findex magit-push-tags
-This command pushes all tags to another repository.
-
-If only one remote exists, then push to that.  Otherwise prompt for
-a remote, offering the remote configured for the current branch as
-default.
-
-@item @kbd{P T} (@code{magit-push-tag})
-@kindex P T
-@findex magit-push-tag
-This command pushes a tag to another repository.
-@end table
-
-One of the infix arguments, @code{--force-with-lease}, deserves a word of
-caution.  It is passed without a value, which means "permit a force
-push as long as the remote-tracking branches match their counterparts
-on the remote end".  If you've set up a tool to do automatic fetches
-(Magit itself does not provide such functionality), using
-@code{--force-with-lease} can be dangerous because you don't actually
-control or know the state of the remote-tracking refs.  In that case,
-you should consider setting @code{push.useForceIfIncludes} to @code{true}
-(available since Git 2.30).
-
-Two more push commands exist, which by default are not available from
-the push transient.  See their doc-strings for instructions on how to
-add them to the transient.
-
-@deffn Command magit-push-implicitly args
-This command pushes somewhere without using an explicit refspec.
-
-This command simply runs @code{git push -v [ARGS]}.  ARGS are the infix
-arguments.  No explicit refspec arguments are used.  Instead the
-behavior depends on at least these Git variables: @code{push.default},
-@code{remote.pushDefault}, @code{branch.<branch>.pushRemote},
-@code{branch.<branch>.remote}, @code{branch.<branch>.merge}, and
-@code{remote.<remote>.push}.
-
-If you add this suffix to a transient prefix without explicitly
-specifying the description, then an attempt is made to predict
-what this command will do.  For example:
-
-@lisp
-(transient-insert-suffix 'magit-push \"p\"
-  '(\"i\" magit-push-implicitly))"
-@end lisp
-@end deffn
-
-@deffn Command magit-push-to-remote remote args
-This command pushes to the remote REMOTE without using an explicit
-refspec.  The remote is read in the minibuffer.
-
-This command simply runs @code{git push -v [ARGS] REMOTE}.  ARGS are the
-infix arguments.  No refspec arguments are used.  Instead the
-behavior depends on at least these Git variables: @code{push.default},
-@code{remote.pushDefault}, @code{branch.<branch>.pushRemote},
-@code{branch.<branch>.remote}, @code{branch.<branch>.merge}, and
-@code{remote.<remote>.push}.
-@end deffn
-
-@node Plain Patches
-@section Plain Patches
-
-@table @asis
-@item @kbd{W} (@code{magit-patch})
-@kindex W
-@findex magit-patch
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{W c} (@code{magit-patch-create})
-@kindex W c
-@findex magit-patch-create
-This command creates patches for a set commits.  If the region marks
-several commits, then it creates patches for all of them.  Otherwise
-it functions as a transient prefix command, which features several
-infix arguments and binds itself as a suffix command.  When this
-command is invoked as a suffix of itself, then it creates a patch
-using the specified infix arguments.
-
-@item @kbd{w a} (@code{magit-patch-apply})
-@kindex w a
-@findex magit-patch-apply
-This command applies a patch.  This is a transient prefix command,
-which features several infix arguments and binds itself as a suffix
-command.  When this command is invoked as a suffix of itself, then
-it applies a patch using the specified infix arguments.
-
-@item @kbd{W s} (@code{magit-patch-save})
-@kindex W s
-@findex magit-patch-save
-This command creates a patch from the current diff.
-
-Inside @code{magit-diff-mode} or @code{magit-revision-mode} buffers, @code{C-x 
C-w} is
-also bound to this command.
-@end table
-
-It is also possible to save a plain patch file by using @code{C-x C-w} inside
-a @code{magit-diff-mode} or @code{magit-revision-mode} buffer.
-
-@node Maildir Patches
-@section Maildir Patches
-
-Also see 
-@ifinfo
-@ref{git-am,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-am";>git-am(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-am(1) manpage.
-@end iftex
- and 
-@ifinfo
-@ref{git-apply,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-apply";>git-apply(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-apply(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{w} (@code{magit-am})
-@kindex w
-@findex magit-am
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{w w} (@code{magit-am-apply-patches})
-@kindex w w
-@findex magit-am-apply-patches
-This command applies one or more patches.  If the region marks
-files, then those are applied as patches.  Otherwise this command
-reads a file-name in the minibuffer, defaulting to the file at
-point.
-
-@item @kbd{w m} (@code{magit-am-apply-maildir})
-@kindex w m
-@findex magit-am-apply-maildir
-This command applies patches from a maildir.
-
-@item @kbd{w a} (@code{magit-patch-apply})
-@kindex w a
-@findex magit-patch-apply
-This command applies a plain patch.  For a longer description see
-@ref{Plain Patches}.  This command is only available from the @code{magit-am}
-transient for historic reasons.
-@end table
-
-When an "am" operation is in progress, then the transient instead
-features the following suffix commands.
-
-@table @asis
-@item @kbd{w w} (@code{magit-am-continue})
-@kindex w w
-@findex magit-am-continue
-This command resumes the current patch applying sequence.
-
-@item @kbd{w s} (@code{magit-am-skip})
-@kindex w s
-@findex magit-am-skip
-This command skips the stopped at patch during a patch applying
-sequence.
-
-@item @kbd{w a} (@code{magit-am-abort})
-@kindex w a
-@findex magit-am-abort
-This command aborts the current patch applying sequence.  This
-discards all changes made since the sequence started.
-@end table
-
-@node Miscellaneous
-@chapter Miscellaneous
-
-@menu
-* Tagging::
-* Notes::
-* Submodules::
-* Subtree::
-* Worktree::
-* Sparse checkouts::
-* Bundle::
-* Common Commands::
-* Wip Modes::
-* Commands for Buffers Visiting Files::
-* Minor Mode for Buffers Visiting Blobs::
-@end menu
-
-@node Tagging
-@section Tagging
-
-Also see 
-@ifinfo
-@ref{git-tag,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-tag";>git-tag(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-tag(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{t} (@code{magit-tag})
-@kindex t
-@findex magit-tag
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{t t} (@code{magit-tag-create})
-@kindex t t
-@findex magit-tag-create
-This command creates a new tag with the given NAME at REV@.  With a
-prefix argument it creates an annotated tag.
-
-@item @kbd{t r} (@code{magit-tag-release})
-@kindex t r
-@findex magit-tag-release
-This commands creates a release tag.  It assumes that release tags
-match @code{magit-release-tag-regexp}.
-
-First it prompts for the name of the new tag using the highest
-existing tag as initial input and leaving it to the user to
-increment the desired part of the version string.  If you use
-unconventional release tags or version numbers (e.g.,
-@code{v1.2.3-custom.1}), you can set the @code{magit-release-tag-regexp} and
-@code{magit-tag-version-regexp-alist} variables.
-
-If @code{--annotate} is enabled then it prompts for the message of the
-new tag.  The proposed tag message is based on the message of the
-highest tag, provided that that contains the corresponding version
-string and substituting the new version string for that.  Otherwise
-it proposes something like "Foo-Bar 1.2.3", given, for example, a
-TAG "v1.2.3" and a repository located at something like
-"/path/to/foo-bar".
-
-@item @kbd{t k} (@code{magit-tag-delete})
-@kindex t k
-@findex magit-tag-delete
-This command deletes one or more tags.  If the region marks multiple
-tags (and nothing else), then it offers to delete those.  Otherwise,
-it prompts for a single tag to be deleted, defaulting to the tag at
-point.
-
-@item @kbd{t p} (@code{magit-tag-prune})
-@kindex t p
-@findex magit-tag-prune
-This command offers to delete tags missing locally from REMOTE, and
-vice versa.
-@end table
-
-@node Notes
-@section Notes
-
-Also see 
-@ifinfo
-@ref{git-notes,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-notes";>git-notes(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-notes(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{T} (@code{magit-notes})
-@kindex T
-@findex magit-notes
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-@item @kbd{T T} (@code{magit-notes-edit})
-@kindex T T
-@findex magit-notes-edit
-Edit the note attached to a commit, defaulting to the commit at
-point.
-
-By default use the value of Git variable @code{core.notesRef} or
-"refs/notes/commits" if that is undefined.
-
-@item @kbd{T r} (@code{magit-notes-remove})
-@kindex T r
-@findex magit-notes-remove
-Remove the note attached to a commit, defaulting to the commit at
-point.
-
-By default use the value of Git variable @code{core.notesRef} or
-"refs/notes/commits" if that is undefined.
-
-@item @kbd{T p} (@code{magit-notes-prune})
-@kindex T p
-@findex magit-notes-prune
-Remove notes about unreachable commits.
-@end table
-
-It is possible to merge one note ref into another.  That may result in
-conflicts which have to resolved in the temporary worktree
-".git/NOTES@math{_MERGE}@math{_WORKTREE}".
-
-@table @asis
-@item @kbd{T m} (@code{magit-notes-merge})
-@kindex T m
-@findex magit-notes-merge
-Merge the notes of a ref read from the user into the current notes
-ref.  The current notes ref is the value of Git variable
-@code{core.notesRef} or "refs/notes/commits" if that is undefined.
-@end table
-
-When a notes merge is in progress then the transient features the
-following suffix commands, instead of those listed above.
-
-@table @asis
-@item @kbd{T c} (@code{magit-notes-merge-commit})
-@kindex T c
-@findex magit-notes-merge-commit
-Commit the current notes ref merge, after manually resolving
-conflicts.
-
-@item @kbd{T a} (@code{magit-notes-merge-abort})
-@kindex T a
-@findex magit-notes-merge-abort
-Abort the current notes ref merge.
-@end table
-
-The following variables control what notes reference @code{magit-notes-*},
-@code{git notes} and @code{git show} act on and display.  Both the local and 
global
-values are displayed and can be modified.
-
-@defvar core.notesRef
-This variable specifies the notes ref that is displayed by default
-and which commands act on by default.
-@end defvar
-
-@defvar notes.displayRef
-This variable specifies additional notes ref to be displayed in
-addition to the ref specified by @code{core.notesRef}.  It can have
-multiple values and may end with @code{*} to display all refs in the
-@code{refs/notes/} namespace (or @code{**} if some names contain slashes).
-@end defvar
-
-@node Submodules
-@section Submodules
-
-Also see 
-@ifinfo
-@ref{git-submodule,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-submodule";>git-submodule(1)</a> 
manpage.
-@end html
-@end ifhtml
-@iftex
-the git-submodule(1) manpage.
-@end iftex
-
-@menu
-* Listing Submodules::
-* Submodule Transient::
-@end menu
-
-@node Listing Submodules
-@subsection Listing Submodules
-
-The command @code{magit-list-submodules} displays a list of the current
-repository's submodules in a separate buffer.  It's also possible to
-display information about submodules directly in the status buffer of
-the super-repository by adding @code{magit-insert-modules} to the hook
-@code{magit-status-sections-hook} as described in @ref{Status Module Sections}.
-
-@deffn Command magit-list-submodules
-This command displays a list of the current repository's populated
-submodules in a separate buffer.
-
-It can be invoked by pressing @code{RET} on the section titled "Modules".
-@end deffn
-
-@defopt magit-submodule-list-columns
-This option controls what columns are displayed by the command
-@code{magit-list-submodules} and how they are displayed.
-
-Each element has the form @code{(HEADER WIDTH FORMAT PROPS)}.
-
-HEADER is the string displayed in the header.  WIDTH is the width
-of the column.  FORMAT is a function that is called with one
-argument, the repository identification (usually its basename),
-and with @code{default-directory} bound to the toplevel of its working
-tree.  It has to return a string to be inserted or nil.  PROPS is
-an alist that supports the keys @code{:right-align}, @code{:pad-right} and
-@code{:sort}.
-
-The @code{:sort} function has a weird interface described in the
-docstring of @code{tabulated-list--get-sort}.  Alternatively @code{<} and
-@code{magit-repolist-version<} can be used as those functions are
-automatically replaced with functions that satisfy the interface.
-Set @code{:sort} to @code{nil} to inhibit sorting; if unspecified, then the
-column is sortable using the default sorter.
-
-You may wish to display a range of numeric columns using just one
-character per column and without any padding between columns, in
-which case you should use an appropriate HEADER, set WIDTH to 1,
-and set @code{:pad-right} to 9. @code{+} is substituted for numbers higher 
than 9.
-@end defopt
-
-@node Submodule Transient
-@subsection Submodule Transient
-
-@table @asis
-@item @kbd{o} (@code{magit-submodule})
-@kindex o
-@findex magit-submodule
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-@end table
-
-Some of the below commands default to act on the modules that are
-selected using the region.  For brevity their description talk about
-"the selected modules", but if no modules are selected, then they act
-on the current module instead, or if point isn't on a module, then the
-read a single module to act on.  With a prefix argument these commands
-ignore the selection and the current module and instead act on all
-suitable modules.
-
-@table @asis
-@item @kbd{o a} (@code{magit-submodule-add})
-@kindex o a
-@findex magit-submodule-add
-This commands adds the repository at URL as a module.  Optional PATH
-is the path to the module relative to the root of the super-project.
-If it is nil then the path is determined based on URL@.
-
-@item @kbd{o r} (@code{magit-submodule-register})
-@kindex o r
-@findex magit-submodule-register
-This command registers the selected modules by copying their urls
-from ".gitmodules" to "$GIT@math{_DIR}/config".  These values can then be
-edited before running @code{magit-submodule-populate}.  If you don't need
-to edit any urls, then use the latter directly.
-
-@item @kbd{o p} (@code{magit-submodule-populate})
-@kindex o p
-@findex magit-submodule-populate
-This command creates the working directory or directories of the
-selected modules, checking out the recorded commits.
-
-@item @kbd{o u} (@code{magit-submodule-update})
-@kindex o u
-@findex magit-submodule-update
-This command updates the selected modules checking out the recorded
-commits.
-
-@item @kbd{o s} (@code{magit-submodule-synchronize})
-@kindex o s
-@findex magit-submodule-synchronize
-This command synchronizes the urls of the selected modules, copying
-the values from ".gitmodules" to the ".git/config" of the
-super-project as well those of the modules.
-
-@item @kbd{o d} (@code{magit-submodule-unpopulate})
-@kindex o d
-@findex magit-submodule-unpopulate
-This command removes the working directory of the selected modules.
-
-@item @kbd{o l} (@code{magit-list-submodules})
-@kindex o l
-@findex magit-list-submodules
-This command displays a list of the current repository's modules.
-
-@item @kbd{o f} (@code{magit-fetch-modules})
-@kindex o f
-@findex magit-fetch-modules
-This command fetches all populated modules.  With a prefix argument,
-it acts as a transient prefix command, allowing the caller to set
-options.
-
-Also fetch the super-repository, because @code{git fetch} does not
-support not doing that.
-@end table
-
-@node Subtree
-@section Subtree
-
-Also see 
-@ifinfo
-@ref{git-subtree,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-subtree";>git-subtree(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-subtree(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{O} (@code{magit-subtree})
-@kindex O
-@findex magit-subtree
-This transient prefix command binds the two sub-transients; one for
-importing a subtree and one for exporting a subtree.
-
-@item @kbd{O i} (@code{magit-subtree-import})
-@kindex O i
-@findex magit-subtree-import
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-The suffixes of this command import subtrees.
-
-If the @code{--prefix} argument is set, then the suffix commands use that
-prefix without prompting the user.  If it is unset, then they read
-the prefix in the minibuffer.
-
-@item @kbd{O i a} (@code{magit-subtree-add})
-@kindex O i a
-@findex magit-subtree-add
-This command adds COMMIT from REPOSITORY as a new subtree at PREFIX@.
-
-@item @kbd{O i c} (@code{magit-subtree-add-commit})
-@kindex O i c
-@findex magit-subtree-add-commit
-This command add COMMIT as a new subtree at PREFIX@.
-
-@item @kbd{O i m} (@code{magit-subtree-merge})
-@kindex O i m
-@findex magit-subtree-merge
-This command merges COMMIT into the PREFIX subtree.
-
-@item @kbd{O i f} (@code{magit-subtree-pull})
-@kindex O i f
-@findex magit-subtree-pull
-This command pulls COMMIT from REPOSITORY into the PREFIX subtree.
-
-@item @kbd{O e} (@code{magit-subtree-export})
-@kindex O e
-@findex magit-subtree-export
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-The suffixes of this command export subtrees.
-
-If the @code{--prefix} argument is set, then the suffix commands use that
-prefix without prompting the user.  If it is unset, then they read
-the prefix in the minibuffer.
-
-@item @kbd{O e p} (@code{magit-subtree-push})
-@kindex O e p
-@findex magit-subtree-push
-This command extract the history of the subtree PREFIX and pushes it
-to REF on REPOSITORY@.
-
-@item @kbd{O e s} (@code{magit-subtree-split})
-@kindex O e s
-@findex magit-subtree-split
-This command extracts the history of the subtree PREFIX@.
-@end table
-
-@node Worktree
-@section Worktree
-
-Also see 
-@ifinfo
-@ref{git-worktree,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-worktree";>git-worktree(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-worktree(1) manpage.
-@end iftex
-
-@table @asis
-@item @kbd{Z} (@code{magit-worktree})
-@kindex Z
-@findex magit-worktree
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{Z b} (@code{magit-worktree-checkout})
-@kindex Z b
-@findex magit-worktree-checkout
-Checkout BRANCH in a new worktree at PATH@.
-
-@item @kbd{Z c} (@code{magit-worktree-branch})
-@kindex Z c
-@findex magit-worktree-branch
-Create a new BRANCH and check it out in a new worktree at PATH@.
-
-@item @kbd{Z m} (@code{magit-worktree-move})
-@kindex Z m
-@findex magit-worktree-move
-Move an existing worktree to a new PATH@.
-
-@item @kbd{Z k} (@code{magit-worktree-delete})
-@kindex Z k
-@findex magit-worktree-delete
-Delete a worktree, defaulting to the worktree at point.
-The primary worktree cannot be deleted.
-
-@item @kbd{Z g} (@code{magit-worktree-status})
-@kindex Z g
-@findex magit-worktree-status
-Show the status for the worktree at point.
-
-If there is no worktree at point, then read one in the minibuffer.
-If the worktree at point is the one whose status is already being
-displayed in the current buffer, then show it in Dired instead.
-@end table
-
-@node Sparse checkouts
-@section Sparse checkouts
-
-Sparse checkouts provide a way to restrict the working tree to a
-subset of directories.  See 
-@ifinfo
-@ref{git-sparse-checkout,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a 
href="http://git-scm.com/docs/git-sparse-checkout";>git-sparse-checkout(1)</a> 
manpage.
-@end html
-@end ifhtml
-@iftex
-the git-sparse-checkout(1) manpage.
-@end iftex
-
-@strong{Warning}: Git introduced the @code{git sparse-checkout} command in 
version
-2.25 and still advertises it as experimental and subject to change.
-Magit's interface should be considered the same.  In particular, if
-Git introduces a backward incompatible change, Magit's sparse checkout
-functionality may be updated in a way that requires a more recent Git
-version.
-
-@table @asis
-@item @kbd{>} (@code{magit-sparse-checkout})
-@kindex >
-@findex magit-sparse-checkout
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{> e} (@code{magit-sparse-checkout-enable})
-@kindex > e
-@findex magit-sparse-checkout-enable
-This command initializes a sparse checkout that includes only the
-files in the top-level directory.
-
-Note that @code{magit-sparse-checkout-set} and
-@code{magit-sparse-checkout-add} automatically initialize a sparse
-checkout if necessary.  However, you may want to call
-@code{magit-sparse-checkout-enable} explicitly to re-initialize a sparse
-checkout after calling @code{magit-sparse-checkout-disable}, to pass
-additional arguments to @code{git sparse-checkout init}, or to execute
-the initialization asynchronously.
-
-@item @kbd{> s} (@code{magit-sparse-checkout-set})
-@kindex > s
-@findex magit-sparse-checkout-set
-This command takes a list of directories and configures the sparse
-checkout to include only files in those subdirectories.  Any
-previously included directories are excluded unless they are in the
-provided list of directories.
-
-@item @kbd{> a} (@code{magit-sparse-checkout-add})
-@kindex > a
-@findex magit-sparse-checkout-add
-This command is like @code{magit-sparse-checkout-set}, but instead adds
-the specified list of directories to the set of directories that is
-already included in the sparse checkout.
-
-@item @kbd{> r} (@code{magit-sparse-checkout-reapply})
-@kindex > r
-@findex magit-sparse-checkout-reapply
-This command applies the currently configured sparse checkout
-patterns to the working tree.  This is useful to call if excluded
-files have been checked out after operations such as merging or
-rebasing.
-
-@item @kbd{> d} (@code{magit-sparse-checkout-disable})
-@kindex > d
-@findex magit-sparse-checkout-disable
-This command restores the full checkout.  To return to the previous
-sparse checkout, call @code{magit-sparse-checkout-enable}.
-@end table
-
-A sparse checkout can also be initiated when cloning a repository by
-using the @code{magit-clone-sparse} command in the @code{magit-clone} transient
-(see @ref{Cloning Repository}).
-
-If you want the status buffer to indicate when a sparse checkout is
-enabled, add the function @code{magit-sparse-checkout-insert-header} to
-@code{magit-status-headers-hook}.
-
-@node Bundle
-@section Bundle
-
-Also see 
-@ifinfo
-@ref{git-bundle,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-bundle";>git-bundle(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-bundle(1) manpage.
-@end iftex
-
-@deffn Command magit-bundle
-This transient prefix command binds several suffix commands for
-running @code{git bundle} subcommands and displays them in a temporary
-buffer until a suffix is invoked.
-@end deffn
-
-@node Common Commands
-@section Common Commands
-
-@deffn Command magit-switch-to-repository-buffer
-@end deffn
-@deffn Command magit-switch-to-repository-buffer-other-window
-@end deffn
-@deffn Command magit-switch-to-repository-buffer-other-frame
-@end deffn
-@deffn Command magit-display-repository-buffer
-These commands read any existing Magit buffer that belongs to the
-current repository from the user and then switch to the selected
-buffer (without refreshing it).
-
-The last variant uses @code{magit-display-buffer} to do so and thus
-respects @code{magit-display-buffer-function}.
-@end deffn
-
-These are some of the commands that can be used in all buffers whose
-major-modes derive from @code{magit-mode}.  There are other common commands
-beside the ones below, but these didn't fit well anywhere else.
-
-@table @asis
-@item @kbd{C-w} (@code{magit-copy-section-value})
-@kindex C-w
-@findex magit-copy-section-value
-This command saves the value of the current section to the
-@code{kill-ring}, and, provided that the current section is a commit,
-branch, or tag section, it also pushes the (referenced) revision to
-the @code{magit-revision-stack}.
-
-When the current section is a branch or a tag, and a prefix argument
-is used, then it saves the revision at its tip to the @code{kill-ring}
-instead of the reference name.
-
-When the region is active, this command saves that to the
-@code{kill-ring}, like @code{kill-ring-save} would, instead of behaving as
-described above. If a prefix argument is used and the region is
-within a hunk, then it strips the diff marker column and keeps
-only either the added or removed lines, depending on the sign of
-the prefix argument.
-
-@item @kbd{M-w} (@code{magit-copy-buffer-revision})
-@kindex M-w
-@findex magit-copy-buffer-revision
-This command saves the revision being displayed in the current buffer
-to the @code{kill-ring} and also pushes it to the @code{magit-revision-stack}. 
 It
-is mainly intended for use in @code{magit-revision-mode} buffers, the only
-buffers where it is always unambiguous exactly which revision should
-be saved.
-
-Most other Magit buffers usually show more than one revision, in
-some way or another, so this command has to select one of them, and
-that choice might not always be the one you think would have been
-the best pick.
-@end table
-
-Outside of Magit @code{M-w} and @code{C-w} are usually bound to 
@code{kill-ring-save} and
-@code{kill-region}, and these commands would also be useful in Magit buffers.
-Therefore when the region is active, then both of these commands
-behave like @code{kill-ring-save} instead of as described above.
-
-@node Wip Modes
-@section Wip Modes
-
-Git keeps @strong{committed} changes around long enough for users to recover
-changes they have accidentally deleted.  It does so by not garbage
-collecting any committed but no longer referenced objects for a
-certain period of time, by default 30 days.
-
-But Git does @strong{not} keep track of @strong{uncommitted} changes in the 
working tree
-and not even the index (the staging area).  Because Magit makes it so
-convenient to modify uncommitted changes, it also makes it easy to
-shoot yourself in the foot in the process.
-
-For that reason Magit provides a global mode that saves @strong{tracked} files
-to work-in-progress references after or before certain actions.  (At
-present untracked files are never saved and for technical reasons
-nothing is saved before the first commit has been created).
-
-Two separate work-in-progress references are used to track the state
-of the index and of the working tree: @code{refs/wip/index/<branchref>} and
-@code{refs/wip/wtree/<branchref>}, where @code{<branchref>} is the full ref of 
the
-current branch, e.g., @code{refs/heads/master}.  When the @code{HEAD} is 
detached
-then @code{HEAD} is used in place of @code{<branchref>}.
-
-Checking out another branch (or detaching @code{HEAD}) causes the use of
-different wip refs for subsequent changes.
-
-@defopt magit-wip-mode
-When this mode is enabled, then uncommitted changes are committed
-to dedicated work-in-progress refs whenever appropriate (i.e., when
-dataloss would be a possibility otherwise).
-
-Setting this variable directly does not take effect; either use the
-Custom interface to do so or call the respective mode function.
-
-For historic reasons this mode is implemented on top of four other
-@code{magit-wip-*} modes, which can also be used individually, if you want
-finer control over when the wip refs are updated; but that is
-discouraged.  See @ref{Legacy Wip Modes}.
-@end defopt
-
-To view the log for a branch and its wip refs use the commands
-@code{magit-wip-log} and @code{magit-wip-log-current}.  You should use 
@code{--graph} when
-using these commands.
-
-@deffn Command magit-wip-log
-This command shows the log for a branch and its wip refs.
-With a negative prefix argument only the worktree wip ref is shown.
-
-The absolute numeric value of the prefix argument controls how many
-"branches" of each wip ref are shown.  This is only relevant if the
-value of @code{magit-wip-merge-branch} is @code{nil}.
-@end deffn
-
-@deffn Command magit-wip-log-current
-This command shows the log for the current branch and its wip refs.
-With a negative prefix argument only the worktree wip ref is shown.
-
-The absolute numeric value of the prefix argument controls how many
-"branches" of each wip ref are shown.  This is only relevant if the
-value of @code{magit-wip-merge-branch} is @code{nil}.
-@end deffn
-
-@table @asis
-@item @kbd{X w} (@code{magit-reset-worktree})
-@kindex X w
-@findex magit-reset-worktree
-This command resets the working tree to some commit read from the
-user and defaulting to the commit at point, while keeping the @code{HEAD}
-and index as-is.
-
-This can be used to restore files to the state committed to a wip
-ref.  Note that this will discard any unstaged changes that might
-have existed before invoking this command (but of course only after
-committing that to the working tree wip ref).
-@end table
-
-Note that even if you enable @code{magit-wip-mode} this won't give you
-perfect protection.  The most likely scenario for losing changes
-despite the use of @code{magit-wip-mode} is making a change outside Emacs and
-then destroying it also outside Emacs.  In some such a scenario,
-Magit, being an Emacs package, didn't get the opportunity to keep you
-from shooting yourself in the foot.
-
-When you are unsure whether Magit did commit a change to the wip refs,
-then you can explicitly request that all changes to all tracked files
-are being committed.
-
-@table @asis
-@item @kbd{M-x magit-wip-commit}
-@findex magit-wip-commit
-This command commits all changes to all tracked files to the index
-and working tree work-in-progress refs.  Like the modes described above,
-it does not commit untracked files, but it does check all tracked
-files for changes.  Use this command when you suspect that the modes
-might have overlooked a change made outside Emacs/Magit.
-@end table
-
-@defopt magit-wip-namespace
-The namespace used for work-in-progress refs.  It has to end with
-a slash.  The wip refs are named @code{<namespace>index/<branchref>} and
-@code{<namespace>wtree/<branchref>}.  When snapshots are created while
-the @code{HEAD} is detached then @code{HEAD} is used in place of 
@code{<branchref>}.
-@end defopt
-
-@defopt magit-wip-mode-lighter
-Mode-line lighter for @code{magit-wip--mode}.
-@end defopt
-
-@menu
-* Wip Graph::
-* Legacy Wip Modes::
-@end menu
-
-@node Wip Graph
-@subsection Wip Graph
-
-@defopt magit-wip-merge-branch
-This option controls whether the current branch is merged into the
-wip refs after a new commit was created on the branch.
-
-If non-nil and the current branch has new commits, then it is
-merged into the wip ref before creating a new wip commit.  This
-makes it easier to inspect wip history and the wip commits are
-never garbage collected.
-
-If nil and the current branch has new commits, then the wip ref
-is reset to the tip of the branch before creating a new wip
-commit.  With this setting wip commits are eventually garbage
-collected.
-@end defopt
-
-When @code{magit-wip-merge-branch} is @code{t}, then the history looks like 
this:
-
-@example
-  *--*--*--*--*--*       refs/wip/index/refs/heads/master
- /     /     /
-A-----B-----C            refs/heads/master
-@end example
-
-When @code{magit-wip-merge-branch} is @code{nil}, then creating a commit on 
the real
-branch and then making a change causes the wip refs to be recreated to
-fork from the new commit.  But the old commits on the wip refs are not
-lost.  They are still available from the reflog.  To make it easier to
-see when the fork point of a wip ref was changed, an additional commit
-with the message "restart autosaving" is created on it (@code{xxO} commits
-below are such boundary commits).
-
-Starting with
-
-@example
-      BI0---BI1    refs/wip/index/refs/heads/master
-     /
-A---B              refs/heads/master
-     \
-      BW0---BW1    refs/wip/wtree/refs/heads/master
-@end example
-
-and committing the staged changes and editing and saving a file would
-result in
-
-@example
-      BI0---BI1        refs/wip/index/refs/heads/master
-     /
-A---B---C              refs/heads/master
-     \   \
-      \   CW0---CW1    refs/wip/wtree/refs/heads/master
-       \
-        BW0---BW1      refs/wip/wtree/refs/heads/master@@@{2@}
-@end example
-
-The fork-point of the index wip ref is not changed until some change
-is being staged.  Likewise just checking out a branch or creating a
-commit does not change the fork-point of the working tree wip ref.  The
-fork-points are not adjusted until there actually is a change that
-should be committed to the respective wip ref.
-
-@node Legacy Wip Modes
-@subsection Legacy Wip Modes
-
-It is recommended that you use the mode @code{magit-wip-mode} (which see) and
-ignore the existence of the following modes, which are preserved for
-historic reasons.
-
-Setting the following variables directly does not take effect; either
-use the Custom interface to do so or call the respective mode
-functions.
-
-@defopt magit-wip-after-save-mode
-When this mode is enabled, then saving a buffer that visits a file
-tracked in a Git repository causes its current state to be committed
-to the working tree wip ref for the current branch.
-@end defopt
-
-@defopt magit-wip-after-apply-mode
-When this mode is enabled, then applying (i.e., staging, unstaging,
-discarding, reversing, and regularly applying) a change to a file
-tracked in a Git repository causes its current state to be committed
-to the index and/or working tree wip refs for the current branch.
-@end defopt
-
-If you only ever edit files using Emacs and only ever interact with
-Git using Magit, then the above two modes should be enough to protect
-each and every change from accidental loss.  In practice nobody does
-that.  Two additional modes exists that do commit to the wip refs
-before making changes that could cause the loss of earlier changes.
-
-@defopt magit-wip-before-change-mode
-When this mode is enabled, then certain commands commit the existing
-changes to the files they are about to make changes to.
-@end defopt
-
-@defopt magit-wip-initial-backup-mode
-When this mode is enabled, then the current version of a file is
-committed to the worktree wip ref before the buffer visiting that
-file is saved for the first time since the buffer was created.
-
-This backs up the same version of the file that @code{backup-buffer} would
-save.  While @code{backup-buffer} uses a backup file, this mode uses the
-same worktree wip ref as used by the other Magit Wip modes.  Like
-@code{backup-buffer}, it only does this once; unless you kill the buffer
-and visit the file again only one backup will be created per Emacs
-session.
-
-This mode ignores the variables that affect @code{backup-buffer} and can be
-used along-side that function, which is recommended because it only
-backs up files that are tracked in a Git repository.
-@end defopt
-
-@defopt magit-wip-after-save-local-mode-lighter
-Mode-line lighter for @code{magit-wip-after-save-local-mode}.
-@end defopt
-
-@defopt magit-wip-after-apply-mode-lighter
-Mode-line lighter for @code{magit-wip-after-apply-mode}.
-@end defopt
-
-@defopt magit-wip-before-change-mode-lighter
-Mode-line lighter for @code{magit-wip-before-change-mode}.
-@end defopt
-
-@defopt magit-wip-initial-backup-mode-lighter
-Mode-line lighter for @code{magit-wip-initial-backup-mode}.
-@end defopt
-
-@node Commands for Buffers Visiting Files
-@section Commands for Buffers Visiting Files
-
-By default Magit defines a few global key bindings.  These bindings
-are a compromise between providing no bindings at all and providing
-the better bindings I would have liked to use instead.  Magit cannot
-provide the set of recommended bindings by default because those key
-sequences are strictly reserved for bindings added by the user.
-Also see @ref{Global Bindings} and @ref{Key Binding Conventions,,,elisp,}.
-
-To use the recommended bindings, add this to your init file and
-restart Emacs.
-
-@lisp
-(setq magit-define-global-key-bindings 'recommended)
-@end lisp
-
-If you don't want Magit to add any bindings to the global keymap at
-all, add this to your init file and restart Emacs.
-
-@lisp
-(setq magit-define-global-key-bindings nil)
-@end lisp
-
-@table @asis
-@item @kbd{C-c f} (@code{magit-file-dispatch})
-@itemx @kbd{C-c f s} (@code{magit-stage-file})
-@itemx @kbd{C-c f s} (@code{magit-stage-buffer-file})
-@itemx @kbd{C-c f u} (@code{magit-unstage-file})
-@itemx @kbd{C-c f u} (@code{magit-unstage-buffer-file})
-@itemx @kbd{C-c f , x} (@code{magit-file-untrack})
-@itemx @kbd{C-c f , r} (@code{magit-file-rename})
-@itemx @kbd{C-c f , k} (@code{magit-file-delete})
-@itemx @kbd{C-c f , c} (@code{magit-file-checkout})
-@itemx @kbd{C-c f D} (@code{magit-diff})
-@itemx @kbd{C-c f d} (@code{magit-diff-buffer-file})
-@itemx @kbd{C-c f L} (@code{magit-log})
-@itemx @kbd{C-c f l} (@code{magit-log-buffer-file})
-@itemx @kbd{C-c f t} (@code{magit-log-trace-definition})
-@itemx @kbd{C-c f M} (@code{magit-log-merged})
-@itemx @kbd{C-c f B} (@code{magit-blame})
-@itemx @kbd{C-c f b} (@code{magit-blame-additions})
-@itemx @kbd{C-c f r} (@code{magit-blame-removal})
-@itemx @kbd{C-c f f} (@code{magit-blame-reverse})
-@itemx @kbd{C-c f m} (@code{magit-blame-echo})
-@itemx @kbd{C-c f q} (@code{magit-blame-quit})
-@itemx @kbd{C-c f p} (@code{magit-blob-previous})
-@itemx @kbd{C-c f n} (@code{magit-blob-next})
-@itemx @kbd{C-c f v} (@code{magit-find-file})
-@itemx @kbd{C-c f V} (@code{magit-blob-visit-file})
-@itemx @kbd{C-c f g} (@code{magit-status-here})
-@itemx @kbd{C-c f G} (@code{magit-display-repository-buffer})
-@itemx @kbd{C-c f c} (@code{magit-commit})
-@itemx @kbd{C-c f e} (@code{magit-edit-line-commit})
-@kindex C-c f
-@kindex C-c f s
-@kindex C-c f s
-@kindex C-c f u
-@kindex C-c f u
-@kindex C-c f , x
-@kindex C-c f , r
-@kindex C-c f , k
-@kindex C-c f , c
-@kindex C-c f D
-@kindex C-c f d
-@kindex C-c f L
-@kindex C-c f l
-@kindex C-c f t
-@kindex C-c f M
-@kindex C-c f B
-@kindex C-c f b
-@kindex C-c f r
-@kindex C-c f f
-@kindex C-c f m
-@kindex C-c f q
-@kindex C-c f p
-@kindex C-c f n
-@kindex C-c f v
-@kindex C-c f V
-@kindex C-c f g
-@kindex C-c f G
-@kindex C-c f c
-@kindex C-c f e
-@findex magit-file-dispatch
-@findex magit-stage-file
-@findex magit-stage-buffer-file
-@findex magit-unstage-file
-@findex magit-unstage-buffer-file
-@findex magit-file-untrack
-@findex magit-file-rename
-@findex magit-file-delete
-@findex magit-file-checkout
-@findex magit-diff
-@findex magit-diff-buffer-file
-@findex magit-log
-@findex magit-log-buffer-file
-@findex magit-log-trace-definition
-@findex magit-log-merged
-@findex magit-blame
-@findex magit-blame-additions
-@findex magit-blame-removal
-@findex magit-blame-reverse
-@findex magit-blame-echo
-@findex magit-blame-quit
-@findex magit-blob-previous
-@findex magit-blob-next
-@findex magit-find-file
-@findex magit-blob-visit-file
-@findex magit-status-here
-@findex magit-display-repository-buffer
-@findex magit-commit
-@findex magit-edit-line-commit
-Each of these commands is documented individually right below,
-alongside their default key bindings.  The bindings shown above
-are the recommended bindings, which you can enable by following
-the instructions further up.
-
-@item @kbd{C-c M-g} (@code{magit-file-dispatch})
-@kindex C-c M-g
-@findex magit-file-dispatch
-This transient prefix command binds the following suffix commands
-and displays them in a temporary buffer until a suffix is invoked.
-
-@item @kbd{C-c M-g s} (@code{magit-stage-file})
-@itemx @kbd{C-c M-g s} (@code{magit-stage-buffer-file})
-@kindex C-c M-g s
-@kindex C-c M-g s
-@findex magit-stage-file
-@findex magit-stage-buffer-file
-Stage all changes to the file being visited in the current buffer.
-When not visiting a file, then the first command is used, which
-prompts for a file.
-
-@item @kbd{C-c M-g u} (@code{magit-unstage-file})
-@itemx @kbd{C-c M-g u} (@code{magit-unstage-buffer-file})
-@kindex C-c M-g u
-@kindex C-c M-g u
-@findex magit-unstage-file
-@findex magit-unstage-buffer-file
-Unstage all changes to the file being visited in the current buffer.
-When not visiting a file, then the first command is used, which
-prompts for a file.
-
-@item @kbd{C-c M-g , x} (@code{magit-file-untrack})
-@kindex C-c M-g , x
-@findex magit-file-untrack
-This command untracks a file read from the user, defaulting to the
-visited file.
-
-@item @kbd{C-c M-g , r} (@code{magit-file-rename})
-@kindex C-c M-g , r
-@findex magit-file-rename
-This command renames a file read from the user, defaulting to the
-visited file.
-
-@item @kbd{C-c M-g , k} (@code{magit-file-delete})
-@kindex C-c M-g , k
-@findex magit-file-delete
-This command deletes a file read from the user, defaulting to the
-visited file.
-
-@item @kbd{C-c M-g , c} (@code{magit-file-checkout})
-@kindex C-c M-g , c
-@findex magit-file-checkout
-This command updates a file in the working tree and index to the
-contents from a revision.  Both the revision and file are read
-from the user.
-
-@item @kbd{C-c M-g D} (@code{magit-diff})
-@kindex C-c M-g D
-@findex magit-diff
-This transient prefix command binds several diff suffix commands and
-infix arguments and displays them in a temporary buffer until a
-suffix is invoked.  See @ref{Diffing}.
-
-This is the same command that @code{d} is bound to in Magit buffers.
-If this command is invoked from a file-visiting buffer, then the
-initial value of the option (@code{--}) that limits the diff to certain
-file(s) is set to the visited file.
-
-@item @kbd{C-c M-g d} (@code{magit-diff-buffer-file})
-@kindex C-c M-g d
-@findex magit-diff-buffer-file
-This command shows the diff for the file of blob that the current
-buffer visits.
-@end table
-
-@defopt magit-diff-buffer-file-locked
-This option controls whether @code{magit-diff-buffer-file} uses a dedicated
-buffer.  See @ref{Modes and Buffers}.
-@end defopt
-
-@table @asis
-@item @kbd{C-c M-g L} (@code{magit-log})
-@kindex C-c M-g L
-@findex magit-log
-This transient prefix command binds several log suffix commands and
-infix arguments and displays them in a temporary buffer until a
-suffix is invoked.  See @ref{Logging}.
-
-This is the same command that @code{l} is bound to in Magit buffers.
-If this command is invoked from a file-visiting buffer, then the
-initial value of the option (@code{--}) that limits the log to certain
-file(s) is set to the visited file.
-
-@item @kbd{C-c M-g l} (@code{magit-log-buffer-file})
-@kindex C-c M-g l
-@findex magit-log-buffer-file
-This command shows the log for the file of blob that the current
-buffer visits.  Renames are followed when a prefix argument is used
-or when @code{--follow} is an active log argument.  When the region is
-active, the log is restricted to the selected line range.
-@end table
-
-@defopt magit-log-buffer-file-locked
-This option controls whether @code{magit-log-buffer-file} uses a dedicated
-buffer.  See @ref{Modes and Buffers}.
-@end defopt
-
-@table @asis
-@item @kbd{C-c M-g t} (@code{magit-log-trace-definition})
-@kindex C-c M-g t
-@findex magit-log-trace-definition
-This command shows the log for the definition at point.
-
-@item @kbd{C-c M-g M} (@code{magit-log-merged})
-@kindex C-c M-g M
-@findex magit-log-merged
-This command reads a commit and a branch in shows a log concerning
-the merge of the former into the latter.  This shows multiple commits
-even in case of a fast-forward merge.
-
-@item @kbd{C-c M-g B} (@code{magit-blame})
-@kindex C-c M-g B
-@findex magit-blame
-This transient prefix command binds all blaming suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.
-
-For more information about this and the following commands also see
-@ref{Blaming}.
-
-In addition to the @code{magit-blame} sub-transient, the dispatch transient
-also binds several blaming suffix commands directly.  See @ref{Blaming}
-for information about those commands and bindings.
-
-@item @kbd{C-c M-g p} (@code{magit-blob-previous})
-@kindex C-c M-g p
-@findex magit-blob-previous
-This command visits the previous blob which modified the current
-file.
-
-@item @kbd{C-c M-g n} (@code{magit-blob-next})
-@kindex C-c M-g n
-@findex magit-blob-next
-This command visits the next blob which modified the current file.
-
-@item @kbd{C-c M-g v} (@code{magit-find-file})
-@kindex C-c M-g v
-@findex magit-find-file
-This command reads a revision and file and visits the respective
-blob.
-
-@item @kbd{C-c M-g V} (@code{magit-blob-visit-file})
-@kindex C-c M-g V
-@findex magit-blob-visit-file
-This command visits the file from the working tree, corresponding
-to the current blob.  When visiting a blob or the version from the
-index, then it goes to the same location in the respective file in
-the working tree.
-
-@item @kbd{C-c M-g g} (@code{magit-status-here})
-@kindex C-c M-g g
-@findex magit-status-here
-This command displays the status of the current repository in a
-buffer, like @code{magit-status} does.  Additionally it tries to go to
-the position in that buffer, which corresponds to the position
-in the current file-visiting buffer (if any).
-
-@item @kbd{C-c M-g G} (@code{magit-display-repository-buffer})
-@kindex C-c M-g G
-@findex magit-display-repository-buffer
-This command reads and displays a Magit buffer belonging to the
-current repository, without refreshing it.
-
-@item @kbd{C-c M-g c} (@code{magit-commit})
-@kindex C-c M-g c
-@findex magit-commit
-This transient prefix command binds the following suffix commands
-along with the appropriate infix arguments and displays them in a
-temporary buffer until a suffix is invoked.  See @ref{Initiating a Commit}.
-
-@item @kbd{C-c M-g e} (@code{magit-edit-line-commit})
-@kindex C-c M-g e
-@findex magit-edit-line-commit
-This command makes the commit editable that added the current line.
-
-With a prefix argument it makes the commit editable that removes the
-line, if any.  The commit is determined using @code{git blame} and made
-editable using @code{git rebase --interactive} if it is reachable from
-@code{HEAD}, or by checking out the commit (or a branch that points at it)
-otherwise.
-@end table
-
-@node Minor Mode for Buffers Visiting Blobs
-@section Minor Mode for Buffers Visiting Blobs
-
-The @code{magit-blob-mode} enables certain Magit features in blob-visiting
-buffers.  Such buffers can be created using @code{magit-find-file} and some
-of the commands mentioned below, which also take care of turning on
-this minor mode.  Currently this mode only establishes a few key
-bindings, but this might be extended.
-
-@table @asis
-@item @kbd{p} (@code{magit-blob-previous})
-@kindex p
-@findex magit-blob-previous
-Visit the previous blob which modified the current file.
-
-@item @kbd{n} (@code{magit-blob-next})
-@kindex n
-@findex magit-blob-next
-Visit the next blob which modified the current file.
-
-@item @kbd{q} (@code{magit-kill-this-buffer})
-@kindex q
-@findex magit-kill-this-buffer
-Kill the current buffer.
-@end table
-
-@node Customizing
-@chapter Customizing
-
-Both Git and Emacs are highly customizable.  Magit is both a Git
-porcelain as well as an Emacs package, so it makes sense to customize
-it using both Git variables as well as Emacs options.  However this
-flexibility doesn't come without problems, including but not limited
-to the following.
-
-@itemize
-@item
-Some Git variables automatically have an effect in Magit without
-requiring any explicit support.  Sometimes that is desirable - in
-other cases, it breaks Magit.
-
-When a certain Git setting breaks Magit but you want to keep using
-that setting on the command line, then that can be accomplished by
-overriding the value for Magit only by appending something like
-@code{("-c" "some.variable=compatible-value")} to
-@code{magit-git-global-arguments}.
-
-@item
-Certain settings like @code{fetch.prune=true} are respected by Magit
-commands (because they simply call the respective Git command) but
-their value is not reflected in the respective transient buffers.
-In this case the @code{--prune} argument in @code{magit-fetch} might be active 
or
-inactive, but that doesn't keep the Git variable from being honored
-by the suffix commands anyway.  So pruning might happen despite the
-@code{--prune} arguments being displayed in a way that seems to indicate
-that no pruning will happen.
-@end itemize
-
-I intend to address these and similar issues in a future release.
-
-@menu
-* Per-Repository Configuration::
-* Essential Settings::
-@end menu
-
-@node Per-Repository Configuration
-@section Per-Repository Configuration
-
-Magit can be configured on a per-repository level using both Git
-variables as well as Emacs options.
-
-To set a Git variable for one repository only, simply set it in
-@code{/path/to/repo/.git/config} instead of @code{$HOME/.gitconfig} or
-@code{/etc/gitconfig}.  See 
-@ifinfo
-@ref{git-config,,,gitman,}.
-@end ifinfo
-@ifhtml
-@html
-the <a href="http://git-scm.com/docs/git-config";>git-config(1)</a> manpage.
-@end html
-@end ifhtml
-@iftex
-the git-config(1) manpage.
-@end iftex
-
-Similarly, Emacs options can be set for one repository only by editing
-@code{/path/to/repo/.dir-locals.el}.  See @ref{Directory Variables,,,emacs,}.
-For example to disable automatic refreshes of file-visiting buffers in
-just one huge repository use this:
-
-@itemize
-@item
-@code{/path/to/huge/repo/.dir-locals.el}
-
-@lisp
-((nil . ((magit-refresh-buffers . nil))))
-@end lisp
-@end itemize
-
-It might only be costly to insert certain information into Magit
-buffers for repositories that are exceptionally large, in which case
-you can disable the respective section inserters just for that
-repository:
-
-@itemize
-@item
-@code{/path/to/tag/invested/repo/.dir-locals.el}
-
-@lisp
-((magit-status-mode
-  . ((eval . (magit-disable-section-inserter 'magit-insert-tags-header)))))
-@end lisp
-@end itemize
-
-@defun magit-disable-section-inserter fn
-This function disables the section inserter FN in the current
-repository.  It is only intended for use in @code{.dir-locals.el} and
-@code{.dir-locals-2.el}.
-@end defun
-
-If you want to apply the same settings to several, but not all,
-repositories then keeping the repository-local config files in sync
-would quickly become annoying.  To avoid that you can create config
-files for certain classes of repositories (e.g., "huge repositories")
-and then include those files in the per-repository config files.
-For example:
-
-@itemize
-@item
-@code{/path/to/huge/repo/.git/config}
-
-@example
-[include]
-        path = /path/to/huge-gitconfig
-@end example
-
-@item
-@code{/path/to/huge-gitconfig}
-
-@example
-[status]
-        showUntrackedFiles = no
-@end example
-
-@item
-@code{$HOME/.emacs.d/init.el}
-
-@lisp
-(dir-locals-set-class-variables 'huge-git-repository
-   '((nil . ((magit-refresh-buffers . nil)))))
-
-(dir-locals-set-directory-class
-   "/path/to/huge/repo/" 'huge-git-repository)
-@end lisp
-@end itemize
-
-@node Essential Settings
-@section Essential Settings
-
-The next three sections list and discuss several variables that many
-users might want to customize, for safety and/or performance reasons.
-
-@menu
-* Safety::
-* Performance::
-* Global Bindings::
-@end menu
-
-@node Safety
-@subsection Safety
-
-This section discusses various variables that you might want to
-change (or @strong{not} change) for safety reasons.
-
-Git keeps @strong{committed} changes around long enough for users to recover
-changes they have accidentally been deleted.  It does not do the same
-for @strong{uncommitted} changes in the working tree and not even the index
-(the staging area).  Because Magit makes it so easy to modify
-uncommitted changes, it also makes it easy to shoot yourself in the
-foot in the process.  For that reason Magit provides three global
-modes that save @strong{tracked} files to work-in-progress references after or
-before certain actions.  See @ref{Wip Modes}.
-
-These modes are not enabled by default because of performance
-concerns.  Instead a lot of potentially destructive commands require
-confirmation every time they are used.  In many cases this can be
-disabled by adding a symbol to @code{magit-no-confirm} (see @ref{Completion 
and Confirmation}).  If you enable the various wip modes then you should
-add @code{safe-with-wip} to this list.
-
-Similarly it isn't necessary to require confirmation before moving a
-file to the system trash - if you trashed a file by mistake then you
-can recover it from there.  Option @code{magit-delete-by-moving-to-trash}
-controls whether the system trash is used, which is the case by default.
-Nevertheless, @code{trash} isn't a member of @code{magit-no-confirm} - you
-might want to change that.
-
-By default buffers visiting files are automatically reverted when the
-visited file changes on disk.  This isn't as risky as it might seem,
-but to make an informed decision you should see @ref{Risk of Reverting 
Automatically}.
-
-@node Performance
-@subsection Performance
-
-After Magit has run @code{git} for side-effects, it also refreshes the
-current Magit buffer and the respective status buffer.  This is
-necessary because otherwise outdated information might be displayed
-without the user noticing.  Magit buffers are updated by recreating
-their content from scratch, which makes updating simpler and less
-error-prone, but also more costly.  Keeping it simple and just
-re-creating everything from scratch is an old design decision and
-departing from that will require major refactoring.
-
-Meanwhile you can tell Magit to only automatically refresh the current
-Magit buffer, but not the status buffer.  If you do that, then the
-status buffer is only refreshed automatically if it is the
-current buffer.
-
-@lisp
-(setq magit-refresh-status-buffer nil)
-@end lisp
-
-You should also check whether any third-party packages have added
-anything to @code{magit-refresh-buffer-hook}, @code{magit-pre-refresh-hook}, 
and
-@code{magit-post-refresh-hook}.  If so, then check whether those additions
-impact performance significantly.
-
-Magit can be told to refresh buffers verbosely using @code{M-x
-magit-toggle-verbose-refresh}.  Enabling this helps figuring out which
-sections are bottlenecks. Each line printed to the @code{*Messages*} buffer
-contains a section name, the number of seconds it took to show this
-section, and from 0 to 2 exclamation marks: the more exclamation marks
-the slower the section is.
-
-Magit also reverts buffers for visited files located inside the
-current repository when the visited file changes on disk.  That is
-implemented on top of @code{auto-revert-mode} from the built-in library
-@code{autorevert}.  To figure out whether that impacts performance, check
-whether performance is significantly worse, when many buffers exist
-and/or when some buffers visit files using TRAMP@.  If so, then this
-should help.
-
-@lisp
-(setq auto-revert-buffer-list-filter
-      'magit-auto-revert-repository-buffer-p)
-@end lisp
-
-For alternative approaches see @ref{Automatic Reverting of File-Visiting 
Buffers}.
-
-If you have enabled any features that are disabled by default, then
-you should check whether they impact performance significantly.  It's
-likely that they were not enabled by default because it is known that
-they reduce performance at least in large repositories.
-
-If performance is only slow inside certain unusually large
-repositories, then you might want to disable certain features on a
-per-repository or per-repository-class basis only.  See
-@ref{Per-Repository Configuration}.  For example it takes a long time to
-determine the next and current tag in repository with exceptional
-numbers of tags.  It would therefore be a good idea to disable
-@code{magit-insert-tags-headers}, as explained at the mentioned node.
-
-@menu
-* Microsoft Windows Performance::
-* MacOS Performance::
-@end menu
-
-@anchor{Log Performance}
-@subsubheading Log Performance
-
-When showing logs, Magit limits the number of commits initially shown
-in the hope that this avoids unnecessary work.  When @code{--graph} is
-used, then this unfortunately does not have the desired effect for
-large histories.  Junio, Git's maintainer, said on the Git mailing
-list (@uref{https://www.spinics.net/lists/git/msg232230.html}): 
"@code{--graph} wants
-to compute the whole history and the max-count only affects the output
-phase after @code{--graph} does its computation".
-
-In other words, it's not that Git is slow at outputting the
-differences, or that Magit is slow at parsing the output - the problem
-is that Git first goes outside and has a smoke.
-
-We actually work around this issue by limiting the number of commits
-not only by using @code{-<N>} but by also using a range.  But unfortunately
-that's not always possible.
-
-When more than a few thousand commits are shown, then the use of
-@code{--graph} can slow things down.
-
-Using @code{--color --graph} is even slower.  Magit uses code that is part of
-Emacs to turn control characters into faces.  That code is pretty slow
-and this is quite noticeable when showing a log with many branches and
-merges.  For that reason @code{--color} is not enabled by default anymore.
-Consider leaving it at that.
-
-@anchor{Diff Performance}
-@subsubheading Diff Performance
-
-If diffs are slow, then consider turning off some optional diff
-features by setting all or some of the following variables to @code{nil}:
-@code{magit-diff-highlight-indentation}, @code{magit-diff-highlight-trailing},
-@code{magit-diff-paint-whitespace}, @code{magit-diff-highlight-hunk-body}, and
-@code{magit-diff-refine-hunk}.
-
-When showing a commit instead of some arbitrary diff, then some
-additional information is displayed.  Calculating this information
-can be quite expensive given certain circumstances.  If looking at
-a commit using @code{magit-revision-mode} takes considerably more time than
-looking at the same commit in @code{magit-diff-mode}, then consider setting
-@code{magit-revision-insert-related-refs} to @code{nil}.
-
-When you are often confronted with diffs that contain deleted files,
-then you might want to enable the @code{--irreversible-delete} argument.  If
-you do that then diffs still show that a file was deleted but without
-also showing the complete deleted content of the file.  This argument
-is not available by default, see @ref{Enabling and Disabling 
Suffixes,,,transient,}.  Once you have done that you should enable it and save 
that
-setting, see @ref{Saving Values,,,transient,}.  You should do this in both
-the diff (@code{d}) and the diff refresh (@code{D}) transient popups.
-
-@anchor{Refs Buffer Performance}
-@subsubheading Refs Buffer Performance
-
-When refreshing the "references buffer" is slow, then that's usually
-because several hundred refs are being displayed.  The best way to
-address that is to display fewer refs, obviously.
-
-If you are not, or only mildly, interested in seeing the list of tags,
-then start by not displaying them:
-
-@lisp
-(remove-hook 'magit-refs-sections-hook 'magit-insert-tags)
-@end lisp
-
-Then you should also make sure that the listed remote branches
-actually all exist.  You can do so by pruning branches which no longer
-exist using @code{f-pa}.
-
-@anchor{Committing Performance}
-@subsubheading Committing Performance
-
-When you initiate a commit, then Magit by default automatically shows
-a diff of the changes you are about to commit.  For large commits this
-can take a long time, which is especially distracting when you are
-committing large amounts of generated data which you don't actually
-intend to inspect before committing.  This behavior can be turned off
-using:
-
-@lisp
-(remove-hook 'server-switch-hook 'magit-commit-diff)
-(remove-hook 'with-editor-filter-visit-hook 'magit-commit-diff)
-@end lisp
-
-Then you can type @code{C-c C-d} to show the diff when you actually want to
-see it, but only then.  Alternatively you can leave the hook alone and
-just type @code{C-g} in those cases when it takes too long to generate the
-diff.  If you do that, then you will end up with a broken diff buffer,
-but doing it this way has the advantage that you usually get to see
-the diff, which is useful because it increases the odds that you spot
-potential issues.
-
-@node Microsoft Windows Performance
-@unnumberedsubsubsec Microsoft Windows Performance
-
-In order to update the status buffer, @code{git} has to be run a few dozen
-times.  That is problematic on Microsoft Windows, because that
-operating system is exceptionally slow at starting processes.  Sadly
-this is an issue that can only be fixed by Microsoft itself, and they
-don't appear to be particularly interested in doing so.
-
-Beside the subprocess issue, there are also other Windows-specific
-performance issues. Some of these have workarounds.  The
-maintainers of "Git for Windows" try to improve performance on Windows.
-Always use the latest release in order to benefit from the latest
-performance tweaks.  Magit too tries to work around some
-Windows-specific issues.
-
-According to some sources, setting the following Git variables can also
-help.
-
-@example
-git config --global core.preloadindex true   # default since v2.1
-git config --global core.fscache true        # default since v2.8
-git config --global gc.auto 256
-@end example
-
-You should also check whether an anti-virus program is affecting
-performance.
-
-@node MacOS Performance
-@unnumberedsubsubsec MacOS Performance
-
-Before Emacs 26.1 child processes were created using @code{fork} on macOS@.
-That needlessly copied GUI resources, which is expensive.  The result
-was that forking took about 30 times as long on Darwin than on Linux,
-and because Magit starts many @code{git} processes that made quite a
-difference.
-
-So make sure that you are using at least Emacs 26.1, in which case the
-faster @code{vfork} will be used.  (The creation of child processes still
-takes about twice as long on Darwin compared to Linux.)  See 
@footnote{@uref{https://lists.gnu.org/archive/html/bug-gnu-emacs/2017-04/msg00201.html}}
-for more information.
-
-Additionally, @code{git} installed from a package manager like @code{brew} or 
@code{nix}
-seems to be slower than the native executable. Profile the @code{git}
-executable you're running against the one at @code{/usr/bin/git}, and if
-you notice a notable difference try using the latter as
-@code{magit-git-executable}.
-
-@node Global Bindings
-@subsection Global Bindings
-
-@defopt magit-define-global-key-bindings
-This option controls which set of Magit key bindings, if any, may
-be added to the global keymap, even before Magit is first used in
-the current Emacs session.
-
-@itemize
-@item
-If the value is @code{nil}, no bindings are added.
-
-@item
-If @code{default}, maybe add:
-
-@multitable {aaaaaaaaa} {aaaaaaaaaaaaaaaaaaaaa}
-@item @code{C-x g}
-@tab @code{magit-status}
-@item @code{C-x M-g}
-@tab @code{magit-dispatch}
-@item @code{C-c M-g}
-@tab @code{magit-file-dispatch}
-@end multitable
-
-@item
-If @code{recommended}, maybe add:
-
-@multitable {aaaaaaa} {aaaaaaaaaaaaaaaaaaaaa}
-@item @code{C-x g}
-@tab @code{magit-status}
-@item @code{C-c g}
-@tab @code{magit-dispatch}
-@item @code{C-c f}
-@tab @code{magit-file-dispatch}
-@end multitable
-
-These bindings are strongly recommended, but we cannot use
-them by default, because the @code{C-c <LETTER>} namespace is
-strictly reserved for bindings added by the user (see
-@ref{Key Binding Conventions,,,elisp,}).
-@end itemize
-
-The bindings in the chosen set may be added when
-@code{after-init-hook} is run.  Each binding is added if, and only
-if, at that time no other key is bound to the same command,
-and no other command is bound to the same key.  In other words
-we try to avoid adding bindings that are unnecessary, as well
-as bindings that conflict with other bindings.
-
-Adding these bindings is delayed until @code{after-init-hook} is
-run to allow users to set the variable anywhere in their init
-file (without having to make sure to do so before @code{magit} is
-loaded or autoloaded) and to increase the likelihood that all
-the potentially conflicting user bindings have already been
-added.
-
-To set this variable use either @code{setq} or the Custom interface.
-Do not use the function @code{customize-set-variable} because doing
-that would cause Magit to be loaded immediately, when that form
-is evaluated (this differs from @code{custom-set-variables}, which
-doesn't load the libraries that define the customized variables).
-
-Setting this variable has no effect if @code{after-init-hook} has
-already been run.
-@end defopt
-
-@node Plumbing
-@chapter Plumbing
-
-The following sections describe how to use several of Magit's core
-abstractions to extend Magit itself or implement a separate extension.
-
-A few of the low-level features used by Magit have been factored out
-into separate libraries/packages, so that they can be used by other
-packages, without having to depend on Magit.  See @ref{Top,,,with-editor,} for
-information about @code{with-editor}.  @code{transient} doesn't have a manual 
yet.
-
-If you are trying to find an unused key that you can bind to a
-command provided by your own Magit extension, then checkout
-@uref{https://github.com/magit/magit/wiki/Plugin-Dispatch-Key-Registry}.
-
-@menu
-* Calling Git::
-* Section Plumbing::
-* Refreshing Buffers::
-* Conventions::
-@end menu
-
-@node Calling Git
-@section Calling Git
-
-Magit provides many specialized functions for calling Git.  All of
-these functions are defined in either @code{magit-git.el} or 
@code{magit-process.el}
-and have one of the prefixes @code{magit-run-}, @code{magit-call-}, 
@code{magit-start-},
-or @code{magit-git-} (which is also used for other things).
-
-All of these functions accept an indefinite number of arguments, which
-are strings that specify command line arguments for Git (or in some
-cases an arbitrary executable).  These arguments are flattened before
-being passed on to the executable; so instead of strings they can also
-be lists of strings and arguments that are @code{nil} are silently dropped.
-Some of these functions also require a single mandatory argument
-before these command line arguments.
-
-Roughly speaking, these functions run Git either to get some value or
-for side-effects.  The functions that return a value are useful to
-collect the information necessary to populate a Magit buffer, while
-the others are used to implement Magit commands.
-
-The functions in the value-only group always run synchronously, and
-they never trigger a refresh.  The function in the side-effect group
-can be further divided into subgroups depending on whether they run
-Git synchronously or asynchronously, and depending on whether they
-trigger a refresh when the executable has finished.
-
-@menu
-* Getting a Value from Git::
-* Calling Git for Effect::
-@end menu
-
-@node Getting a Value from Git
-@subsection Getting a Value from Git
-
-These functions run Git in order to get a value, an exit
-status, or output.  Of course you could also use them to run Git
-commands that have side-effects, but that should be avoided.
-
-@defun magit-git-exit-code &rest args
-Executes git with ARGS and returns its exit code.
-@end defun
-
-@defun magit-git-success &rest args
-Executes git with ARGS and returns @code{t} if the exit code is @code{0}, 
@code{nil}
-otherwise.
-@end defun
-
-@defun magit-git-failure &rest args
-Executes git with ARGS and returns @code{t} if the exit code is @code{1}, 
@code{nil}
-otherwise.
-@end defun
-
-@defun magit-git-true &rest args
-Executes git with ARGS and returns @code{t} if the first line printed by
-git is the string "true", @code{nil} otherwise.
-@end defun
-
-@defun magit-git-false &rest args
-Executes git with ARGS and returns @code{t} if the first line printed by
-git is the string "false", @code{nil} otherwise.
-@end defun
-
-@defun magit-git-insert &rest args
-Executes git with ARGS and inserts its output at point.
-@end defun
-
-@defun magit-git-string &rest args
-Executes git with ARGS and returns the first line of its output.  If
-there is no output or if it begins with a newline character, then
-this returns @code{nil}.
-@end defun
-
-@defun magit-git-lines &rest args
-Executes git with ARGS and returns its output as a list of lines.
-Empty lines anywhere in the output are omitted.
-@end defun
-
-@defun magit-git-items &rest args
-Executes git with ARGS and returns its null-separated output as a
-list.  Empty items anywhere in the output are omitted.
-
-If the value of option @code{magit-git-debug} is non-nil and git exits with
-a non-zero exit status, then warn about that in the echo area and
-add a section containing git's standard error in the current
-repository's process buffer.
-@end defun
-
-@defun magit-process-git destination &rest args
-Calls Git synchronously in a separate process, returning its exit
-code.  DESTINATION specifies how to handle the output, like for
-@code{call-process}, except that file handlers are supported.  Enables
-Cygwin's "noglob" option during the call and ensures unix eol
-conversion.
-@end defun
-
-@defun magit-process-file process &optional infile buffer display &rest args
-Processes files synchronously in a separate process.  Identical to
-@code{process-file} but temporarily enables Cygwin's "noglob" option during
-the call and ensures unix eol conversion.
-@end defun
-
-If an error occurs when using one of the above functions, then that
-is usually due to a bug, i.e., using an argument which is not
-actually supported.  Such errors are usually not reported, but when
-they occur we need to be able to debug them.
-
-@defopt magit-git-debug
-Whether to report errors that occur when using @code{magit-git-insert},
-@code{magit-git-string}, @code{magit-git-lines}, or @code{magit-git-items}.  
This does
-not actually raise an error.  Instead a message is shown in the echo
-area, and git's standard error is insert into a new section in the
-current repository's process buffer.
-@end defopt
-
-@defun magit-git-str &rest args
-This is a variant of @code{magit-git-string} that ignores the option
-@code{magit-git-debug}.  It is mainly intended to be used while handling
-errors in functions that do respect that option.  Using such a
-function while handing an error could cause yet another error and
-therefore lead to an infinite recursion.  You probably won't ever
-need to use this function.
-@end defun
-
-@node Calling Git for Effect
-@subsection Calling Git for Effect
-
-These functions are used to run git to produce some effect.  Most
-Magit commands that actually run git do so by using such a function.
-
-Because we do not need to consume git's output when using these
-functions, their output is instead logged into a per-repository
-buffer, which can be shown using @code{$} from a Magit buffer or @code{M-x
-magit-process} elsewhere.
-
-These functions can have an effect in two distinct ways.  Firstly,
-running git may change something, i.e., create or push a new commit.
-Secondly, that change may require that Magit buffers are refreshed to
-reflect the changed state of the repository.  But refreshing isn't
-always desirable, so only some of these functions do perform such a
-refresh after git has returned.
-
-Sometimes it is useful to run git asynchronously.  For example, when
-the user has just initiated a push, then there is no reason to make
-her wait until that has completed.  In other cases it makes sense to
-wait for git to complete before letting the user do something else.
-For example after staging a change it is useful to wait until after
-the refresh because that also automatically moves to the next change.
-
-@defun magit-call-git &rest args
-Calls git synchronously with ARGS@.
-@end defun
-
-@defun magit-call-process program &rest args
-Calls PROGRAM synchronously with ARGS@.
-@end defun
-
-@defun magit-run-git &rest args
-Calls git synchronously with ARGS and then refreshes.
-@end defun
-
-@defun magit-run-git-with-input &rest args
-Calls git synchronously with ARGS and sends it the content of the
-current buffer on standard input.
-
-If the current buffer's @code{default-directory} is on a remote
-filesystem, this function actually runs git asynchronously.  But
-then it waits for the process to return, so the function itself is
-synchronous.
-@end defun
-
-@defun magit-git &rest args
-Calls git synchronously with ARGS for side-effects only.  This
-function does not refresh the buffer.
-@end defun
-
-@defun magit-git-wash washer &rest args
-Execute Git with ARGS, inserting washed output at point.  Actually
-first insert the raw output at point.  If there is no output call
-@code{magit-cancel-section}.  Otherwise temporarily narrow the buffer to
-the inserted text, move to its beginning, and then call function
-WASHER with ARGS as its sole argument.
-@end defun
-
-And now for the asynchronous variants.
-
-@defun magit-run-git-async &rest args
-Start Git, prepare for refresh, and return the process object.
-ARGS is flattened and then used as arguments to Git.
-
-Display the command line arguments in the echo area.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer and
-still alive), as well as the respective Magit status buffer.
-Unmodified buffers visiting files that are tracked in the current
-repository are reverted if @code{magit-revert-buffers} is non-nil.
-@end defun
-
-@defun magit-run-git-with-editor &rest args
-Export GIT@math{_EDITOR} and start Git.  Also prepare for refresh and
-return the process object.  ARGS is flattened and then used as
-arguments to Git.
-
-Display the command line arguments in the echo area.
-
-After Git returns some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer and
-still alive), as well as the respective Magit status buffer.
-@end defun
-
-@defun magit-start-git input &rest args
-Start Git, prepare for refresh, and return the process object.
-
-If INPUT is non-nil, it has to be a buffer or the name of an
-existing buffer.  The buffer content becomes the processes
-standard input.
-
-Option @code{magit-git-executable} specifies the Git executable and option
-@code{magit-git-global-arguments} specifies constant arguments.  The
-remaining arguments ARGS specify arguments to Git.  They are
-flattened before use.
-
-After Git returns, some buffers are refreshed: the buffer that was
-current when this function was called (if it is a Magit buffer and
-still alive), as well as the respective Magit status buffer.
-Unmodified buffers visiting files that are tracked in the current
-repository are reverted if @code{magit-revert-buffers} is non-nil.
-@end defun
-
-@defun magit-start-process &rest args
-Start PROGRAM, prepare for refresh, and return the process object.
-
-If optional argument INPUT is non-nil, it has to be a buffer or
-the name of an existing buffer.  The buffer content becomes the
-processes standard input.
-
-The process is started using @code{start-file-process} and then setup to
-use the sentinel @code{magit-process-sentinel} and the filter
-@code{magit-process-filter}.  Information required by these functions is
-stored in the process object.  When this function returns the
-process has not started to run yet so it is possible to override the
-sentinel and filter.
-
-After the process returns, @code{magit-process-sentinel} refreshes the
-buffer that was current when @code{magit-start-process} was called (if it
-is a Magit buffer and still alive), as well as the respective Magit
-status buffer.  Unmodified buffers visiting files that are tracked
-in the current repository are reverted if @code{magit-revert-buffers} is
-non-nil.
-@end defun
-
-@defvar magit-this-process
-The child process which is about to start.  This can be used to
-change the filter and sentinel.
-@end defvar
-
-@defvar magit-process-raise-error
-When this is non-nil, then @code{magit-process-sentinel} raises an error if
-git exits with a non-zero exit status.  For debugging purposes.
-@end defvar
-
-@node Section Plumbing
-@section Section Plumbing
-
-@menu
-* Creating Sections::
-* Section Selection::
-* Matching Sections::
-@end menu
-
-@node Creating Sections
-@subsection Creating Sections
-
-@defmac magit-insert-section &rest args
-Insert a section at point.
-
-TYPE is the section type, a symbol.  Many commands that act on the
-current section behave differently depending on that type.  Also if
-a variable @code{magit-TYPE-section-map} exists, then use that as the
-text-property @code{keymap} of all text belonging to the section (but this
-may be overwritten in subsections).  TYPE can also have the form
-@code{(eval FORM)} in which case FORM is evaluated at runtime.
-
-Optional VALUE is the value of the section, usually a string that is
-required when acting on the section.
-
-When optional HIDE is non-nil collapse the section body by default,
-i.e., when first creating the section, but not when refreshing the
-buffer.  Otherwise, expand it by default.  This can be overwritten using
-@code{magit-section-set-visibility-hook}.  When a section is recreated
-during a refresh, then the visibility of predecessor is inherited
-and HIDE is ignored (but the hook is still honored).
-
-BODY is any number of forms that actually insert the section's
-heading and body.  Optional NAME, if specified, has to be a symbol,
-which is then bound to the struct of the section being inserted.
-
-Before BODY is evaluated the @code{start} of the section object is set to
-the value of @code{point} and after BODY was evaluated its @code{end} is set to
-the new value of @code{point}; BODY is responsible for moving @code{point}
-forward.
-
-If it turns out inside BODY that the section is empty, then
-@code{magit-cancel-section} can be used to abort and remove all traces of
-the partially inserted section.  This can happen when creating a
-section by washing Git's output and Git didn't actually output
-anything this time around.
-@end defmac
-
-@defun magit-insert-heading &rest args
-Insert the heading for the section currently being inserted.
-
-This function should only be used inside @code{magit-insert-section}.
-
-When called without any arguments, then just set the @code{content} slot of
-the object representing the section being inserted to a marker at
-@code{point}.  The section should only contain a single line when this
-function is used like this.
-
-When called with arguments ARGS, which have to be strings, then
-insert those strings at point.  The section should not contain any
-text before this happens and afterwards it should again only contain
-a single line.  If the @code{face} property is set anywhere inside any of
-these strings, then insert all of them unchanged.  Otherwise use the
-@code{magit-section-heading} face for all inserted text.
-
-The @code{content} property of the section struct is the end of the heading
-(which lasts from @code{start} to @code{content}) and the beginning of the body
-(which lasts from @code{content} to @code{end}).  If the value of 
@code{content} is nil,
-then the section has no heading and its body cannot be collapsed.
-If a section does have a heading then its height must be exactly one
-line, including a trailing newline character.  This isn't enforced;
-you are responsible for getting it right.  The only exception is
-that this function does insert a newline character if necessary.
-@end defun
-
-@defun magit-cancel-section
-Cancel the section currently being inserted.  This exits the
-innermost call to @code{magit-insert-section} and removes all traces of
-what has already happened inside that call.
-@end defun
-
-@defun magit-define-section-jumper sym title &optional value
-Define an interactive function to go to section SYM@.  TITLE is the
-displayed title of the section.
-@end defun
-
-@node Section Selection
-@subsection Section Selection
-
-@defun magit-current-section
-Return the section at point.
-@end defun
-
-@defun magit-region-sections &optional condition multiple
-Return a list of the selected sections.
-
-When the region is active and constitutes a valid section
-selection, then return a list of all selected sections.  This is
-the case when the region begins in the heading of a section and
-ends in the heading of the same section or in that of a sibling
-section.  If optional MULTIPLE is non-nil, then the region cannot
-begin and end in the same section.
-
-When the selection is not valid, then return nil.  In this case,
-most commands that can act on the selected sections will instead
-act on the section at point.
-
-When the region looks like it would in any other buffer then
-the selection is invalid.  When the selection is valid then the
-region uses the @code{magit-section-highlight} face.  This does not
-apply to diffs where things get a bit more complicated, but even
-here if the region looks like it usually does, then that's not
-a valid selection as far as this function is concerned.
-
-If optional CONDITION is non-nil, then the selection not only
-has to be valid; all selected sections additionally have to match
-CONDITION, or nil is returned.  See @code{magit-section-match} for the
-forms CONDITION can take.
-@end defun
-
-@defun magit-region-values &optional condition multiple
-Return a list of the values of the selected sections.
-
-Return the values that themselves would be returned by
-@code{magit-region-sections} (which see).
-@end defun
-
-@node Matching Sections
-@subsection Matching Sections
-
-@table @asis
-@item @kbd{M-x magit-describe-section-briefly}
-@findex magit-describe-section-briefly
-Show information about the section at point.  This command is
-intended for debugging purposes.
-@end table
-
-@defun magit-section-ident section
-Return an unique identifier for SECTION@.  The return value has the
-form @code{((TYPE . VALUE)...)}.
-@end defun
-
-@defun magit-get-section ident &optional root
-Return the section identified by IDENT@.  IDENT has to be a list as
-returned by @code{magit-section-ident}.
-@end defun
-
-@defun magit-section-match condition &optional section
-Return @code{t} if SECTION matches CONDITION@.
-SECTION defaults to the section at point.  If SECTION is not
-specified and there also is no section at point, then return
-@code{nil}.
-
-CONDITION can take the following forms:
-@itemize
-@item
-@code{(CONDITION...)}
-
-matches if any of the CONDITIONs matches.
-
-@item
-@code{[CLASS...]}
-
-matches if the section's class is the same
-as the first CLASS or a subclass of that;
-the section's parent class matches the
-second CLASS; and so on.
-
-@item
-@code{[* CLASS...]}
-
-matches sections that match @code{[CLASS...]} and
-also recursively all their child sections.
-
-@item
-@code{CLASS}
-
-matches if the section's class is the same
-as CLASS or a subclass of that; regardless
-of the classes of the parent sections.
-@end itemize
-
-Each CLASS should be a class symbol, identifying a class that
-derives from @code{magit-section}.  For backward compatibility CLASS
-can also be a "type symbol".  A section matches such a symbol
-if the value of its @code{type} slot is @code{eq}.  If a type symbol has
-an entry in @code{magit--section-type-alist}, then a section also
-matches that type if its class is a subclass of the class that
-corresponds to the type as per that alist.
-
-Note that it is not necessary to specify the complete section
-lineage as printed by @code{magit-describe-section-briefly}, unless
-of course you want to be that precise.
-@end defun
-
-@defun magit-section-value-if condition &optional section
-If the section at point matches CONDITION, then return its value.
-
-If optional SECTION is non-nil then test whether that matches
-instead.  If there is no section at point and SECTION is nil,
-then return nil.  If the section does not match, then return
-nil.
-
-See @code{magit-section-match} for the forms CONDITION can take.
-@end defun
-
-@defun magit-section-case &rest clauses
-Choose among clauses on the type of the section at point.
-
-Each clause looks like (CONDITION BODY@dots{}).  The type of the
-section is compared against each CONDITION; the BODY forms of the
-first match are evaluated sequentially and the value of the last
-form is returned.  Inside BODY the symbol @code{it} is bound to the
-section at point.  If no clause succeeds or if there is no
-section at point return nil.
-
-See @code{magit-section-match} for the forms CONDITION can take.
-Additionally a CONDITION of t is allowed in the final clause and
-matches if no other CONDITION match, even if there is no section at
-point.
-@end defun
-
-@defvar magit-root-section
-The root section in the current buffer.  All other sections are
-descendants of this section.  The value of this variable is set by
-@code{magit-insert-section} and you should never modify it.
-@end defvar
-
-For diff related sections a few additional tools exist.
-
-@defun magit-diff-type &optional section
-Return the diff type of SECTION@.
-
-The returned type is one of the symbols @code{staged}, @code{unstaged}, 
@code{committed},
-or @code{undefined}.  This type serves a similar purpose as the general
-type common to all sections (which is stored in the @code{type} slot of the
-corresponding @code{magit-section} struct) but takes additional information
-into account.  When the SECTION isn't related to diffs and the
-buffer containing it also isn't a diff-only buffer, then return nil.
-
-Currently the type can also be one of @code{tracked} and @code{untracked}, but
-these values are not handled explicitly in every place they should
-be.  A possible fix could be to just return nil here.
-
-The section has to be a @code{diff} or @code{hunk} section, or a section whose
-children are of type @code{diff}.  If optional SECTION is nil, return the
-diff type for the current section.  In buffers whose major mode is
-@code{magit-diff-mode} SECTION is ignored and the type is determined using
-other means.  In @code{magit-revision-mode} buffers the type is always
-@code{committed}.
-@end defun
-
-@defun magit-diff-scope &optional section strict
-Return the diff scope of SECTION or the selected section(s).
-
-A diff's "scope" describes what part of a diff is selected, it is a
-symbol, one of @code{region}, @code{hunk}, @code{hunks}, @code{file}, 
@code{files}, or @code{list}.  Do not
-confuse this with the diff "type", as returned by @code{magit-diff-type}.
-
-If optional SECTION is non-nil, then return the scope of that,
-ignoring the sections selected by the region.  Otherwise return the
-scope of the current section, or if the region is active and selects
-a valid group of diff related sections, the type of these sections,
-i.e., @code{hunks} or @code{files}.  If SECTION (or if the current section that
-is nil) is a @code{hunk} section and the region starts and ends inside
-the body of a that section, then the type is @code{region}.
-
-If optional STRICT is non-nil then return nil if the diff type of
-the section at point is @code{untracked} or the section at point is not
-actually a @code{diff} but a @code{diffstat} section.
-@end defun
-
-@node Refreshing Buffers
-@section Refreshing Buffers
-
-All commands that create a new Magit buffer or change what is being
-displayed in an existing buffer do so by calling @code{magit-mode-setup}.
-Among other things, that function sets the buffer local values of
-@code{default-directory} (to the top-level of the repository),
-@code{magit-refresh-function}, and @code{magit-refresh-args}.
-
-Buffers are refreshed by calling the function that is the local value
-of @code{magit-refresh-function} (a function named 
@code{magit-*-refresh-buffer},
-where @code{*} may be something like @code{diff}) with the value of
-@code{magit-refresh-args} as arguments.
-
-@defmac magit-mode-setup buffer switch-func mode refresh-func &optional 
refresh-args
-This function displays and selects BUFFER, turns on MODE, and
-refreshes a first time.
-
-This function displays and optionally selects BUFFER by calling
-@code{magit-mode-display-buffer} with BUFFER, MODE and SWITCH-FUNC as
-arguments.  Then it sets the local value of @code{magit-refresh-function}
-to REFRESH-FUNC and that of @code{magit-refresh-args} to REFRESH-ARGS@.
-Finally it creates the buffer content by calling REFRESH-FUNC with
-REFRESH-ARGS as arguments.
-
-All arguments are evaluated before switching to BUFFER@.
-@end defmac
-
-@defun magit-mode-display-buffer buffer mode &optional switch-function
-This function display BUFFER in some window and select it.  BUFFER
-may be a buffer or a string, the name of a buffer.  The buffer is
-returned.
-
-Unless BUFFER is already displayed in the selected frame, store the
-previous window configuration as a buffer local value, so that it
-can later be restored by @code{magit-mode-bury-buffer}.
-
-The buffer is displayed and selected using SWITCH-FUNCTION@.  If that
-is @code{nil} then @code{pop-to-buffer} is used if the current buffer's major 
mode
-derives from @code{magit-mode}.  Otherwise @code{switch-to-buffer} is used.
-@end defun
-
-@defvar magit-refresh-function
-The value of this buffer-local variable is the function used to
-refresh the current buffer.  It is called with @code{magit-refresh-args} as
-arguments.
-@end defvar
-
-@defvar magit-refresh-args
-The list of arguments used by @code{magit-refresh-function} to refresh the
-current buffer.  @code{magit-refresh-function} is called with these
-arguments.
-
-The value is usually set using @code{magit-mode-setup}, but in some cases
-it's also useful to provide commands that can change the value.  For
-example, the @code{magit-diff-refresh} transient can be used to change any
-of the arguments used to display the diff, without having to specify
-again which differences should be shown, but @code{magit-diff-more-context},
-@code{magit-diff-less-context} and @code{magit-diff-default-context} change 
just
-the @code{-U<N>} argument.  In both case this is done by changing the value
-of this variable and then calling this @code{magit-refresh-function}.
-@end defvar
-
-@node Conventions
-@section Conventions
-
-Also see @ref{Completion and Confirmation}.
-
-@menu
-* Theming Faces::
-@end menu
-
-@node Theming Faces
-@subsection Theming Faces
-
-The default theme uses blue for local branches, green for remote
-branches, and goldenrod (brownish yellow) for tags.  When creating a
-new theme, you should probably follow that example.  If your theme
-already uses other colors, then stick to that.
-
-In older releases these reference faces used to have a background
-color and a box around them.  The basic default faces no longer do so,
-to make Magit buffers much less noisy, and you should follow that
-example at least with regards to boxes.  (Boxes were used in the past
-to work around a conflict between the highlighting overlay and text
-property backgrounds.  That's no longer necessary because highlighting no
-longer causes other background colors to disappear.)  Alternatively
-you can keep the background color and/or box, but then have to take
-special care to adjust @code{magit-branch-current} accordingly.  By default
-it looks mostly like @code{magit-branch-local}, but with a box (by default
-the former is the only face that uses a box, exactly so that it sticks
-out).  If the former also uses a box, then you have to make sure that
-it differs in some other way from the latter.
-
-The most difficult faces to theme are those related to diffs,
-headings, highlighting, and the region.  There are faces that fall
-into all four groups - expect to spend some time getting this right.
-
-The @code{region} face in the default theme, in both the light and dark
-variants, as well as in many other themes, distributed with Emacs or
-by third-parties, is very ugly.  It is common to use a background
-color that really sticks out, which is ugly but if that were the only
-problem then it would be acceptable.  Unfortunately many themes also
-set the foreground color, which ensures that all text within the
-region is readable.  Without doing that there might be cases where
-some foreground color is too close to the region background color to
-still be readable.  But it also means that text within the region
-loses all syntax highlighting.
-
-I consider the work that went into getting the @code{region} face right to be
-a good indicator for the general quality of a theme.  My
-recommendation for the @code{region} face is this: use a background color
-slightly different from the background color of the @code{default} face, and
-do not set the foreground color at all.  So for a light theme you
-might use a light (possibly tinted) gray as the background color of
-@code{default} and a somewhat darker gray for the background of @code{region}.
-That should usually be enough to not collide with the foreground color
-of any other face.  But if some other faces also set a light gray as
-background color, then you should also make sure it doesn't collide
-with those (in some cases it might be acceptable though).
-
-Magit only uses the @code{region} face when the region is "invalid" by its
-own definition.  In a Magit buffer the region is used to either select
-multiple sibling sections, so that commands which support it act on
-all of these sections instead of just the current section, or to
-select lines within a single hunk section.  In all other cases, the
-section is considered invalid and Magit won't act on it.  But such
-invalid sections happen, either because the user has not moved point
-enough yet to make it valid or because she wants to use a non-magit
-command to act on the region, e.g., @code{kill-region}.
-
-So using the regular @code{region} face for invalid sections is a feature.  It
-tells the user that Magit won't be able to act on it.  It's acceptable
-if that face looks a bit odd and even (but less so) if it collides
-with the background colors of section headings and other things that
-have a background color.
-
-Magit highlights the current section.  If a section has subsections,
-then all of them are highlighted.  This is done using faces that have
-"highlight" in their names.  For most sections, @code{magit-section-highlight}
-is used for both the body and the heading.  Like the @code{region} face, it
-should only set the background color to something similar to that of
-@code{default}.  The highlight background color must be different from both
-the @code{region} background color and the @code{default} background color.
-
-For diff related sections Magit uses various faces to
-highlight different parts of the selected section(s).  Note that hunk
-headings, unlike all other section headings, by default have a
-background color, because it is useful to have very visible separators
-between hunks.  That face @code{magit-diff-hunk-heading}, should be different
-from both @code{magit-diff-hunk-heading-highlight} and
-@code{magit-section-highlight}, as well as from @code{magit-diff-context} and
-@code{magit-diff-context-highlight}.  By default we do that by changing the
-foreground color.  Changing the background color would lead to
-complications, and there are already enough we cannot get around.
-(Also note that it is generally a good idea for section headings to
-always be bold, but only for sections that have subsections).
-
-When there is a valid region selecting diff-related sibling sections,
-i.e., multiple files or hunks, then the bodies of all these sections
-use the respective highlight faces, but additionally the headings
-instead use one of the faces @code{magit-diff-file-heading-selection} or
-@code{magit-diff-hunk-heading-selection}.  These faces have to be different
-from the regular highlight variants to provide explicit visual
-indication that the region is active.
-
-When theming diff related faces, start by setting the option
-@code{magit-diff-refine-hunk} to @code{all}.  You might personally prefer to 
only
-refine the current hunk or not use hunk refinement at all, but some of
-the users of your theme want all hunks to be refined, so you have to
-cater to that.
-
-(Also turn on @code{magit-diff-highlight-indentation},
-@code{magit-diff-highlight-trailing}, and @code{magit-diff-paint-whitespace}; 
and
-insert some whitespace errors into the code you use for testing.)
-
-For added lines you have to adjust three faces:
-@code{magit-diff-added}, @code{magit-diff-added-highlight}, and
-@code{diff-refined-added}.  Make sure that the latter works well with both
-of the former, as well as @code{smerge-other} and @code{diff-added}.  Then do 
the
-same for the removed lines, context lines, lines added by us, and
-lines added by them.  Also make sure the respective added, removed,
-and context faces use approximately the same saturation for both the
-highlighted and unhighlighted variants.  Also make sure the file and
-diff headings work nicely with context lines (e.g., make them look
-different).  Line faces should set both the foreground and the
-background color.  For example, for added lines use two different
-greens.
-
-It's best if the foreground color of both the highlighted and the
-unhighlighted variants are the same, so you will need to have to find
-a color that works well on the highlight and unhighlighted background,
-the refine background, and the highlight context background.  When
-there is an hunk internal region, then the added- and removed-lines
-background color is used only within that region.  Outside the region
-the highlighted context background color is used.  This makes it
-easier to see what is being staged.  With an hunk internal region the
-hunk heading is shown using @code{magit-diff-hunk-heading-selection}, and so
-are the thin lines that are added around the lines that fall within
-the region.  The background color of that has to be distinct enough
-from the various other involved background colors.
-
-Nobody said this would be easy.  If your theme restricts itself to a
-certain set of colors, then you should make an exception here.
-Otherwise it would be impossible to make the diffs look good in each
-and every variation.  Actually you might want to just stick to the
-default definitions for these faces.  You have been warned.  Also
-please note that if you do not get this right, this will in some cases
-look to users like bugs in Magit - so please do it right or not at
-all.
-
-@node FAQ
-@appendix FAQ
-
-The next two nodes lists frequently asked questions.  For a list of
-frequently @strong{and recently} asked questions, i.e., questions that haven't
-made it into the manual yet, see
-@uref{https://github.com/magit/magit/wiki/FAQ}.
-
-Please also see @ref{Debugging Tools}.
-
-@menu
-* FAQ - How to @dots{}?::
-* FAQ - Issues and Errors::
-@end menu
-
-@node FAQ - How to @dots{}?
-@appendixsec FAQ - How to @dots{}?
-
-@menu
-* How to pronounce Magit?::
-* How to show git's output?::
-* How to install the gitman info manual?::
-* How to show diffs for gpg-encrypted files?::
-* How does branching and pushing work?::
-* Should I disable VC@?::
-@end menu
-
-@node How to pronounce Magit?
-@appendixsubsec How to pronounce Magit?
-
-Either @code{mu[m's] git} or @code{magi@{c => t@}} is fine.
-
-The slogan is "It's Magit! The magical Git client", so it makes sense
-to pronounce Magit like magic, while taking into account that C and T
-do not sound the same.
-
-The German "Magie" is not pronounced the same as the English "magic",
-so if you speak German then you can use the above rationale to justify
-using the former pronunciation; @code{Mag@{ie => it@}}.
-
-You can also choose to use the former pronunciation just because you
-like it better.
-
-Also see @uref{https://magit.vc/assets/videos/magic.mp4}.
-Also see @uref{https://emacs.stackexchange.com/questions/13696}.
-
-@node How to show git's output?
-@appendixsubsec How to show git's output?
-
-To show the output of recently run git commands, press @code{$} (or, if that
-isn't available, @code{M-x magit-process-buffer}).  This will show a buffer
-containing a section per git invocation; as always press @code{TAB} to expand
-or collapse them.
-
-By default, git's output is only inserted into the process buffer if it
-is run for side-effects.  When the output is consumed in some way,
-also inserting it into the process buffer would be too expensive.  For
-debugging purposes, it's possible to do so anyway by setting
-@code{magit-git-debug} to @code{t}.
-
-@node How to install the gitman info manual?
-@appendixsubsec How to install the gitman info manual?
-
-Git's manpages can be exported as an info manual called @code{gitman}.
-Magit's own info manual links to nodes in that manual instead of the
-actual manpages because Info doesn't support linking to manpages.
-
-Unfortunately some distributions do not install the @code{gitman} manual by
-default and you will have to install a separate documentation package
-to get it.
-
-Magit patches Info adding the ability to visit links to the @code{gitman}
-Info manual by instead viewing the respective manpage.  If you prefer
-that approach, then set the value of @code{magit-view-git-manual-method} to
-one of the supported packages @code{man} or @code{woman}, e.g.:
-
-@lisp
-(setq magit-view-git-manual-method 'man)
-@end lisp
-
-@node How to show diffs for gpg-encrypted files?
-@appendixsubsec How to show diffs for gpg-encrypted files?
-
-Git supports showing diffs for encrypted files, but has to be told to
-do so.  Since Magit just uses Git to get the diffs, configuring Git
-also affects the diffs displayed inside Magit.
-
-@example
-git config --global diff.gpg.textconv "gpg --no-tty --decrypt"
-echo "*.gpg filter=gpg diff=gpg" > .gitattributes
-@end example
-
-@node How does branching and pushing work?
-@appendixsubsec How does branching and pushing work?
-
-Please see @ref{Branching} and @uref{https://emacsair.me/2016/01/17/magit-2.4}
-
-@node Should I disable VC@?
-@appendixsubsec Should I disable VC@?
-
-If you don't use VC (the built-in version control interface) then
-you might be tempted to disable it, not least because we used to
-recommend that you do that.
-
-We no longer recommend that you disable VC@.  Doing so would break
-useful third-party packages (such as @code{diff-hl}), which depend on VC
-being enabled.
-
-If you choose to disable VC anyway, then you can do so by changing
-the value of @code{vc-handled-backends}.
-
-@node FAQ - Issues and Errors
-@appendixsec FAQ - Issues and Errors
-
-@menu
-* Magit is slow::
-* I changed several thousand files at once and now Magit is unusable::
-* I am having problems committing::
-* I am using MS Windows and cannot push with Magit::
-* I am using macOS and SOMETHING works in shell, but not in Magit: I am using 
macOS and SOMETHING works in shell but not in Magit. 
-* Expanding a file to show the diff causes it to disappear::
-* Point is wrong in the @code{COMMIT_EDITMSG} buffer::
-* The mode-line information isn't always up-to-date::
-* A branch and tag sharing the same name breaks SOMETHING::
-* My Git hooks work on the command-line but not inside Magit::
-* @code{git-commit-mode} isn't used when committing from the command-line::
-* Point ends up inside invisible text when jumping to a file-visiting buffer::
-* I am no longer able to save popup defaults::
-@end menu
-
-@node Magit is slow
-@appendixsubsec Magit is slow
-
-See @ref{Performance} and @ref{I changed several thousand files at once and 
now Magit is unusable}.
-
-@node I changed several thousand files at once and now Magit is unusable
-@appendixsubsec I changed several thousand files at once and now Magit is 
unusable
-
-Magit is currently not expected to work well under such conditions.
-It sure would be nice if it did.  Reaching satisfactory performance
-under such conditions will require some heavy refactoring.  This is no
-small task but I hope to eventually find the time to make it happen.
-
-But for now we recommend you use the command line to complete this one
-commit.  Also see @ref{Performance}.
-
-@node I am having problems committing
-@appendixsubsec I am having problems committing
-
-That likely means that Magit is having problems finding an appropriate
-emacsclient executable.  See @ref{Configuring With-Editor,,,with-editor,}
-and @ref{Debugging,,,with-editor,}.
-
-@node I am using MS Windows and cannot push with Magit
-@appendixsubsec I am using MS Windows and cannot push with Magit
-
-It's almost certain that Magit is only incidental to this issue.  It
-is much more likely that this is a configuration issue, even if you
-can push on the command line.
-
-Detailed setup instructions can be found at
-@uref{https://github.com/magit/magit/wiki/Pushing-with-Magit-from-Windows}.
-
-@node I am using macOS and SOMETHING works in shell but not in Magit
-@appendixsubsec I am using macOS and SOMETHING works in shell, but not in Magit
-
-This usually occurs because Emacs doesn't have the same environment
-variables as your shell.  Try installing and configuring
-@uref{https://github.com/purcell/exec-path-from-shell}.  By default it
-synchronizes @code{$PATH}, which helps Magit find the same @code{git} as the 
one you
-are using on the shell.
-
-If SOMETHING is "passphrase caching with gpg-agent for commit and/or
-tag signing", then you'll also need to synchronize @code{$GPG_AGENT_INFO}.
-
-@node Expanding a file to show the diff causes it to disappear
-@appendixsubsec Expanding a file to show the diff causes it to disappear
-
-This is probably caused by a customization of a @code{diff.*} Git variable.
-You probably set that variable for a reason, and should therefore only
-undo that setting in Magit by customizing @code{magit-git-global-arguments}.
-
-@node Point is wrong in the @code{COMMIT_EDITMSG} buffer
-@appendixsubsec Point is wrong in the @code{COMMIT_EDITMSG} buffer
-
-Neither Magit nor @code{git-commit.el} fiddle with point in the buffer used
-to write commit messages, so something else must be doing it.
-
-You have probably globally enabled a mode which restores point in
-file-visiting buffers.  It might be a bit surprising, but when you
-write a commit message, then you are actually editing a file.
-
-So you have to figure out which package is doing it.  @code{saveplace},
-@code{pointback}, and @code{session} are likely candidates.  These snippets 
might
-help:
-
-@lisp
-(setq session-name-disable-regexp "\\(?:\\`'\\.git/[A-Z_]+\\'\\)")
-
-(with-eval-after-load 'pointback
-  (lambda ()
-    (when (or git-commit-mode git-rebase-mode)
-      (pointback-mode -1))))
-@end lisp
-
-@node The mode-line information isn't always up-to-date
-@appendixsubsec The mode-line information isn't always up-to-date
-
-Magit is not responsible for the version control information that is
-being displayed in the mode-line and looks something like @code{Git-master}.
-The built-in "Version Control" package, also known as "VC", updates
-that information, and can be told to do so more often:
-
-@lisp
-(setq auto-revert-check-vc-info t)
-@end lisp
-
-But doing so isn't good for performance.  For more (overly optimistic)
-information see @ref{VC Mode Line,,,emacs,}.
-
-If you don't really care about seeing this information in the
-mode-line, but just don't want to see @emph{incorrect} information,
-then consider simply not displaying it in the mode-line:
-
-@lisp
-(setq-default mode-line-format
-              (delete '(vc-mode vc-mode) mode-line-format))
-@end lisp
-
-@node A branch and tag sharing the same name breaks SOMETHING
-@appendixsubsec A branch and tag sharing the same name breaks SOMETHING
-
-Or more generally, ambiguous refnames break SOMETHING@.
-
-Magit assumes that refs are named non-ambiguously across the
-"refs/heads/", "refs/tags/", and "refs/remotes/" namespaces (i.e., all
-the names remain unique when those prefixes are stripped).  We
-consider ambiguous refnames unsupported and recommend that you use a
-non-ambiguous naming scheme.  However, if you do work with a
-repository that has ambiguous refnames, please report any issues you
-encounter, so that we can investigate whether there is a simple fix.
-
-@node My Git hooks work on the command-line but not inside Magit
-@appendixsubsec My Git hooks work on the command-line but not inside Magit
-
-When Magit calls @code{git} it adds a few global arguments including
-@code{--literal-pathspecs} and the @code{git} process started by Magit then 
passes
-that setting on to other @code{git} process it starts itself.  It does so by
-setting the environment variable @code{GIT_LITERAL_PATHSPECS}, not by calling
-subprocesses with the @code{--literal-pathspecs} argument.  You can therefore
-override this setting in hook scripts using @code{unset
-GIT_LITERAL_PATHSPECS}.
-
-@node @code{git-commit-mode} isn't used when committing from the command-line
-@appendixsubsec @code{git-commit-mode} isn't used when committing from the 
command-line
-
-The reason for this is that @code{git-commit.el} has not been loaded yet
-and/or that the server has not been started yet.  These things have
-always already been taken care of when you commit from Magit because
-in order to do so, Magit has to be loaded and doing that involves
-loading @code{git-commit} and starting the server.
-
-If you want to commit from the command-line, then you have to take
-care of these things yourself. Your @code{init.el} file should contain:
-
-@lisp
-(require 'git-commit)
-(server-mode)
-@end lisp
-
-Instead of `(require 'git-commit)` you may also use:
-
-@lisp
-(load "/path/to/magit-autoloads.el")
-@end lisp
-
-You might want to do that because loading @code{git-commit} causes large
-parts of Magit to be loaded.
-
-There are also some variations of @code{(server-mode)} that you might want to
-try. Personally I use:
-
-@lisp
-(use-package server
-  :config (or (server-running-p) (server-mode)))
-@end lisp
-
-Now you can use:
-
-@example
-$ emacs&
-$ EDITOR=emacsclient git commit
-@end example
-
-However you cannot use:
-
-@example
-$ killall emacs
-$ EDITOR="emacsclient --alternate-editor emacs" git commit
-@end example
-
-This will actually end up using @code{emacs}, not @code{emacsclient}.  If you 
do
-this, then you can still edit the commit message but @code{git-commit-mode}
-won't be used and you have to exit @code{emacs} to finish the process.
-
-Tautology ahead.  If you want to be able to use @code{emacsclient} to connect
-to a running @code{emacs} instance, even though no @code{emacs} instance is 
running,
-then you cannot use @code{emacsclient} directly.
-
-Instead you have to create a script that does something like this:
-
-Try to use @code{emacsclient} (without using @code{--alternate-editor}).  If 
that
-succeeds, do nothing else.  Otherwise start @code{emacs &} (and @code{init.el} 
must
-call @code{server-start}) and try to use @code{emacsclient} again.
-
-@node Point ends up inside invisible text when jumping to a file-visiting 
buffer
-@appendixsubsec Point ends up inside invisible text when jumping to a 
file-visiting buffer
-
-This can happen when you type @code{RET} on a hunk to visit the respective
-file at the respective position.  One solution to this problem is to
-use @code{global-reveal-mode}.  It makes sure that text around point is
-always visible.  If that is too drastic for your taste, then you may
-instead use @code{magit-diff-visit-file-hook} to reveal the text, possibly
-using @code{reveal-post-command} or for Org buffers @code{org-reveal}.
-
-@node I am no longer able to save popup defaults
-@appendixsubsec I am no longer able to save popup defaults
-
-Magit used to use Magit-Popup to implement the transient popup menus.
-Now it used Transient instead, which is Magit-Popup's successor.
-
-In the older Magit-Popup menus, it was possible to save user settings
-(e.g., setting the gpg signing key for commits) by using @code{C-c C-c} in
-the popup buffer.  This would dismiss the popup, but save the settings
-as the defaults for future popups.
-
-When switching to Transient menus, this functionality is now available
-via @code{C-x C-s} instead; the @code{C-x} prefix has other options as well 
when
-using Transient, which will be displayed when it is typed.  See
-@uref{https://magit.vc/manual/transient/Saving-Values.html#Saving-Values} for
-more details.
-
-@node Debugging Tools
-@chapter Debugging Tools
-
-Magit and its dependencies provide a few debugging tools, and we
-appreciate it very much if you use those tools before reporting an
-issue.  Please include all relevant output when reporting an
-issue.
-
-@table @asis
-@item @kbd{M-x magit-version}
-@findex magit-version
-This command shows the currently used versions of Magit, Git, and
-Emacs in the echo area.  Non-interactively this just returns the
-Magit version.
-
-@item @kbd{M-x magit-emacs-Q-command}
-@findex magit-emacs-Q-command
-This command shows a debugging shell command in the echo area and
-adds it to the kill ring.  Paste that command into a shell and run
-it.
-
-This shell command starts @code{emacs} with only @code{magit} and its
-dependencies loaded.  Neither your configuration nor other installed
-packages are loaded.  This makes it easier to determine whether some
-issue lays with Magit or something else.
-
-If you run Magit from its Git repository, then you should be able to
-use @code{make emacs-Q} instead of the output of this command.
-
-@item @kbd{M-x magit-toggle-git-debug}
-@findex magit-toggle-git-debug
-This command toggles whether additional git errors are reported.
-
-Magit basically calls git for one of these two reasons: for
-side-effects or to do something with its standard output.
-
-When git is run for side-effects then its output, including error
-messages, go into the process buffer which is shown when using @code{$}.
-
-When git's output is consumed in some way, then it would be too
-expensive to also insert it into this buffer, but when this
-option is non-nil and git returns with a non-zero exit status,
-then at least its standard error is inserted into this buffer.
-
-This is only intended for debugging purposes.  Do not enable this
-permanently, that would negatively affect performance.  Also note
-that just because git exits with a non-zero exit status and prints
-an error message that usually doesn't mean that it is an error as
-far as Magit is concerned, which is another reason we usually hide
-these error messages.  Whether some error message is relevant in
-the context of some unexpected behavior has to be judged on a case
-by case basis.
-
-@item @kbd{M-x magit-toggle-verbose-refresh}
-@findex magit-toggle-verbose-refresh
-This command toggles whether Magit refreshes buffers verbosely.
-Enabling this helps figuring out which sections are bottlenecks.
-The additional output can be found in the @code{*Messages*} buffer.
-
-@item @kbd{M-x magit-debug-git-executable}
-@findex magit-debug-git-executable
-This command displays a buffer containing information about the
-available and used @code{git} executable(s), and can be useful when
-investigating @code{exec-path} issues.
-
-Also see @ref{Git Executable}.
-
-@item @kbd{M-x with-editor-debug}
-@findex with-editor-debug
-This command displays a buffer containing information about the
-available and used @code{emacsclient} executable(s), and can be useful
-when investigating why Magit (or rather @code{with-editor}) cannot find
-an appropriate @code{emacsclient} executable.
-
-Also see @ref{Debugging,,,with-editor,}.
-@end table
-
-@noindent
-Please also see @ref{FAQ}.
-
-@node Keystroke Index
-@appendix Keystroke Index
-
-@printindex ky
-
-@node Function and Command Index
-@appendix Function and Command Index
-
-@printindex fn
-
-@node Variable Index
-@appendix Variable Index
-
-@printindex vr
-
-@bye



reply via email to

[Prev in Thread] Current Thread [Next in Thread]