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