Documentation / git-format-patch.txton commit Merge branch 'jn/gitweb-customlinks' (168d5bd)
   1git-format-patch(1)
   2===================
   3
   4NAME
   5----
   6git-format-patch - Prepare patches for e-mail submission
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git format-patch' [-k] [-o <dir> | --stdout] [--thread]
  13                   [--attach[=<boundary>] | --inline[=<boundary>]]
  14                   [-s | --signoff] [<common diff options>]
  15                   [-n | --numbered | -N | --no-numbered]
  16                   [--start-number <n>] [--numbered-files]
  17                   [--in-reply-to=Message-Id] [--suffix=.<sfx>]
  18                   [--ignore-if-in-upstream]
  19                   [--subject-prefix=Subject-Prefix]
  20                   [--cc=<email>]
  21                   [--cover-letter]
  22                   [ <since> | <revision range> ]
  23
  24DESCRIPTION
  25-----------
  26
  27Prepare each commit with its patch in
  28one file per commit, formatted to resemble UNIX mailbox format.
  29The output of this command is convenient for e-mail submission or
  30for use with 'git-am'.
  31
  32There are two ways to specify which commits to operate on.
  33
  341. A single commit, <since>, specifies that the commits leading
  35   to the tip of the current branch that are not in the history
  36   that leads to the <since> to be output.
  37
  382. Generic <revision range> expression (see "SPECIFYING
  39   REVISIONS" section in linkgit:git-rev-parse[1]) means the
  40   commits in the specified range.
  41
  42A single commit, when interpreted as a <revision range>
  43expression, means "everything that leads to that commit", but
  44if you write 'git format-patch <commit>', the previous rule
  45applies to that command line and you do not get "everything
  46since the beginning of the time".  If you want to format
  47everything since project inception to one commit, say "git
  48format-patch \--root <commit>" to make it clear that it is the
  49latter case.  If you want to format a single commit, you can do
  50this with "git format-patch -1 <commit>".
  51
  52By default, each output file is numbered sequentially from 1, and uses the
  53first line of the commit message (massaged for pathname safety) as
  54the filename. With the --numbered-files option, the output file names
  55will only be numbers, without the first line of the commit appended.
  56The names of the output files are printed to standard
  57output, unless the --stdout option is specified.
  58
  59If -o is specified, output files are created in <dir>.  Otherwise
  60they are created in the current working directory.
  61
  62By default, the subject of a single patch is "[PATCH] First Line" and
  63the subject when multiple patches are output is "[PATCH n/m] First
  64Line". To force 1/1 to be added for a single patch, use -n.  To omit
  65patch numbers from the subject, use -N
  66
  67If given --thread, 'git-format-patch' will generate In-Reply-To and
  68References headers to make the second and subsequent patch mails appear
  69as replies to the first mail; this also generates a Message-Id header to
  70reference.
  71
  72OPTIONS
  73-------
  74:git-format-patch: 1
  75include::diff-options.txt[]
  76
  77-<n>::
  78        Limits the number of patches to prepare.
  79
  80-o <dir>::
  81--output-directory <dir>::
  82        Use <dir> to store the resulting files, instead of the
  83        current working directory.
  84
  85-n::
  86--numbered::
  87        Name output in '[PATCH n/m]' format, even with a single patch.
  88
  89-N::
  90--no-numbered::
  91        Name output in '[PATCH]' format.
  92
  93--start-number <n>::
  94        Start numbering the patches at <n> instead of 1.
  95
  96--numbered-files::
  97        Output file names will be a simple number sequence
  98        without the default first line of the commit appended.
  99        Mutually exclusive with the --stdout option.
 100
 101-k::
 102--keep-subject::
 103        Do not strip/add '[PATCH]' from the first line of the
 104        commit log message.
 105
 106-s::
 107--signoff::
 108        Add `Signed-off-by:` line to the commit message, using
 109        the committer identity of yourself.
 110
 111--stdout::
 112        Print all commits to the standard output in mbox format,
 113        instead of creating a file for each one.
 114
 115--attach[=<boundary>]::
 116        Create multipart/mixed attachment, the first part of
 117        which is the commit message and the patch itself in the
 118        second part, with "Content-Disposition: attachment".
 119
 120--inline[=<boundary>]::
 121        Create multipart/mixed attachment, the first part of
 122        which is the commit message and the patch itself in the
 123        second part, with "Content-Disposition: inline".
 124
 125--thread::
 126        Add In-Reply-To and References headers to make the second and
 127        subsequent mails appear as replies to the first.  Also generates
 128        the Message-Id header to reference.
 129
 130--in-reply-to=Message-Id::
 131        Make the first mail (or all the mails with --no-thread) appear as a
 132        reply to the given Message-Id, which avoids breaking threads to
 133        provide a new patch series.
 134
 135--ignore-if-in-upstream::
 136        Do not include a patch that matches a commit in
 137        <until>..<since>.  This will examine all patches reachable
 138        from <since> but not from <until> and compare them with the
 139        patches being generated, and any patch that matches is
 140        ignored.
 141
 142--subject-prefix=<Subject-Prefix>::
 143        Instead of the standard '[PATCH]' prefix in the subject
 144        line, instead use '[<Subject-Prefix>]'. This
 145        allows for useful naming of a patch series, and can be
 146        combined with the --numbered option.
 147
 148--cc=<email>::
 149        Add a "Cc:" header to the email headers. This is in addition
 150        to any configured headers, and may be used multiple times.
 151
 152--cover-letter::
 153        In addition to the patches, generate a cover letter file
 154        containing the shortlog and the overall diffstat.  You can
 155        fill in a description in the file before sending it out.
 156
 157--suffix=.<sfx>::
 158        Instead of using `.patch` as the suffix for generated
 159        filenames, use specified suffix.  A common alternative is
 160        `--suffix=.txt`.
 161+
 162Note that you would need to include the leading dot `.` if you
 163want a filename like `0001-description-of-my-change.patch`, and
 164the first letter does not have to be a dot.  Leaving it empty would
 165not add any suffix.
 166
 167--no-binary::
 168        Don't output contents of changes in binary files, just take note
 169        that they differ.  Note that this disable the patch to be properly
 170        applied.  By default the contents of changes in those files are
 171        encoded in the patch.
 172
 173CONFIGURATION
 174-------------
 175You can specify extra mail header lines to be added to each message
 176in the repository configuration, new defaults for the subject prefix
 177and file suffix, and number patches when outputting more than one.
 178
 179------------
 180[format]
 181        headers = "Organization: git-foo\n"
 182        subjectprefix = CHANGE
 183        suffix = .txt
 184        numbered = auto
 185        cc = <email>
 186------------
 187
 188
 189EXAMPLES
 190--------
 191
 192* Extract commits between revisions R1 and R2, and apply them on top of
 193the current branch using 'git-am' to cherry-pick them:
 194+
 195------------
 196$ git format-patch -k --stdout R1..R2 | git am -3 -k
 197------------
 198
 199* Extract all commits which are in the current branch but not in the
 200origin branch:
 201+
 202------------
 203$ git format-patch origin
 204------------
 205+
 206For each commit a separate file is created in the current directory.
 207
 208* Extract all commits that lead to 'origin' since the inception of the
 209project:
 210+
 211------------
 212$ git format-patch --root origin
 213------------
 214
 215* The same as the previous one:
 216+
 217------------
 218$ git format-patch -M -B origin
 219------------
 220+
 221Additionally, it detects and handles renames and complete rewrites
 222intelligently to produce a renaming patch.  A renaming patch reduces
 223the amount of text output, and generally makes it easier to review it.
 224Note that the "patch" program does not understand renaming patches, so
 225use it only when you know the recipient uses git to apply your patch.
 226
 227* Extract three topmost commits from the current branch and format them
 228as e-mailable patches:
 229+
 230------------
 231$ git format-patch -3
 232------------
 233
 234SEE ALSO
 235--------
 236linkgit:git-am[1], linkgit:git-send-email[1]
 237
 238
 239Author
 240------
 241Written by Junio C Hamano <gitster@pobox.com>
 242
 243Documentation
 244--------------
 245Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 246
 247GIT
 248---
 249Part of the linkgit:git[1] suite