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