'\" 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