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

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


SYNOPSIS
--------
[verse]
'git-am' [--signoff] [--dotest=<dir>] [--utf8 | --no-utf8] [--binary] [--3way]
         [--interactive] [--whitespace=<option>] [-C<n>] [-p<n>]
	 <mbox>...
'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>...::
	The list of mailbox files to read patches from. If you do not
	supply this argument, reads from the standard input.

-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
	are 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]).

-b, --binary::
	Pass `--allow-binary-replacement` flag to `git-apply`
	(see gitlink:git-apply[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
	locally.

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

--whitespace=<option>::
	This flag is passed to the `git-apply` program that applies
	the patch.

-C<n>, -p<n>::
	These flags are passed to the `git-apply` program that applies
	the patch.

-i, --interactive::
	Run interactively, just like git-applymbox.

-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, just like 'git-applymbox' does.  You can
recover from this in one of two ways:

. skip the current one 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-applymbox[1], gitlink:git-applypatch[1], 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

