'\" t
.\" Title: git-am
.\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets vsnapshot
.\" Date: 2026-06-29
.\" Manual: Git Manual
.\" Source: Git 2.55.0
.\" Language: English
.\"
.TH "GIT\-AM" "1" "2026\-06\-29" "Git 2\&.55\&.0" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-am \- Apply a series of patches from a mailbox
.SH "SYNOPSIS"
.sp
.nf
\fBgit\fR \fBam\fR [\fB\-\-signoff\fR] [\fB\-\-keep\fR] [\fB\-\-\fR[\fBno\-\fR]\fBkeep\-cr\fR] [\fB\-\-\fR[\fBno\-\fR]\fButf8\fR] [\fB\-\-\fR[\fBno\-\fR]\fBverify\fR]
[\fB\-\-\fR[\fBno\-\fR]\fB3way\fR] [\fB\-\-interactive\fR] [\fB\-\-committer\-date\-is\-author\-date\fR]
[\fB\-\-ignore\-date\fR] [\fB\-\-ignore\-space\-change\fR | \fB\-\-ignore\-whitespace\fR]
[\fB\-\-whitespace=\fR\fI\fR] [\fB\-C\fR\fI\fR] [\fB\-p\fR\fI\fR] [\fB\-\-directory=\fR\fI\fR]
[\fB\-\-exclude=\fR\fI\fR] [\fB\-\-include=\fR\fI\fR] [\fB\-\-reject\fR] [\fB\-q\fR | \fB\-\-quiet\fR]
[\fB\-\-\fR[\fBno\-\fR]\fBscissors\fR] [\fB\-S\fR[\fI\fR]] [\fB\-\-patch\-format=\fR\fI\fR]
[\fB\-\-quoted\-cr=\fR\fI\fR]
[\fB\-\-empty=\fR(\fBstop\fR|\fBdrop\fR|\fBkeep\fR)]
[(\fI\fR | \fI\fR)\&...]
\fBgit\fR \fBam\fR (\fB\-\-continue\fR | \fB\-\-skip\fR | \fB\-\-abort\fR | \fB\-\-quit\fR | \fB\-\-retry\fR | \fB\-\-show\-current\-patch\fR[\fB=\fR(\fBdiff\fR|\fBraw\fR)] | \fB\-\-allow\-empty\fR)
.fi
.sp
.SH "DESCRIPTION"
.sp
Splits mail messages in a mailbox into commit log messages, authorship information, and patches, and applies them to the current branch\&. You could think of it as a reverse operation of \fBgit-format-patch\fR(1) run on a branch with a straight history without merges\&.
.SH "OPTIONS"
.PP
(\fI\fR|\fI\fR)\&.\&.\&.
.RS 4
The list of mailbox files to read patches from\&. If you do not supply this argument, the command reads from the standard input\&. If you supply directories, they will be treated as Maildirs\&.
.RE
.PP
\fB\-s\fR, \fB\-\-signoff\fR
.RS 4
Add a
\fBSigned\-off\-by\fR
trailer to the commit message (see
\fBgit-interpret-trailers\fR(1)), using the committer identity of yourself\&. See the signoff option in
\fBgit-commit\fR(1)
for more information\&.
.RE
.PP
\fB\-k\fR, \fB\-\-keep\fR
.RS 4
Pass
\fB\-k\fR
flag to
\fBgit-mailinfo\fR(1)\&.
.RE
.PP
\fB\-\-keep\-non\-patch\fR
.RS 4
Pass
\fB\-b\fR
flag to
\fBgit-mailinfo\fR(1)\&.
.RE
.PP
\fB\-\-keep\-cr\fR, \fB\-\-no\-keep\-cr\fR
.RS 4
With
\fB\-\-keep\-cr\fR, call
\fBgit-mailsplit\fR(1)
with the same option, to prevent it from stripping CR at the end of lines\&.
\fBam\&.keepcr\fR
configuration variable can be used to specify the default behaviour\&.
\fB\-\-no\-keep\-cr\fR
is useful to override
\fBam\&.keepcr\fR\&.
.RE
.PP
\fB\-c\fR, \fB\-\-scissors\fR
.RS 4
Remove everything in body before a scissors line (see
\fBgit-mailinfo\fR(1))\&. Can be activated by default using the
\fBmailinfo\&.scissors\fR
configuration variable\&.
.RE
.PP
\fB\-\-no\-scissors\fR
.RS 4
Ignore scissors lines (see
\fBgit-mailinfo\fR(1))\&.
.RE
.PP
\fB\-\-quoted\-cr=\fR\fI\fR
.RS 4
This flag will be passed down to
\fBgit-mailinfo\fR(1)\&.
.RE
.PP
\fB\-\-empty=\fR(\fBdrop\fR|\fBkeep\fR|\fBstop\fR)
.RS 4
How to handle an e\-mail message lacking a patch:
.PP
\fBdrop\fR
.RS 4
The e\-mail message will be skipped\&.
.RE
.PP
\fBkeep\fR
.RS 4
An empty commit will be created, with the contents of the e\-mail message as its log\&.
.RE
.PP
\fBstop\fR
.RS 4
The command will fail, stopping in the middle of the current
\fBam\fR
session\&. This is the default behavior\&.
.RE
.RE
.PP
\fB\-m\fR, \fB\-\-message\-id\fR
.RS 4
Pass the
\fB\-m\fR
flag to
\fBgit-mailinfo\fR(1), so that the
\fBMessage\-ID\fR
header is added to the commit message\&. The
\fBam\&.messageid\fR
configuration variable can be used to specify the default behaviour\&.
.RE
.PP
\fB\-\-no\-message\-id\fR
.RS 4
Do not add the Message\-ID header to the commit message\&.
\fB\-\-no\-message\-id\fR
is useful to override
\fBam\&.messageid\fR\&.
.RE
.PP
\fB\-q\fR, \fB\-\-quiet\fR
.RS 4
Be quiet\&. Only print error messages\&.
.RE
.PP
\fB\-u\fR, \fB\-\-utf8\fR
.RS 4
Pass
\fB\-u\fR
flag to
\fBgit-mailinfo\fR(1)\&. The proposed commit log message taken from the e\-mail is re\-coded into UTF\-8 encoding (configuration variable
\fBi18n\&.commitEncoding\fR
can be used to specify the project\(cqs preferred encoding if it is not UTF\-8)\&.
.sp
This was optional in prior versions of git, but now it is the default\&. You can use
\fB\-\-no\-utf8\fR
to override this\&.
.RE
.PP
\fB\-\-no\-utf8\fR
.RS 4
Pass
\fB\-n\fR
flag to
\fBgit-mailinfo\fR(1)\&.
.RE
.PP
\fB\-3\fR, \fB\-\-3way\fR, \fB\-\-no\-3way\fR
.RS 4
When the patch does not apply cleanly, fall back on 3\-way merge if the patch records the identity of blobs it is supposed to apply to and we have those blobs available locally\&.
\fB\-\-no\-3way\fR
can be used to override
\fBam\&.threeWay\fR
configuration variable\&. For more information, see
\fBam\&.threeWay\fR
in
\fBgit-config\fR(1)\&.
.RE
.PP
\fB\-\-rerere\-autoupdate\fR, \fB\-\-no\-rerere\-autoupdate\fR
.RS 4
After the rerere mechanism reuses a recorded resolution on the current conflict to update the files in the working tree, allow it to also update the index with the result of resolution\&.
\fB\-\-no\-rerere\-autoupdate\fR
is a good way to double\-check what
\fBgit-rerere\fR(1)
did and catch potential mismerges, before committing the result to the index with a separate
\fBgit-add\fR(1)\&.
.RE
.PP
\fB\-\-ignore\-space\-change\fR, \fB\-\-ignore\-whitespace\fR, \fB\-\-whitespace=\fR\fI\fR, \fB\-C\fR\fI\fR, \fB\-p\fR\fI\fR, \fB\-\-directory=\fR\fI\fR, \fB\-\-exclude=\fR\fI\fR, \fB\-\-include=\fR\fI\fR, \fB\-\-reject\fR
.RS 4
These flags are passed to the
\fBgit-apply\fR(1)
program that applies the patch\&.
.sp
Valid
\fI\fR
for the
\fB\-\-whitespace\fR
option are:
\fBnowarn\fR,
\fBwarn\fR,
\fBfix\fR,
\fBerror\fR, and
\fBerror\-all\fR\&.
.RE
.PP
\fB\-\-patch\-format\fR
.RS 4
By default the command will try to detect the patch format automatically\&. This option allows the user to bypass the automatic detection and specify the patch format that the patch(es) should be interpreted as\&. Valid formats are mbox, mboxrd, stgit, stgit\-series, and hg\&.
.RE
.PP
\fB\-i\fR, \fB\-\-interactive\fR
.RS 4
Run interactively\&.
.RE
.PP
\fB\-\-verify\fR, \fB\-n\fR, \fB\-\-no\-verify\fR
.RS 4
Run the
\fBpre\-applypatch\fR
and
\fBapplypatch\-msg\fR
hooks\&. This is the default\&. Skip these hooks with
\fB\-n\fR
or
\fB\-\-no\-verify\fR\&. See also
\fBgithooks\fR(5)\&.
.sp
Note that
\fBpost\-applypatch\fR
cannot be skipped\&.
.RE
.PP
\fB\-\-committer\-date\-is\-author\-date\fR
.RS 4
By default the command records the date from the e\-mail message as the commit author date, and uses the time of commit creation as the committer date\&. This allows the user to lie about the committer date by using the same value as the author date\&.
.if n \{\
.sp
.\}
.RS 4
.it 1 an-trap
.nr an-no-space-flag 1
.nr an-break-flag 1
.br
.ps +1
\fBWarning\fR
.ps -1
.br
The history walking machinery assumes that commits have non\-decreasing commit timestamps\&. You should consider if you really need to use this option\&. Then you should only use this option to override the committer date when applying commits on top of a base which commit is older (in terms of the commit date) than the oldest patch you are applying\&.
.sp .5v
.RE
.RE
.PP
\fB\-\-ignore\-date\fR
.RS 4
By default the command records the date from the e\-mail message as the commit author date, and uses the time of commit creation as the committer date\&. This allows the user to lie about the author date by using the same value as the committer date\&.
.RE
.PP
\fB\-\-skip\fR
.RS 4
Skip the current patch\&. This is only meaningful when restarting an aborted patch\&.
.RE
.PP
\fB\-S\fR[\fI\fR], \fB\-\-gpg\-sign\fR[\fB=\fR\fI\fR], \fB\-\-no\-gpg\-sign\fR
.RS 4
GPG\-sign commits\&. The
\fI\fR
is optional and defaults to the committer identity; if specified, it must be stuck to the option without a space\&.
\fB\-\-no\-gpg\-sign\fR
is useful to countermand both
\fBcommit\&.gpgSign\fR
configuration variable, and earlier
\fB\-\-gpg\-sign\fR\&.
.RE
.PP
\fB\-\-continue\fR, \fB\-r\fR, \fB\-\-resolved\fR
.RS 4
After a patch failure (e\&.g\&. attempting to apply conflicting patch), the user has applied it by hand and the index file stores the result of the application\&. Make a commit using the authorship and commit log extracted from the e\-mail message and the current index file, and continue\&.
.RE
.PP
\fB\-\-resolvemsg=\fR\fI\fR
.RS 4
When a patch failure occurs,
\fI\fR
will be printed to the screen before exiting\&. This overrides the standard message informing you to use
\fB\-\-continue\fR
or
\fB\-\-skip\fR
to handle the failure\&. This is solely for internal use between
\fBgit-rebase\fR(1)
and
\fBgit-am\fR(1)\&.
.RE
.PP
\fB\-\-abort\fR
.RS 4
Restore the original branch and abort the patching operation\&. Revert the contents of files involved in the am operation to their pre\-am state\&.
.RE
.PP
\fB\-\-quit\fR
.RS 4
Abort the patching operation but keep
\fBHEAD\fR
and the index untouched\&.
.RE
.PP
\fB\-\-retry\fR
.RS 4
Try to apply the last conflicting patch again\&. This is generally only useful for passing extra options to the retry attempt (e\&.g\&.,
\fB\-\-3way\fR), since otherwise you\(cqll just see the same failure again\&.
.RE
.PP
\fB\-\-show\-current\-patch\fR[\fB=\fR(\fBdiff\fR|\fBraw\fR)]
.RS 4
Show the message at which
\fBgit-am\fR(1)
has stopped due to conflicts\&. If
\fBraw\fR
is specified, show the raw contents of the e\-mail message; if
\fBdiff\fR, show the diff portion only\&. Defaults to
\fBraw\fR\&.
.RE
.PP
\fB\-\-allow\-empty\fR
.RS 4
After a patch failure on an input e\-mail message lacking a patch, create an empty commit with the contents of the e\-mail message as its log message\&.
.RE
.SH "DISCUSSION"
.sp
The commit author name is taken from the "From: " line of the message, and commit author date is taken from the "Date: " line of the message\&. The "Subject: " line is used as the title of the commit, after stripping common prefix "[PATCH ]"\&. The "Subject: " line is supposed to concisely describe what the commit is about in one line of text\&.
.sp
"From: ", "Date: ", and "Subject: " lines starting the body override the respective commit author name and title values taken from the headers\&.
.sp
The commit message is formed by the title taken from the "Subject: ", a blank line and the body of the message up to where the patch begins\&. Excess whitespace at the end of each line is automatically stripped\&.
.sp
The patch is expected to be inline, directly following the message\&. Any line that is of the form:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
three\-dashes and end\-of\-line, or
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
a line that begins with
\fBdiff\fR
\fB\-\fR, or
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
a line that begins with `Index: `
.RE
.sp
is taken as the beginning of a patch, and the commit log message is terminated before the first occurrence of such a line\&.
.sp
This means that the contents of the commit message can inadvertently interrupt the processing (see the CAVEATS section below)\&.
.sp
When initially invoking \fBgit-am\fR(1), you give it the names of the mailboxes to process\&. Upon seeing the first patch that does not apply, it aborts in the middle\&. You can recover from this in one of two ways:
.sp
.RS 4
.ie n \{\
\h'-04' 1.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 1." 4.2
.\}
skip the current patch by re\-running the command with the
\fB\-\-skip\fR
option\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04' 2.\h'+01'\c
.\}
.el \{\
.sp -1
.IP " 2." 4.2
.\}
hand resolve the conflict in the working directory, and update the index file to bring it into a state that the patch should have produced\&. Then run the command with the
\fB\-\-continue\fR
option\&.
.RE
.sp
The command refuses to process new mailboxes until the current operation is finished, so if you decide to start over from scratch, run \fBgit\fR \fBam\fR \fB\-\-abort\fR before running the command with mailbox names\&.
.sp
Before any patches are applied, \fBORIG_HEAD\fR is set to the tip of the current branch\&. This is useful if you have problems with multiple commits, like running \fBgit-am\fR(1) on the wrong branch or an error in the commits that is more easily fixed by changing the mailbox (e\&.g\&. errors in the \fBFrom:\fR lines)\&.
.SH "CAVEATS"
.sp
The output from \fBgit-format-patch\fR(1) can lead to a different commit message when applied with \fBgit-am\fR(1)\&. The patch that is applied may also be different from the one that was generated, or patch application may fail outright\&. See the DISCUSSION section above for the syntactic rules\&.
.sp
Note that this is especially problematic for unindented diffs that occur in the commit message; the diff in the commit message might get applied along with the patch section, or the patch application machinery might trip up because the patch target doesn\(cqt apply\&. This could for example be caused by a diff in a Markdown code block\&.
.sp
The solution for this is to indent the diff or other text that could cause problems\&.
.sp
This loss of fidelity might be simple to notice if you are applying patches directly from a mailbox\&. However, changes originating from Git could be applied in bulk, in which case this would be much harder to notice\&. This could for example be a Linux distribution which uses patch files to apply changes on top of the commits from the upstream repositories\&. This goes to show that this behavior does not only impact email workflows\&.
.sp
Given these limitations, one might be tempted to use a general\-purpose utility like \fBpatch\fR(1) instead\&. However, \fBpatch\fR(1) will not only look for unindented diffs (like \fBgit-am\fR(1)) but will try to apply indented diffs as well\&.
.SH "HOOKS"
.sp
This command can run \fBapplypatch\-msg\fR, \fBpre\-applypatch\fR, and \fBpost\-applypatch\fR hooks\&. See \fBgithooks\fR(5) for more information\&.
.sp
See the \fB\-\-verify\fR/\fB\-n\fR/\fB\-\-no\-verify\fR options\&.
.SH "CONFIGURATION"
.sp
Everything below this line in this section is selectively included from the \fBgit-config\fR(1) documentation\&. The content is the same as what\(cqs found there:
.PP
\fBam\&.keepcr\fR
.RS 4
If true,
\fBgit-am\fR(1)
will call
\fBgit-mailsplit\fR(1)
for patches in mbox format with parameter
\fB\-\-keep\-cr\fR\&. In this case
\fBgit-mailsplit\fR(1)
will not remove
\fB\er\fR
from lines ending with
\fB\er\en\fR\&. Can be overridden by giving
\fB\-\-no\-keep\-cr\fR
from the command line\&.
.RE
.PP
\fBam\&.threeWay\fR
.RS 4
By default,
\fBgit-am\fR(1)
will fail if the patch does not apply cleanly\&. When set to true, this setting tells
\fBgit-am\fR(1)
to fall back on 3\-way merge if the patch records the identity of blobs it is supposed to apply to and we have those blobs available locally (equivalent to giving the
\fB\-\-3way\fR
option from the command line)\&. Defaults to
\fBfalse\fR\&.
.RE
.PP
\fBam\&.messageId\fR
.RS 4
Add a
\fBMessage\-ID\fR
trailer based on the email header to the commit when using
\fBgit-am\fR(1)
(see
\fBgit-interpret-trailers\fR(1))\&. See also the
\fB\-\-message\-id\fR
and
\fB\-\-no\-message\-id\fR
options\&.
.RE
.SH "SEE ALSO"
.sp
\fBgit-apply\fR(1), \fBgit-format-patch\fR(1)\&.
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite