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