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--base=<commit>:: 269 Record the base tree information to identify the state the 270 patch series applies to. See the BASE TREE INFORMATION section 271 below for details. 272 273--root:: 274 Treat the revision argument as a <revision range>, even if it 275 is just a single commit (that would normally be treated as a 276 <since>). Note that root commits included in the specified 277 range are always formatted as creation patches, independently 278 of this flag. 279 280CONFIGURATION 281------------- 282You can specify extra mail header lines to be added to each message, 283defaults for the subject prefix and file suffix, number patches when 284outputting more than one patch, add "To" or "Cc:" headers, configure 285attachments, and sign off patches with configuration variables. 286 287------------ 288[format] 289 headers = "Organization: git-foo\n" 290 subjectPrefix = CHANGE 291 suffix = .txt 292 numbered = auto 293 to = <email> 294 cc = <email> 295 attach [ = mime-boundary-string ] 296 signOff = true 297 coverletter = auto 298------------ 299 300 301DISCUSSION 302---------- 303 304The patch produced by 'git format-patch' is in UNIX mailbox format, 305with a fixed "magic" time stamp to indicate that the file is output 306from format-patch rather than a real mailbox, like so: 307 308------------ 309From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001 310From: Tony Luck <tony.luck@intel.com> 311Date: Tue, 13 Jul 2010 11:42:54 -0700 312Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?= 313 =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?= 314MIME-Version: 1.0 315Content-Type: text/plain; charset=UTF-8 316Content-Transfer-Encoding: 8bit 317 318arch/arm config files were slimmed down using a python script 319(See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment) 320 321Do the same for ia64 so we can have sleek & trim looking 322... 323------------ 324 325Typically it will be placed in a MUA's drafts folder, edited to add 326timely commentary that should not go in the changelog after the three 327dashes, and then sent as a message whose body, in our example, starts 328with "arch/arm config files were...". On the receiving end, readers 329can save interesting patches in a UNIX mailbox and apply them with 330linkgit:git-am[1]. 331 332When a patch is part of an ongoing discussion, the patch generated by 333'git format-patch' can be tweaked to take advantage of the 'git am 334--scissors' feature. After your response to the discussion comes a 335line that consists solely of "`-- >8 --`" (scissors and perforation), 336followed by the patch with unnecessary header fields removed: 337 338------------ 339... 340> So we should do such-and-such. 341 342Makes sense to me. How about this patch? 343 344-- >8 -- 345Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet 346 347arch/arm config files were slimmed down using a python script 348... 349------------ 350 351When sending a patch this way, most often you are sending your own 352patch, so in addition to the "`From $SHA1 $magic_timestamp`" marker you 353should omit `From:` and `Date:` lines from the patch file. The patch 354title is likely to be different from the subject of the discussion the 355patch is in response to, so it is likely that you would want to keep 356the Subject: line, like the example above. 357 358Checking for patch corruption 359~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 360Many mailers if not set up properly will corrupt whitespace. Here are 361two common types of corruption: 362 363* Empty context lines that do not have _any_ whitespace. 364 365* Non-empty context lines that have one extra whitespace at the 366 beginning. 367 368One way to test if your MUA is set up correctly is: 369 370* Send the patch to yourself, exactly the way you would, except 371 with To: and Cc: lines that do not contain the list and 372 maintainer address. 373 374* Save that patch to a file in UNIX mailbox format. Call it a.patch, 375 say. 376 377* Apply it: 378 379 $ git fetch <project> master:test-apply 380 $ git checkout test-apply 381 $ git reset --hard 382 $ git am a.patch 383 384If it does not apply correctly, there can be various reasons. 385 386* The patch itself does not apply cleanly. That is _bad_ but 387 does not have much to do with your MUA. You might want to rebase 388 the patch with linkgit:git-rebase[1] before regenerating it in 389 this case. 390 391* The MUA corrupted your patch; "am" would complain that 392 the patch does not apply. Look in the .git/rebase-apply/ subdirectory and 393 see what 'patch' file contains and check for the common 394 corruption patterns mentioned above. 395 396* While at it, check the 'info' and 'final-commit' files as well. 397 If what is in 'final-commit' is not exactly what you would want to 398 see in the commit log message, it is very likely that the 399 receiver would end up hand editing the log message when applying 400 your patch. Things like "Hi, this is my first patch.\n" in the 401 patch e-mail should come after the three-dash line that signals 402 the end of the commit message. 403 404MUA-SPECIFIC HINTS 405------------------ 406Here are some hints on how to successfully submit patches inline using 407various mailers. 408 409GMail 410~~~~~ 411GMail does not have any way to turn off line wrapping in the web 412interface, so it will mangle any emails that you send. You can however 413use "git send-email" and send your patches through the GMail SMTP server, or 414use any IMAP email client to connect to the google IMAP server and forward 415the emails through that. 416 417For hints on using 'git send-email' to send your patches through the 418GMail SMTP server, see the EXAMPLE section of linkgit:git-send-email[1]. 419 420For hints on submission using the IMAP interface, see the EXAMPLE 421section of linkgit:git-imap-send[1]. 422 423Thunderbird 424~~~~~~~~~~~ 425By default, Thunderbird will both wrap emails as well as flag 426them as being 'format=flowed', both of which will make the 427resulting email unusable by Git. 428 429There are three different approaches: use an add-on to turn off line wraps, 430configure Thunderbird to not mangle patches, or use 431an external editor to keep Thunderbird from mangling the patches. 432 433Approach #1 (add-on) 434^^^^^^^^^^^^^^^^^^^^ 435 436Install the Toggle Word Wrap add-on that is available from 437https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/ 438It adds a menu entry "Enable Word Wrap" in the composer's "Options" menu 439that you can tick off. Now you can compose the message as you otherwise do 440(cut + paste, 'git format-patch' | 'git imap-send', etc), but you have to 441insert line breaks manually in any text that you type. 442 443Approach #2 (configuration) 444^^^^^^^^^^^^^^^^^^^^^^^^^^^ 445Three steps: 446 4471. Configure your mail server composition as plain text: 448 Edit...Account Settings...Composition & Addressing, 449 uncheck "Compose Messages in HTML". 450 4512. Configure your general composition window to not wrap. 452+ 453In Thunderbird 2: 454Edit..Preferences..Composition, wrap plain text messages at 0 455+ 456In Thunderbird 3: 457Edit..Preferences..Advanced..Config Editor. Search for 458"mail.wrap_long_lines". 459Toggle it to make sure it is set to `false`. Also, search for 460"mailnews.wraplength" and set the value to 0. 461 4623. Disable the use of format=flowed: 463Edit..Preferences..Advanced..Config Editor. Search for 464"mailnews.send_plaintext_flowed". 465Toggle it to make sure it is set to `false`. 466 467After that is done, you should be able to compose email as you 468otherwise would (cut + paste, 'git format-patch' | 'git imap-send', etc), 469and the patches will not be mangled. 470 471Approach #3 (external editor) 472^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 473 474The following Thunderbird extensions are needed: 475AboutConfig from http://aboutconfig.mozdev.org/ and 476External Editor from http://globs.org/articles.php?lng=en&pg=8 477 4781. Prepare the patch as a text file using your method of choice. 479 4802. Before opening a compose window, use Edit->Account Settings to 481 uncheck the "Compose messages in HTML format" setting in the 482 "Composition & Addressing" panel of the account to be used to 483 send the patch. 484 4853. In the main Thunderbird window, 'before' you open the compose 486 window for the patch, use Tools->about:config to set the 487 following to the indicated values: 488+ 489---------- 490 mailnews.send_plaintext_flowed => false 491 mailnews.wraplength => 0 492---------- 493 4944. Open a compose window and click the external editor icon. 495 4965. In the external editor window, read in the patch file and exit 497 the editor normally. 498 499Side note: it may be possible to do step 2 with 500about:config and the following settings but no one's tried yet. 501 502---------- 503 mail.html_compose => false 504 mail.identity.default.compose_html => false 505 mail.identity.id?.compose_html => false 506---------- 507 508There is a script in contrib/thunderbird-patch-inline which can help 509you include patches with Thunderbird in an easy way. To use it, do the 510steps above and then use the script as the external editor. 511 512KMail 513~~~~~ 514This should help you to submit patches inline using KMail. 515 5161. Prepare the patch as a text file. 517 5182. Click on New Mail. 519 5203. Go under "Options" in the Composer window and be sure that 521 "Word wrap" is not set. 522 5234. Use Message -> Insert file... and insert the patch. 524 5255. Back in the compose window: add whatever other text you wish to the 526 message, complete the addressing and subject fields, and press send. 527 528BASE TREE INFORMATION 529--------------------- 530 531The base tree information block is used for maintainers or third party 532testers to know the exact state the patch series applies to. It consists 533of the 'base commit', which is a well-known commit that is part of the 534stable part of the project history everybody else works off of, and zero 535or more 'prerequisite patches', which are well-known patches in flight 536that is not yet part of the 'base commit' that need to be applied on top 537of 'base commit' in topological order before the patches can be applied. 538 539The 'base commit' is shown as "base-commit: " followed by the 40-hex of 540the commit object name. A 'prerequisite patch' is shown as 541"prerequisite-patch-id: " followed by the 40-hex 'patch id', which can 542be obtained by passing the patch through the `git patch-id --stable` 543command. 544 545Imagine that on top of the public commit P, you applied well-known 546patches X, Y and Z from somebody else, and then built your three-patch 547series A, B, C, the history would be like: 548 549................................................ 550---P---X---Y---Z---A---B---C 551................................................ 552 553With `git format-patch --base=P -3 C` (or variants thereof, e.g. with 554`--cover-letter` of using `Z..C` instead of `-3 C` to specify the 555range), the base tree information block is shown at the end of the 556first message the command outputs (either the first patch, or the 557cover letter), like this: 558 559------------ 560base-commit: P 561prerequisite-patch-id: X 562prerequisite-patch-id: Y 563prerequisite-patch-id: Z 564------------ 565 566For non-linear topology, such as 567 568................................................ 569---P---X---A---M---C 570 \ / 571 Y---Z---B 572................................................ 573 574You can also use `git format-patch --base=P -3 C` to generate patches 575for A, B and C, and the identifiers for P, X, Y, Z are appended at the 576end of the first message. 577 578If set `--base=auto` in cmdline, it will track base commit automatically, 579the base commit will be the merge base of tip commit of the remote-tracking 580branch and revision-range specified in cmdline. 581For a local branch, you need to track a remote branch by `git branch 582--set-upstream-to` before using this option. 583 584EXAMPLES 585-------- 586 587* Extract commits between revisions R1 and R2, and apply them on top of 588the current branch using 'git am' to cherry-pick them: 589+ 590------------ 591$ git format-patch -k --stdout R1..R2 | git am -3 -k 592------------ 593 594* Extract all commits which are in the current branch but not in the 595origin branch: 596+ 597------------ 598$ git format-patch origin 599------------ 600+ 601For each commit a separate file is created in the current directory. 602 603* Extract all commits that lead to 'origin' since the inception of the 604project: 605+ 606------------ 607$ git format-patch --root origin 608------------ 609 610* The same as the previous one: 611+ 612------------ 613$ git format-patch -M -B origin 614------------ 615+ 616Additionally, it detects and handles renames and complete rewrites 617intelligently to produce a renaming patch. A renaming patch reduces 618the amount of text output, and generally makes it easier to review. 619Note that non-Git "patch" programs won't understand renaming patches, so 620use it only when you know the recipient uses Git to apply your patch. 621 622* Extract three topmost commits from the current branch and format them 623as e-mailable patches: 624+ 625------------ 626$ git format-patch -3 627------------ 628 629SEE ALSO 630-------- 631linkgit:git-am[1], linkgit:git-send-email[1] 632 633GIT 634--- 635Part of the linkgit:git[1] suite