git-am(1)
=========

NAME
----
git-am - Apply a series of patches from a mailbox


SYNOPSIS
--------
[verse]
'git-am' [--signoff] [--dotest=<dir>] [--keep] [--utf8 | --no-utf8]
         [--3way] [--interactive] [--binary]
         [--whitespace=<option>] [-C<n>] [-p<n>]
         <mbox>|<Maildir>...
'git-am' [--skip | --resolved]

DESCRIPTION
-----------
Splits mail messages in a mailbox into commit log message,
authorship information and patches, and applies them to the
current branch.

OPTIONS
-------
<mbox>|<Maildir>...::
	The list of mailbox files to read patches from. If you do not
	supply this argument, reads from the standard input. If you supply
	directories, they'll be treated as Maildirs.

-s, --signoff::
	Add `Signed-off-by:` line to the commit message, using
	the committer identity of yourself.

-d=<dir>, --dotest=<dir>::
	Instead of `.dotest` directory, use <dir> as a working
	area to store extracted patches.

-k, --keep::
	Pass `-k` flag to `git-mailinfo` (see gitlink:git-mailinfo[1]).

-u, --utf8::
	Pass `-u` flag to `git-mailinfo` (see gitlink:git-mailinfo[1]).
	The proposed commit log message taken from the e-mail
	is re-coded into UTF-8 encoding (configuration variable
	`i18n.commitencoding` can be used to specify project's
	preferred encoding if it is not UTF-8).
+
This was optional in prior versions of git, but now it is the
default.   You could use `--no-utf8` to override this.

--no-utf8::
	Pass `-n` flag to `git-mailinfo` (see
	gitlink:git-mailinfo[1]).

-3, --3way::
	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.

-b, --binary::
	Pass `--allow-binary-replacement` flag to `git-apply`
	(see gitlink:git-apply[1]).

--whitespace=<option>::
	This flag is passed to the `git-apply` (see gitlink:git-apply[1])
	program that applies
	the patch.

-C<n>, -p<n>::
	These flags are passed to the `git-apply` (see gitlink:git-apply[1])
	program that applies
	the patch.

-i, --interactive::
	Run interactively.

--skip::
	Skip the current patch.  This is only meaningful when
	restarting an aborted patch.

-r, --resolved::
	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.

--resolvemsg=<msg>::
	When a patch failure occurs, <msg> will be printed
	to the screen before exiting.  This overrides the
	standard message informing you to use `--resolved`
	or `--skip` to handle the failure.  This is solely
	for internal use between `git-rebase` and `git-am`.

DISCUSSION
----------

The commit author name is taken from the "From: " line of the
message, and commit author time 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 <anything>]".
It is supposed to describe what the commit is about concisely as
a one line text.

The body of the message (iow, after a blank line that terminates
RFC2822 headers) can begin with "Subject: " and "From: " lines
that are different from those of the mail header, to override
the values of these fields.

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 whitespaces at the end of the
lines are automatically stripped.

The patch is expected to be inline, directly following the
message.  Any line that is of form:

* three-dashes and end-of-line, or
* a line that begins with "diff -", or
* a line that begins with "Index: "

is taken as the beginning of a patch, and the commit log message
is terminated before the first occurrence of such a line.

When initially invoking it, you give it names of the mailboxes
to crunch.  Upon seeing the first patch that does not apply, it
aborts in the middle,.  You can recover from this in one of two ways:

. skip the current patch by re-running the command with '--skip'
  option.

. hand resolve the conflict in the working directory, and update
  the index file to bring it in a state that the patch should
  have produced.  Then run the command with '--resolved' option.

The command refuses to process new mailboxes while `.dotest`
directory exists, so if you decide to start over from scratch,
run `rm -f .dotest` before running the command with mailbox
names.


SEE ALSO
--------
gitlink:git-apply[1].


Author
------
Written by Junio C Hamano <junkio@cox.net>

Documentation
--------------
Documentation by Petr Baudis, Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite
