Documentation / git-format-patch.txton commit Merge branch 'js/http-custom-headers' (848b99b)
   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|--output-directory) <dir> | --stdout]
  13                   [--no-thread | --thread[=<style>]]
  14                   [(--attach|--inline)[=<boundary>] | --no-attach]
  15                   [-s | --signoff]
  16                   [--signature=<signature> | --no-signature]
  17                   [--signature-file=<file>]
  18                   [-n | --numbered | -N | --no-numbered]
  19                   [--start-number <n>] [--numbered-files]
  20                   [--in-reply-to=Message-Id] [--suffix=.<sfx>]
  21                   [--ignore-if-in-upstream]
  22                   [--subject-prefix=Subject-Prefix] [(--reroll-count|-v) <n>]
  23                   [--to=<email>] [--cc=<email>]
  24                   [--[no-]cover-letter] [--quiet] [--notes[=<ref>]]
  25                   [<common diff options>]
  26                   [ <since> | <revision range> ]
  27
  28DESCRIPTION
  29-----------
  30
  31Prepare each commit with its patch in
  32one file per commit, formatted to resemble UNIX mailbox format.
  33The output of this command is convenient for e-mail submission or
  34for use with 'git am'.
  35
  36There are two ways to specify which commits to operate on.
  37
  381. A single commit, <since>, specifies that the commits leading
  39   to the tip of the current branch that are not in the history
  40   that leads to the <since> to be output.
  41
  422. Generic <revision range> expression (see "SPECIFYING
  43   REVISIONS" section in linkgit:gitrevisions[7]) means the
  44   commits in the specified range.
  45
  46The first rule takes precedence in the case of a single <commit>.  To
  47apply the second rule, i.e., format everything since the beginning of
  48history up until <commit>, use the '\--root' option: `git format-patch
  49--root <commit>`.  If you want to format only <commit> itself, you
  50can do this 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. The default path
  61can be set with the 'format.outputDirectory' configuration option.
  62The `-o` option takes precedence over `format.outputDirectory`.
  63To store patches in the current working directory even when
  64`format.outputDirectory` points elsewhere, use `-o .`.
  65
  66By default, the subject of a single patch is "[PATCH] " followed by
  67the concatenation of lines from the commit message up to the first blank
  68line (see the DISCUSSION section of linkgit:git-commit[1]).
  69
  70When multiple patches are output, the subject prefix will instead be
  71"[PATCH n/m] ".  To force 1/1 to be added for a single patch, use `-n`.
  72To omit patch numbers from the subject, use `-N`.
  73
  74If given `--thread`, `git-format-patch` will generate `In-Reply-To` and
  75`References` headers to make the second and subsequent patch mails appear
  76as replies to the first mail; this also generates a `Message-Id` header to
  77reference.
  78
  79OPTIONS
  80-------
  81:git-format-patch: 1
  82include::diff-options.txt[]
  83
  84-<n>::
  85        Prepare patches from the topmost <n> commits.
  86
  87-o <dir>::
  88--output-directory <dir>::
  89        Use <dir> to store the resulting files, instead of the
  90        current working directory.
  91
  92-n::
  93--numbered::
  94        Name output in '[PATCH n/m]' format, even with a single patch.
  95
  96-N::
  97--no-numbered::
  98        Name output in '[PATCH]' format.
  99
 100--start-number <n>::
 101        Start numbering the patches at <n> instead of 1.
 102
 103--numbered-files::
 104        Output file names will be a simple number sequence
 105        without the default first line of the commit appended.
 106
 107-k::
 108--keep-subject::
 109        Do not strip/add '[PATCH]' from the first line of the
 110        commit log message.
 111
 112-s::
 113--signoff::
 114        Add `Signed-off-by:` line to the commit message, using
 115        the committer identity of yourself.
 116        See the signoff option in linkgit:git-commit[1] for more information.
 117
 118--stdout::
 119        Print all commits to the standard output in mbox format,
 120        instead of creating a file for each one.
 121
 122--attach[=<boundary>]::
 123        Create multipart/mixed attachment, the first part of
 124        which is the commit message and the patch itself in the
 125        second part, with `Content-Disposition: attachment`.
 126
 127--no-attach::
 128        Disable the creation of an attachment, overriding the
 129        configuration setting.
 130
 131--inline[=<boundary>]::
 132        Create multipart/mixed attachment, the first part of
 133        which is the commit message and the patch itself in the
 134        second part, with `Content-Disposition: inline`.
 135
 136--thread[=<style>]::
 137--no-thread::
 138        Controls addition of `In-Reply-To` and `References` headers to
 139        make the second and subsequent mails appear as replies to the
 140        first.  Also controls generation of the `Message-Id` header to
 141        reference.
 142+
 143The optional <style> argument can be either `shallow` or `deep`.
 144'shallow' threading makes every mail a reply to the head of the
 145series, where the head is chosen from the cover letter, the
 146`--in-reply-to`, and the first patch mail, in this order.  'deep'
 147threading makes every mail a reply to the previous one.
 148+
 149The default is `--no-thread`, unless the 'format.thread' configuration
 150is set.  If `--thread` is specified without a style, it defaults to the
 151style specified by 'format.thread' if any, or else `shallow`.
 152+
 153Beware that the default for 'git send-email' is to thread emails
 154itself.  If you want `git format-patch` to take care of threading, you
 155will want to ensure that threading is disabled for `git send-email`.
 156
 157--in-reply-to=Message-Id::
 158        Make the first mail (or all the mails with `--no-thread`) appear as a
 159        reply to the given Message-Id, which avoids breaking threads to
 160        provide a new patch series.
 161
 162--ignore-if-in-upstream::
 163        Do not include a patch that matches a commit in
 164        <until>..<since>.  This will examine all patches reachable
 165        from <since> but not from <until> and compare them with the
 166        patches being generated, and any patch that matches is
 167        ignored.
 168
 169--subject-prefix=<Subject-Prefix>::
 170        Instead of the standard '[PATCH]' prefix in the subject
 171        line, instead use '[<Subject-Prefix>]'. This
 172        allows for useful naming of a patch series, and can be
 173        combined with the `--numbered` option.
 174
 175-v <n>::
 176--reroll-count=<n>::
 177        Mark the series as the <n>-th iteration of the topic. The
 178        output filenames have `v<n>` prepended to them, and the
 179        subject prefix ("PATCH" by default, but configurable via the
 180        `--subject-prefix` option) has ` v<n>` appended to it.  E.g.
 181        `--reroll-count=4` may produce `v4-0001-add-makefile.patch`
 182        file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
 183
 184--to=<email>::
 185        Add a `To:` header to the email headers. This is in addition
 186        to any configured headers, and may be used multiple times.
 187        The negated form `--no-to` discards all `To:` headers added so
 188        far (from config or command line).
 189
 190--cc=<email>::
 191        Add a `Cc:` header to the email headers. This is in addition
 192        to any configured headers, and may be used multiple times.
 193        The negated form `--no-cc` discards all `Cc:` headers added so
 194        far (from config or command line).
 195
 196--from::
 197--from=<ident>::
 198        Use `ident` in the `From:` header of each commit email. If the
 199        author ident of the commit is not textually identical to the
 200        provided `ident`, place a `From:` header in the body of the
 201        message with the original author. If no `ident` is given, use
 202        the committer ident.
 203+
 204Note that this option is only useful if you are actually sending the
 205emails and want to identify yourself as the sender, but retain the
 206original author (and `git am` will correctly pick up the in-body
 207header). Note also that `git send-email` already handles this
 208transformation for you, and this option should not be used if you are
 209feeding the result to `git send-email`.
 210
 211--add-header=<header>::
 212        Add an arbitrary header to the email headers.  This is in addition
 213        to any configured headers, and may be used multiple times.
 214        For example, `--add-header="Organization: git-foo"`.
 215        The negated form `--no-add-header` discards *all* (`To:`,
 216        `Cc:`, and custom) headers added so far from config or command
 217        line.
 218
 219--[no-]cover-letter::
 220        In addition to the patches, generate a cover letter file
 221        containing the branch description, shortlog and the overall diffstat.  You can
 222        fill in a description in the file before sending it out.
 223
 224--notes[=<ref>]::
 225        Append the notes (see linkgit:git-notes[1]) for the commit
 226        after the three-dash line.
 227+
 228The expected use case of this is to write supporting explanation for
 229the commit that does not belong to the commit log message proper,
 230and include it with the patch submission. While one can simply write
 231these explanations after `format-patch` has run but before sending,
 232keeping them as Git notes allows them to be maintained between versions
 233of the patch series (but see the discussion of the `notes.rewrite`
 234configuration options in linkgit:git-notes[1] to use this workflow).
 235
 236--[no]-signature=<signature>::
 237        Add a signature to each message produced. Per RFC 3676 the signature
 238        is separated from the body by a line with '-- ' on it. If the
 239        signature option is omitted the signature defaults to the Git version
 240        number.
 241
 242--signature-file=<file>::
 243        Works just like --signature except the signature is read from a file.
 244
 245--suffix=.<sfx>::
 246        Instead of using `.patch` as the suffix for generated
 247        filenames, use specified suffix.  A common alternative is
 248        `--suffix=.txt`.  Leaving this empty will remove the `.patch`
 249        suffix.
 250+
 251Note that the leading character does not have to be a dot; for example,
 252you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
 253
 254-q::
 255--quiet::
 256        Do not print the names of the generated files to standard output.
 257
 258--no-binary::
 259        Do not output contents of changes in binary files, instead
 260        display a notice that those files changed.  Patches generated
 261        using this option cannot be applied properly, but they are
 262        still useful for code review.
 263
 264--zero-commit::
 265  Output an all-zero hash in each patch's From header instead
 266  of the hash of the commit.
 267
 268--root::
 269        Treat the revision argument as a <revision range>, even if it
 270        is just a single commit (that would normally be treated as a
 271        <since>).  Note that root commits included in the specified
 272        range are always formatted as creation patches, independently
 273        of this flag.
 274
 275CONFIGURATION
 276-------------
 277You can specify extra mail header lines to be added to each message,
 278defaults for the subject prefix and file suffix, number patches when
 279outputting more than one patch, add "To" or "Cc:" headers, configure
 280attachments, and sign off patches with configuration variables.
 281
 282------------
 283[format]
 284        headers = "Organization: git-foo\n"
 285        subjectPrefix = CHANGE
 286        suffix = .txt
 287        numbered = auto
 288        to = <email>
 289        cc = <email>
 290        attach [ = mime-boundary-string ]
 291        signOff = true
 292        coverletter = auto
 293------------
 294
 295
 296DISCUSSION
 297----------
 298
 299The patch produced by 'git format-patch' is in UNIX mailbox format,
 300with a fixed "magic" time stamp to indicate that the file is output
 301from format-patch rather than a real mailbox, like so:
 302
 303------------
 304From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
 305From: Tony Luck <tony.luck@intel.com>
 306Date: Tue, 13 Jul 2010 11:42:54 -0700
 307Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
 308 =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
 309MIME-Version: 1.0
 310Content-Type: text/plain; charset=UTF-8
 311Content-Transfer-Encoding: 8bit
 312
 313arch/arm config files were slimmed down using a python script
 314(See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment)
 315
 316Do the same for ia64 so we can have sleek & trim looking
 317...
 318------------
 319
 320Typically it will be placed in a MUA's drafts folder, edited to add
 321timely commentary that should not go in the changelog after the three
 322dashes, and then sent as a message whose body, in our example, starts
 323with "arch/arm config files were...".  On the receiving end, readers
 324can save interesting patches in a UNIX mailbox and apply them with
 325linkgit:git-am[1].
 326
 327When a patch is part of an ongoing discussion, the patch generated by
 328'git format-patch' can be tweaked to take advantage of the 'git am
 329--scissors' feature.  After your response to the discussion comes a
 330line that consists solely of "`-- >8 --`" (scissors and perforation),
 331followed by the patch with unnecessary header fields removed:
 332
 333------------
 334...
 335> So we should do such-and-such.
 336
 337Makes sense to me.  How about this patch?
 338
 339-- >8 --
 340Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet
 341
 342arch/arm config files were slimmed down using a python script
 343...
 344------------
 345
 346When sending a patch this way, most often you are sending your own
 347patch, so in addition to the "`From $SHA1 $magic_timestamp`" marker you
 348should omit `From:` and `Date:` lines from the patch file.  The patch
 349title is likely to be different from the subject of the discussion the
 350patch is in response to, so it is likely that you would want to keep
 351the Subject: line, like the example above.
 352
 353Checking for patch corruption
 354~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 355Many mailers if not set up properly will corrupt whitespace.  Here are
 356two common types of corruption:
 357
 358* Empty context lines that do not have _any_ whitespace.
 359
 360* Non-empty context lines that have one extra whitespace at the
 361  beginning.
 362
 363One way to test if your MUA is set up correctly is:
 364
 365* Send the patch to yourself, exactly the way you would, except
 366  with To: and Cc: lines that do not contain the list and
 367  maintainer address.
 368
 369* Save that patch to a file in UNIX mailbox format.  Call it a.patch,
 370  say.
 371
 372* Apply it:
 373
 374    $ git fetch <project> master:test-apply
 375    $ git checkout test-apply
 376    $ git reset --hard
 377    $ git am a.patch
 378
 379If it does not apply correctly, there can be various reasons.
 380
 381* The patch itself does not apply cleanly.  That is _bad_ but
 382  does not have much to do with your MUA.  You might want to rebase
 383  the patch with linkgit:git-rebase[1] before regenerating it in
 384  this case.
 385
 386* The MUA corrupted your patch; "am" would complain that
 387  the patch does not apply.  Look in the .git/rebase-apply/ subdirectory and
 388  see what 'patch' file contains and check for the common
 389  corruption patterns mentioned above.
 390
 391* While at it, check the 'info' and 'final-commit' files as well.
 392  If what is in 'final-commit' is not exactly what you would want to
 393  see in the commit log message, it is very likely that the
 394  receiver would end up hand editing the log message when applying
 395  your patch.  Things like "Hi, this is my first patch.\n" in the
 396  patch e-mail should come after the three-dash line that signals
 397  the end of the commit message.
 398
 399MUA-SPECIFIC HINTS
 400------------------
 401Here are some hints on how to successfully submit patches inline using
 402various mailers.
 403
 404GMail
 405~~~~~
 406GMail does not have any way to turn off line wrapping in the web
 407interface, so it will mangle any emails that you send.  You can however
 408use "git send-email" and send your patches through the GMail SMTP server, or
 409use any IMAP email client to connect to the google IMAP server and forward
 410the emails through that.
 411
 412For hints on using 'git send-email' to send your patches through the
 413GMail SMTP server, see the EXAMPLE section of linkgit:git-send-email[1].
 414
 415For hints on submission using the IMAP interface, see the EXAMPLE
 416section of linkgit:git-imap-send[1].
 417
 418Thunderbird
 419~~~~~~~~~~~
 420By default, Thunderbird will both wrap emails as well as flag
 421them as being 'format=flowed', both of which will make the
 422resulting email unusable by Git.
 423
 424There are three different approaches: use an add-on to turn off line wraps,
 425configure Thunderbird to not mangle patches, or use
 426an external editor to keep Thunderbird from mangling the patches.
 427
 428Approach #1 (add-on)
 429^^^^^^^^^^^^^^^^^^^^
 430
 431Install the Toggle Word Wrap add-on that is available from
 432https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/
 433It adds a menu entry "Enable Word Wrap" in the composer's "Options" menu
 434that you can tick off. Now you can compose the message as you otherwise do
 435(cut + paste, 'git format-patch' | 'git imap-send', etc), but you have to
 436insert line breaks manually in any text that you type.
 437
 438Approach #2 (configuration)
 439^^^^^^^^^^^^^^^^^^^^^^^^^^^
 440Three steps:
 441
 4421. Configure your mail server composition as plain text:
 443   Edit...Account Settings...Composition & Addressing,
 444   uncheck "Compose Messages in HTML".
 445
 4462. Configure your general composition window to not wrap.
 447+
 448In Thunderbird 2:
 449Edit..Preferences..Composition, wrap plain text messages at 0
 450+
 451In Thunderbird 3:
 452Edit..Preferences..Advanced..Config Editor.  Search for
 453"mail.wrap_long_lines".
 454Toggle it to make sure it is set to `false`. Also, search for
 455"mailnews.wraplength" and set the value to 0.
 456
 4573. Disable the use of format=flowed:
 458Edit..Preferences..Advanced..Config Editor.  Search for
 459"mailnews.send_plaintext_flowed".
 460Toggle it to make sure it is set to `false`.
 461
 462After that is done, you should be able to compose email as you
 463otherwise would (cut + paste, 'git format-patch' | 'git imap-send', etc),
 464and the patches will not be mangled.
 465
 466Approach #3 (external editor)
 467^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 468
 469The following Thunderbird extensions are needed:
 470AboutConfig from http://aboutconfig.mozdev.org/ and
 471External Editor from http://globs.org/articles.php?lng=en&pg=8
 472
 4731. Prepare the patch as a text file using your method of choice.
 474
 4752. Before opening a compose window, use Edit->Account Settings to
 476   uncheck the "Compose messages in HTML format" setting in the
 477   "Composition & Addressing" panel of the account to be used to
 478   send the patch.
 479
 4803. In the main Thunderbird window, 'before' you open the compose
 481   window for the patch, use Tools->about:config to set the
 482   following to the indicated values:
 483+
 484----------
 485        mailnews.send_plaintext_flowed  => false
 486        mailnews.wraplength             => 0
 487----------
 488
 4894. Open a compose window and click the external editor icon.
 490
 4915. In the external editor window, read in the patch file and exit
 492   the editor normally.
 493
 494Side note: it may be possible to do step 2 with
 495about:config and the following settings but no one's tried yet.
 496
 497----------
 498        mail.html_compose                       => false
 499        mail.identity.default.compose_html      => false
 500        mail.identity.id?.compose_html          => false
 501----------
 502
 503There is a script in contrib/thunderbird-patch-inline which can help
 504you include patches with Thunderbird in an easy way. To use it, do the
 505steps above and then use the script as the external editor.
 506
 507KMail
 508~~~~~
 509This should help you to submit patches inline using KMail.
 510
 5111. Prepare the patch as a text file.
 512
 5132. Click on New Mail.
 514
 5153. Go under "Options" in the Composer window and be sure that
 516   "Word wrap" is not set.
 517
 5184. Use Message -> Insert file... and insert the patch.
 519
 5205. Back in the compose window: add whatever other text you wish to the
 521   message, complete the addressing and subject fields, and press send.
 522
 523
 524EXAMPLES
 525--------
 526
 527* Extract commits between revisions R1 and R2, and apply them on top of
 528the current branch using 'git am' to cherry-pick them:
 529+
 530------------
 531$ git format-patch -k --stdout R1..R2 | git am -3 -k
 532------------
 533
 534* Extract all commits which are in the current branch but not in the
 535origin branch:
 536+
 537------------
 538$ git format-patch origin
 539------------
 540+
 541For each commit a separate file is created in the current directory.
 542
 543* Extract all commits that lead to 'origin' since the inception of the
 544project:
 545+
 546------------
 547$ git format-patch --root origin
 548------------
 549
 550* The same as the previous one:
 551+
 552------------
 553$ git format-patch -M -B origin
 554------------
 555+
 556Additionally, it detects and handles renames and complete rewrites
 557intelligently to produce a renaming patch.  A renaming patch reduces
 558the amount of text output, and generally makes it easier to review.
 559Note that non-Git "patch" programs won't understand renaming patches, so
 560use it only when you know the recipient uses Git to apply your patch.
 561
 562* Extract three topmost commits from the current branch and format them
 563as e-mailable patches:
 564+
 565------------
 566$ git format-patch -3
 567------------
 568
 569SEE ALSO
 570--------
 571linkgit:git-am[1], linkgit:git-send-email[1]
 572
 573GIT
 574---
 575Part of the linkgit:git[1] suite