1GIT-FORMAT-PATCH(1)               Git Manual               GIT-FORMAT-PATCH(1)
2
3
4

NAME

6       git-format-patch - Prepare patches for e-mail submission
7

SYNOPSIS

9       git format-patch [-k] [(-o|--output-directory) <dir> | --stdout]
10                          [--no-thread | --thread[=<style>]]
11                          [(--attach|--inline)[=<boundary>] | --no-attach]
12                          [-s | --signoff]
13                          [--signature=<signature> | --no-signature]
14                          [--signature-file=<file>]
15                          [-n | --numbered | -N | --no-numbered]
16                          [--start-number <n>] [--numbered-files]
17                          [--in-reply-to=<message id>] [--suffix=.<sfx>]
18                          [--ignore-if-in-upstream]
19                          [--cover-from-description=<mode>]
20                          [--rfc] [--subject-prefix=<subject prefix>]
21                          [(--reroll-count|-v) <n>]
22                          [--to=<email>] [--cc=<email>]
23                          [--[no-]cover-letter] [--quiet]
24                          [--[no-]encode-email-headers]
25                          [--no-notes | --notes[=<ref>]]
26                          [--interdiff=<previous>]
27                          [--range-diff=<previous> [--creation-factor=<percent>]]
28                          [--filename-max-length=<n>]
29                          [--progress]
30                          [<common diff options>]
31                          [ <since> | <revision range> ]
32

DESCRIPTION

34       Prepare each commit with its patch in one file per commit, formatted to
35       resemble UNIX mailbox format. The output of this command is convenient
36       for e-mail submission or for use with git am.
37
38       There are two ways to specify which commits to operate on.
39
40        1. A single commit, <since>, specifies that the commits leading to the
41           tip of the current branch that are not in the history that leads to
42           the <since> to be output.
43
44        2. Generic <revision range> expression (see "SPECIFYING REVISIONS"
45           section in gitrevisions(7)) means the commits in the specified
46           range.
47
48       The first rule takes precedence in the case of a single <commit>. To
49       apply the second rule, i.e., format everything since the beginning of
50       history up until <commit>, use the --root option: git format-patch
51       --root <commit>. If you want to format only <commit> itself, you can do
52       this with git format-patch -1 <commit>.
53
54       By default, each output file is numbered sequentially from 1, and uses
55       the first line of the commit message (massaged for pathname safety) as
56       the filename. With the --numbered-files option, the output file names
57       will only be numbers, without the first line of the commit appended.
58       The names of the output files are printed to standard output, unless
59       the --stdout option is specified.
60
61       If -o is specified, output files are created in <dir>. Otherwise they
62       are created in the current working directory. The default path can be
63       set with the format.outputDirectory configuration option. The -o option
64       takes precedence over format.outputDirectory. To store patches in the
65       current working directory even when format.outputDirectory points
66       elsewhere, use -o .. All directory components will be created.
67
68       By default, the subject of a single patch is "[PATCH] " followed by the
69       concatenation of lines from the commit message up to the first blank
70       line (see the DISCUSSION section of git-commit(1)).
71
72       When 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. To
74       omit patch numbers from the subject, use -N.
75
76       If given --thread, git-format-patch will generate In-Reply-To and
77       References headers to make the second and subsequent patch mails appear
78       as replies to the first mail; this also generates a Message-Id header
79       to reference.
80

OPTIONS

82       -p, --no-stat
83           Generate plain patches without any diffstats.
84
85       -U<n>, --unified=<n>
86           Generate diffs with <n> lines of context instead of the usual
87           three.
88
89       --output=<file>
90           Output to a specific file instead of stdout.
91
92       --output-indicator-new=<char>, --output-indicator-old=<char>,
93       --output-indicator-context=<char>
94           Specify the character used to indicate new, old or context lines in
95           the generated patch. Normally they are +, - and ' ' respectively.
96
97       --indent-heuristic
98           Enable the heuristic that shifts diff hunk boundaries to make
99           patches easier to read. This is the default.
100
101       --no-indent-heuristic
102           Disable the indent heuristic.
103
104       --minimal
105           Spend extra time to make sure the smallest possible diff is
106           produced.
107
108       --patience
109           Generate a diff using the "patience diff" algorithm.
110
111       --histogram
112           Generate a diff using the "histogram diff" algorithm.
113
114       --anchored=<text>
115           Generate a diff using the "anchored diff" algorithm.
116
117           This option may be specified more than once.
118
119           If a line exists in both the source and destination, exists only
120           once, and starts with this text, this algorithm attempts to prevent
121           it from appearing as a deletion or addition in the output. It uses
122           the "patience diff" algorithm internally.
123
124       --diff-algorithm={patience|minimal|histogram|myers}
125           Choose a diff algorithm. The variants are as follows:
126
127           default, myers
128               The basic greedy diff algorithm. Currently, this is the
129               default.
130
131           minimal
132               Spend extra time to make sure the smallest possible diff is
133               produced.
134
135           patience
136               Use "patience diff" algorithm when generating patches.
137
138           histogram
139               This algorithm extends the patience algorithm to "support
140               low-occurrence common elements".
141
142           For instance, if you configured the diff.algorithm variable to a
143           non-default value and want to use the default one, then you have to
144           use --diff-algorithm=default option.
145
146       --stat[=<width>[,<name-width>[,<count>]]]
147           Generate a diffstat. By default, as much space as necessary will be
148           used for the filename part, and the rest for the graph part.
149           Maximum width defaults to terminal width, or 80 columns if not
150           connected to a terminal, and can be overridden by <width>. The
151           width of the filename part can be limited by giving another width
152           <name-width> after a comma. The width of the graph part can be
153           limited by using --stat-graph-width=<width> (affects all commands
154           generating a stat graph) or by setting diff.statGraphWidth=<width>
155           (does not affect git format-patch). By giving a third parameter
156           <count>, you can limit the output to the first <count> lines,
157           followed by ...  if there are more.
158
159           These parameters can also be set individually with
160           --stat-width=<width>, --stat-name-width=<name-width> and
161           --stat-count=<count>.
162
163       --compact-summary
164           Output a condensed summary of extended header information such as
165           file creations or deletions ("new" or "gone", optionally "+l" if
166           it’s a symlink) and mode changes ("+x" or "-x" for adding or
167           removing executable bit respectively) in diffstat. The information
168           is put between the filename part and the graph part. Implies
169           --stat.
170
171       --numstat
172           Similar to --stat, but shows number of added and deleted lines in
173           decimal notation and pathname without abbreviation, to make it more
174           machine friendly. For binary files, outputs two - instead of saying
175           0 0.
176
177       --shortstat
178           Output only the last line of the --stat format containing total
179           number of modified files, as well as number of added and deleted
180           lines.
181
182       -X[<param1,param2,...>], --dirstat[=<param1,param2,...>]
183           Output the distribution of relative amount of changes for each
184           sub-directory. The behavior of --dirstat can be customized by
185           passing it a comma separated list of parameters. The defaults are
186           controlled by the diff.dirstat configuration variable (see git-
187           config(1)). The following parameters are available:
188
189           changes
190               Compute the dirstat numbers by counting the lines that have
191               been removed from the source, or added to the destination. This
192               ignores the amount of pure code movements within a file. In
193               other words, rearranging lines in a file is not counted as much
194               as other changes. This is the default behavior when no
195               parameter is given.
196
197           lines
198               Compute the dirstat numbers by doing the regular line-based
199               diff analysis, and summing the removed/added line counts. (For
200               binary files, count 64-byte chunks instead, since binary files
201               have no natural concept of lines). This is a more expensive
202               --dirstat behavior than the changes behavior, but it does count
203               rearranged lines within a file as much as other changes. The
204               resulting output is consistent with what you get from the other
205               --*stat options.
206
207           files
208               Compute the dirstat numbers by counting the number of files
209               changed. Each changed file counts equally in the dirstat
210               analysis. This is the computationally cheapest --dirstat
211               behavior, since it does not have to look at the file contents
212               at all.
213
214           cumulative
215               Count changes in a child directory for the parent directory as
216               well. Note that when using cumulative, the sum of the
217               percentages reported may exceed 100%. The default
218               (non-cumulative) behavior can be specified with the
219               noncumulative parameter.
220
221           <limit>
222               An integer parameter specifies a cut-off percent (3% by
223               default). Directories contributing less than this percentage of
224               the changes are not shown in the output.
225
226           Example: The following will count changed files, while ignoring
227           directories with less than 10% of the total amount of changed
228           files, and accumulating child directory counts in the parent
229           directories: --dirstat=files,10,cumulative.
230
231       --cumulative
232           Synonym for --dirstat=cumulative
233
234       --dirstat-by-file[=<param1,param2>...]
235           Synonym for --dirstat=files,param1,param2...
236
237       --summary
238           Output a condensed summary of extended header information such as
239           creations, renames and mode changes.
240
241       --no-renames
242           Turn off rename detection, even when the configuration file gives
243           the default to do so.
244
245       --[no-]rename-empty
246           Whether to use empty blobs as rename source.
247
248       --full-index
249           Instead of the first handful of characters, show the full pre- and
250           post-image blob object names on the "index" line when generating
251           patch format output.
252
253       --binary
254           In addition to --full-index, output a binary diff that can be
255           applied with git-apply.
256
257       --abbrev[=<n>]
258           Instead of showing the full 40-byte hexadecimal object name in
259           diff-raw format output and diff-tree header lines, show the
260           shortest prefix that is at least <n> hexdigits long that uniquely
261           refers the object. In diff-patch output format, --full-index takes
262           higher precedence, i.e. if --full-index is specified, full blob
263           names will be shown regardless of --abbrev. Non default number of
264           digits can be specified with --abbrev=<n>.
265
266       -B[<n>][/<m>], --break-rewrites[=[<n>][/<m>]]
267           Break complete rewrite changes into pairs of delete and create.
268           This serves two purposes:
269
270           It affects the way a change that amounts to a total rewrite of a
271           file not as a series of deletion and insertion mixed together with
272           a very few lines that happen to match textually as the context, but
273           as a single deletion of everything old followed by a single
274           insertion of everything new, and the number m controls this aspect
275           of the -B option (defaults to 60%).  -B/70% specifies that less
276           than 30% of the original should remain in the result for Git to
277           consider it a total rewrite (i.e. otherwise the resulting patch
278           will be a series of deletion and insertion mixed together with
279           context lines).
280
281           When used with -M, a totally-rewritten file is also considered as
282           the source of a rename (usually -M only considers a file that
283           disappeared as the source of a rename), and the number n controls
284           this aspect of the -B option (defaults to 50%).  -B20% specifies
285           that a change with addition and deletion compared to 20% or more of
286           the file’s size are eligible for being picked up as a possible
287           source of a rename to another file.
288
289       -M[<n>], --find-renames[=<n>]
290           Detect renames. If n is specified, it is a threshold on the
291           similarity index (i.e. amount of addition/deletions compared to the
292           file’s size). For example, -M90% means Git should consider a
293           delete/add pair to be a rename if more than 90% of the file hasn’t
294           changed. Without a % sign, the number is to be read as a fraction,
295           with a decimal point before it. I.e., -M5 becomes 0.5, and is thus
296           the same as -M50%. Similarly, -M05 is the same as -M5%. To limit
297           detection to exact renames, use -M100%. The default similarity
298           index is 50%.
299
300       -C[<n>], --find-copies[=<n>]
301           Detect copies as well as renames. See also --find-copies-harder. If
302           n is specified, it has the same meaning as for -M<n>.
303
304       --find-copies-harder
305           For performance reasons, by default, -C option finds copies only if
306           the original file of the copy was modified in the same changeset.
307           This flag makes the command inspect unmodified files as candidates
308           for the source of copy. This is a very expensive operation for
309           large projects, so use it with caution. Giving more than one -C
310           option has the same effect.
311
312       -D, --irreversible-delete
313           Omit the preimage for deletes, i.e. print only the header but not
314           the diff between the preimage and /dev/null. The resulting patch is
315           not meant to be applied with patch or git apply; this is solely for
316           people who want to just concentrate on reviewing the text after the
317           change. In addition, the output obviously lacks enough information
318           to apply such a patch in reverse, even manually, hence the name of
319           the option.
320
321           When used together with -B, omit also the preimage in the deletion
322           part of a delete/create pair.
323
324       -l<num>
325           The -M and -C options require O(n^2) processing time where n is the
326           number of potential rename/copy targets. This option prevents
327           rename/copy detection from running if the number of rename/copy
328           targets exceeds the specified number.
329
330       -O<orderfile>
331           Control the order in which files appear in the output. This
332           overrides the diff.orderFile configuration variable (see git-
333           config(1)). To cancel diff.orderFile, use -O/dev/null.
334
335           The output order is determined by the order of glob patterns in
336           <orderfile>. All files with pathnames that match the first pattern
337           are output first, all files with pathnames that match the second
338           pattern (but not the first) are output next, and so on. All files
339           with pathnames that do not match any pattern are output last, as if
340           there was an implicit match-all pattern at the end of the file. If
341           multiple pathnames have the same rank (they match the same pattern
342           but no earlier patterns), their output order relative to each other
343           is the normal order.
344
345           <orderfile> is parsed as follows:
346
347           •   Blank lines are ignored, so they can be used as separators for
348               readability.
349
350           •   Lines starting with a hash ("#") are ignored, so they can be
351               used for comments. Add a backslash ("\") to the beginning of
352               the pattern if it starts with a hash.
353
354           •   Each other line contains a single pattern.
355
356           Patterns have the same syntax and semantics as patterns used for
357           fnmatch(3) without the FNM_PATHNAME flag, except a pathname also
358           matches a pattern if removing any number of the final pathname
359           components matches the pattern. For example, the pattern "foo*bar"
360           matches "fooasdfbar" and "foo/bar/baz/asdf" but not "foobarx".
361
362       --skip-to=<file>, --rotate-to=<file>
363           Discard the files before the named <file> from the output (i.e.
364           skip to), or move them to the end of the output (i.e.  rotate to).
365           These were invented primarily for use of the git difftool command,
366           and may not be very useful otherwise.
367
368       --relative[=<path>], --no-relative
369           When run from a subdirectory of the project, it can be told to
370           exclude changes outside the directory and show pathnames relative
371           to it with this option. When you are not in a subdirectory (e.g. in
372           a bare repository), you can name which subdirectory to make the
373           output relative to by giving a <path> as an argument.
374           --no-relative can be used to countermand both diff.relative config
375           option and previous --relative.
376
377       -a, --text
378           Treat all files as text.
379
380       --ignore-cr-at-eol
381           Ignore carriage-return at the end of line when doing a comparison.
382
383       --ignore-space-at-eol
384           Ignore changes in whitespace at EOL.
385
386       -b, --ignore-space-change
387           Ignore changes in amount of whitespace. This ignores whitespace at
388           line end, and considers all other sequences of one or more
389           whitespace characters to be equivalent.
390
391       -w, --ignore-all-space
392           Ignore whitespace when comparing lines. This ignores differences
393           even if one line has whitespace where the other line has none.
394
395       --ignore-blank-lines
396           Ignore changes whose lines are all blank.
397
398       -I<regex>, --ignore-matching-lines=<regex>
399           Ignore changes whose all lines match <regex>. This option may be
400           specified more than once.
401
402       --inter-hunk-context=<lines>
403           Show the context between diff hunks, up to the specified number of
404           lines, thereby fusing hunks that are close to each other. Defaults
405           to diff.interHunkContext or 0 if the config option is unset.
406
407       -W, --function-context
408           Show whole function as context lines for each change. The function
409           names are determined in the same way as git diff works out patch
410           hunk headers (see Defining a custom hunk-header in
411           gitattributes(5)).
412
413       --ext-diff
414           Allow an external diff helper to be executed. If you set an
415           external diff driver with gitattributes(5), you need to use this
416           option with git-log(1) and friends.
417
418       --no-ext-diff
419           Disallow external diff drivers.
420
421       --textconv, --no-textconv
422           Allow (or disallow) external text conversion filters to be run when
423           comparing binary files. See gitattributes(5) for details. Because
424           textconv filters are typically a one-way conversion, the resulting
425           diff is suitable for human consumption, but cannot be applied. For
426           this reason, textconv filters are enabled by default only for git-
427           diff(1) and git-log(1), but not for git-format-patch(1) or diff
428           plumbing commands.
429
430       --ignore-submodules[=<when>]
431           Ignore changes to submodules in the diff generation. <when> can be
432           either "none", "untracked", "dirty" or "all", which is the default.
433           Using "none" will consider the submodule modified when it either
434           contains untracked or modified files or its HEAD differs from the
435           commit recorded in the superproject and can be used to override any
436           settings of the ignore option in git-config(1) or gitmodules(5).
437           When "untracked" is used submodules are not considered dirty when
438           they only contain untracked content (but they are still scanned for
439           modified content). Using "dirty" ignores all changes to the work
440           tree of submodules, only changes to the commits stored in the
441           superproject are shown (this was the behavior until 1.7.0). Using
442           "all" hides all changes to submodules.
443
444       --src-prefix=<prefix>
445           Show the given source prefix instead of "a/".
446
447       --dst-prefix=<prefix>
448           Show the given destination prefix instead of "b/".
449
450       --no-prefix
451           Do not show any source or destination prefix.
452
453       --line-prefix=<prefix>
454           Prepend an additional prefix to every line of output.
455
456       --ita-invisible-in-index
457           By default entries added by "git add -N" appear as an existing
458           empty file in "git diff" and a new file in "git diff --cached".
459           This option makes the entry appear as a new file in "git diff" and
460           non-existent in "git diff --cached". This option could be reverted
461           with --ita-visible-in-index. Both options are experimental and
462           could be removed in future.
463
464       For more detailed explanation on these common options, see also
465       gitdiffcore(7).
466
467       -<n>
468           Prepare patches from the topmost <n> commits.
469
470       -o <dir>, --output-directory <dir>
471           Use <dir> to store the resulting files, instead of the current
472           working directory.
473
474       -n, --numbered
475           Name output in [PATCH n/m] format, even with a single patch.
476
477       -N, --no-numbered
478           Name output in [PATCH] format.
479
480       --start-number <n>
481           Start numbering the patches at <n> instead of 1.
482
483       --numbered-files
484           Output file names will be a simple number sequence without the
485           default first line of the commit appended.
486
487       -k, --keep-subject
488           Do not strip/add [PATCH] from the first line of the commit log
489           message.
490
491       -s, --signoff
492           Add a Signed-off-by trailer to the commit message, using the
493           committer identity of yourself. See the signoff option in git-
494           commit(1) for more information.
495
496       --stdout
497           Print all commits to the standard output in mbox format, instead of
498           creating a file for each one.
499
500       --attach[=<boundary>]
501           Create multipart/mixed attachment, the first part of which is the
502           commit message and the patch itself in the second part, with
503           Content-Disposition: attachment.
504
505       --no-attach
506           Disable the creation of an attachment, overriding the configuration
507           setting.
508
509       --inline[=<boundary>]
510           Create multipart/mixed attachment, the first part of which is the
511           commit message and the patch itself in the second part, with
512           Content-Disposition: inline.
513
514       --thread[=<style>], --no-thread
515           Controls addition of In-Reply-To and References headers to make the
516           second and subsequent mails appear as replies to the first. Also
517           controls generation of the Message-Id header to reference.
518
519           The optional <style> argument can be either shallow or deep.
520           shallow threading makes every mail a reply to the head of the
521           series, where the head is chosen from the cover letter, the
522           --in-reply-to, and the first patch mail, in this order.  deep
523           threading makes every mail a reply to the previous one.
524
525           The default is --no-thread, unless the format.thread configuration
526           is set. If --thread is specified without a style, it defaults to
527           the style specified by format.thread if any, or else shallow.
528
529           Beware that the default for git send-email is to thread emails
530           itself. If you want git format-patch to take care of threading, you
531           will want to ensure that threading is disabled for git send-email.
532
533       --in-reply-to=<message id>
534           Make the first mail (or all the mails with --no-thread) appear as a
535           reply to the given <message id>, which avoids breaking threads to
536           provide a new patch series.
537
538       --ignore-if-in-upstream
539           Do not include a patch that matches a commit in <until>..<since>.
540           This will examine all patches reachable from <since> but not from
541           <until> and compare them with the patches being generated, and any
542           patch that matches is ignored.
543
544       --cover-from-description=<mode>
545           Controls which parts of the cover letter will be automatically
546           populated using the branch’s description.
547
548           If <mode> is message or default, the cover letter subject will be
549           populated with placeholder text. The body of the cover letter will
550           be populated with the branch’s description. This is the default
551           mode when no configuration nor command line option is specified.
552
553           If <mode> is subject, the first paragraph of the branch description
554           will populate the cover letter subject. The remainder of the
555           description will populate the body of the cover letter.
556
557           If <mode> is auto, if the first paragraph of the branch description
558           is greater than 100 bytes, then the mode will be message, otherwise
559           subject will be used.
560
561           If <mode> is none, both the cover letter subject and body will be
562           populated with placeholder text.
563
564       --subject-prefix=<subject prefix>
565           Instead of the standard [PATCH] prefix in the subject line, instead
566           use [<subject prefix>]. This allows for useful naming of a patch
567           series, and can be combined with the --numbered option.
568
569       --filename-max-length=<n>
570           Instead of the standard 64 bytes, chomp the generated output
571           filenames at around <n> bytes (too short a value will be silently
572           raised to a reasonable length). Defaults to the value of the
573           format.filenameMaxLength configuration variable, or 64 if
574           unconfigured.
575
576       --rfc
577           Alias for --subject-prefix="RFC PATCH". RFC means "Request For
578           Comments"; use this when sending an experimental patch for
579           discussion rather than application.
580
581       -v <n>, --reroll-count=<n>
582           Mark the series as the <n>-th iteration of the topic. The output
583           filenames have v<n> prepended to them, and the subject prefix
584           ("PATCH" by default, but configurable via the --subject-prefix
585           option) has ` v<n>` appended to it. E.g.  --reroll-count=4 may
586           produce v4-0001-add-makefile.patch file that has "Subject: [PATCH
587           v4 1/20] Add makefile" in it.
588
589       --to=<email>
590           Add a To: header to the email headers. This is in addition to any
591           configured headers, and may be used multiple times. The negated
592           form --no-to discards all To: headers added so far (from config or
593           command line).
594
595       --cc=<email>
596           Add a Cc: header to the email headers. This is in addition to any
597           configured headers, and may be used multiple times. The negated
598           form --no-cc discards all Cc: headers added so far (from config or
599           command line).
600
601       --from, --from=<ident>
602           Use ident in the From: header of each commit email. If the author
603           ident of the commit is not textually identical to the provided
604           ident, place a From: header in the body of the message with the
605           original author. If no ident is given, use the committer ident.
606
607           Note that this option is only useful if you are actually sending
608           the emails and want to identify yourself as the sender, but retain
609           the original author (and git am will correctly pick up the in-body
610           header). Note also that git send-email already handles this
611           transformation for you, and this option should not be used if you
612           are feeding the result to git send-email.
613
614       --add-header=<header>
615           Add an arbitrary header to the email headers. This is in addition
616           to any configured headers, and may be used multiple times. For
617           example, --add-header="Organization: git-foo". The negated form
618           --no-add-header discards all (To:, Cc:, and custom) headers added
619           so far from config or command line.
620
621       --[no-]cover-letter
622           In addition to the patches, generate a cover letter file containing
623           the branch description, shortlog and the overall diffstat. You can
624           fill in a description in the file before sending it out.
625
626       --encode-email-headers, --no-encode-email-headers
627           Encode email headers that have non-ASCII characters with
628           "Q-encoding" (described in RFC 2047), instead of outputting the
629           headers verbatim. Defaults to the value of the
630           format.encodeEmailHeaders configuration variable.
631
632       --interdiff=<previous>
633           As a reviewer aid, insert an interdiff into the cover letter, or as
634           commentary of the lone patch of a 1-patch series, showing the
635           differences between the previous version of the patch series and
636           the series currently being formatted.  previous is a single
637           revision naming the tip of the previous series which shares a
638           common base with the series being formatted (for example git
639           format-patch --cover-letter --interdiff=feature/v1 -3 feature/v2).
640
641       --range-diff=<previous>
642           As a reviewer aid, insert a range-diff (see git-range-diff(1)) into
643           the cover letter, or as commentary of the lone patch of a 1-patch
644           series, showing the differences between the previous version of the
645           patch series and the series currently being formatted.  previous
646           can be a single revision naming the tip of the previous series if
647           it shares a common base with the series being formatted (for
648           example git format-patch --cover-letter --range-diff=feature/v1 -3
649           feature/v2), or a revision range if the two versions of the series
650           are disjoint (for example git format-patch --cover-letter
651           --range-diff=feature/v1~3..feature/v1 -3 feature/v2).
652
653           Note that diff options passed to the command affect how the primary
654           product of format-patch is generated, and they are not passed to
655           the underlying range-diff machinery used to generate the
656           cover-letter material (this may change in the future).
657
658       --creation-factor=<percent>
659           Used with --range-diff, tweak the heuristic which matches up
660           commits between the previous and current series of patches by
661           adjusting the creation/deletion cost fudge factor. See git-range-
662           diff(1)) for details.
663
664       --notes[=<ref>], --no-notes
665           Append the notes (see git-notes(1)) for the commit after the
666           three-dash line.
667
668           The expected use case of this is to write supporting explanation
669           for the commit that does not belong to the commit log message
670           proper, and include it with the patch submission. While one can
671           simply write these explanations after format-patch has run but
672           before sending, keeping them as Git notes allows them to be
673           maintained between versions of the patch series (but see the
674           discussion of the notes.rewrite configuration options in git-
675           notes(1) to use this workflow).
676
677           The default is --no-notes, unless the format.notes configuration is
678           set.
679
680       --[no-]signature=<signature>
681           Add a signature to each message produced. Per RFC 3676 the
682           signature is separated from the body by a line with '-- ' on it. If
683           the signature option is omitted the signature defaults to the Git
684           version number.
685
686       --signature-file=<file>
687           Works just like --signature except the signature is read from a
688           file.
689
690       --suffix=.<sfx>
691           Instead of using .patch as the suffix for generated filenames, use
692           specified suffix. A common alternative is --suffix=.txt. Leaving
693           this empty will remove the .patch suffix.
694
695           Note that the leading character does not have to be a dot; for
696           example, you can use --suffix=-patch to get
697           0001-description-of-my-change-patch.
698
699       -q, --quiet
700           Do not print the names of the generated files to standard output.
701
702       --no-binary
703           Do not output contents of changes in binary files, instead display
704           a notice that those files changed. Patches generated using this
705           option cannot be applied properly, but they are still useful for
706           code review.
707
708       --zero-commit
709           Output an all-zero hash in each patch’s From header instead of the
710           hash of the commit.
711
712       --[no-]base[=<commit>]
713           Record the base tree information to identify the state the patch
714           series applies to. See the BASE TREE INFORMATION section below for
715           details. If <commit> is "auto", a base commit is automatically
716           chosen. The --no-base option overrides a format.useAutoBase
717           configuration.
718
719       --root
720           Treat the revision argument as a <revision range>, even if it is
721           just a single commit (that would normally be treated as a <since>).
722           Note that root commits included in the specified range are always
723           formatted as creation patches, independently of this flag.
724
725       --progress
726           Show progress reports on stderr as patches are generated.
727

CONFIGURATION

729       You can specify extra mail header lines to be added to each message,
730       defaults for the subject prefix and file suffix, number patches when
731       outputting more than one patch, add "To:" or "Cc:" headers, configure
732       attachments, change the patch output directory, and sign off patches
733       with configuration variables.
734
735           [format]
736                   headers = "Organization: git-foo\n"
737                   subjectPrefix = CHANGE
738                   suffix = .txt
739                   numbered = auto
740                   to = <email>
741                   cc = <email>
742                   attach [ = mime-boundary-string ]
743                   signOff = true
744                   outputDirectory = <directory>
745                   coverLetter = auto
746                   coverFromDescription = auto
747

DISCUSSION

749       The patch produced by git format-patch is in UNIX mailbox format, with
750       a fixed "magic" time stamp to indicate that the file is output from
751       format-patch rather than a real mailbox, like so:
752
753           From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
754           From: Tony Luck <tony.luck@intel.com>
755           Date: Tue, 13 Jul 2010 11:42:54 -0700
756           Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
757            =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
758           MIME-Version: 1.0
759           Content-Type: text/plain; charset=UTF-8
760           Content-Transfer-Encoding: 8bit
761
762           arch/arm config files were slimmed down using a python script
763           (See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment)
764
765           Do the same for ia64 so we can have sleek & trim looking
766           ...
767
768       Typically it will be placed in a MUA’s drafts folder, edited to add
769       timely commentary that should not go in the changelog after the three
770       dashes, and then sent as a message whose body, in our example, starts
771       with "arch/arm config files were...". On the receiving end, readers can
772       save interesting patches in a UNIX mailbox and apply them with git-
773       am(1).
774
775       When a patch is part of an ongoing discussion, the patch generated by
776       git format-patch can be tweaked to take advantage of the git am
777       --scissors feature. After your response to the discussion comes a line
778       that consists solely of "-- >8 --" (scissors and perforation), followed
779       by the patch with unnecessary header fields removed:
780
781           ...
782           > So we should do such-and-such.
783
784           Makes sense to me.  How about this patch?
785
786           -- >8 --
787           Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet
788
789           arch/arm config files were slimmed down using a python script
790           ...
791
792       When sending a patch this way, most often you are sending your own
793       patch, so in addition to the "From $SHA1 $magic_timestamp" marker you
794       should omit From: and Date: lines from the patch file. The patch title
795       is likely to be different from the subject of the discussion the patch
796       is in response to, so it is likely that you would want to keep the
797       Subject: line, like the example above.
798
799   Checking for patch corruption
800       Many mailers if not set up properly will corrupt whitespace. Here are
801       two common types of corruption:
802
803       •   Empty context lines that do not have any whitespace.
804
805       •   Non-empty context lines that have one extra whitespace at the
806           beginning.
807
808       One way to test if your MUA is set up correctly is:
809
810       •   Send the patch to yourself, exactly the way you would, except with
811           To: and Cc: lines that do not contain the list and maintainer
812           address.
813
814       •   Save that patch to a file in UNIX mailbox format. Call it a.patch,
815           say.
816
817       •   Apply it:
818
819               $ git fetch <project> master:test-apply
820               $ git switch test-apply
821               $ git restore --source=HEAD --staged --worktree :/
822               $ git am a.patch
823
824       If it does not apply correctly, there can be various reasons.
825
826       •   The patch itself does not apply cleanly. That is bad but does not
827           have much to do with your MUA. You might want to rebase the patch
828           with git-rebase(1) before regenerating it in this case.
829
830       •   The MUA corrupted your patch; "am" would complain that the patch
831           does not apply. Look in the .git/rebase-apply/ subdirectory and see
832           what patch file contains and check for the common corruption
833           patterns mentioned above.
834
835       •   While at it, check the info and final-commit files as well. If what
836           is in final-commit is not exactly what you would want to see in the
837           commit log message, it is very likely that the receiver would end
838           up hand editing the log message when applying your patch. Things
839           like "Hi, this is my first patch.\n" in the patch e-mail should
840           come after the three-dash line that signals the end of the commit
841           message.
842

MUA-SPECIFIC HINTS

844       Here are some hints on how to successfully submit patches inline using
845       various mailers.
846
847   GMail
848       GMail does not have any way to turn off line wrapping in the web
849       interface, so it will mangle any emails that you send. You can however
850       use "git send-email" and send your patches through the GMail SMTP
851       server, or use any IMAP email client to connect to the google IMAP
852       server and forward the emails through that.
853
854       For hints on using git send-email to send your patches through the
855       GMail SMTP server, see the EXAMPLE section of git-send-email(1).
856
857       For hints on submission using the IMAP interface, see the EXAMPLE
858       section of git-imap-send(1).
859
860   Thunderbird
861       By default, Thunderbird will both wrap emails as well as flag them as
862       being format=flowed, both of which will make the resulting email
863       unusable by Git.
864
865       There are three different approaches: use an add-on to turn off line
866       wraps, configure Thunderbird to not mangle patches, or use an external
867       editor to keep Thunderbird from mangling the patches.
868
869       Approach #1 (add-on)
870           Install the Toggle Word Wrap add-on that is available from
871           https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/ It
872           adds a menu entry "Enable Word Wrap" in the composer’s "Options"
873           menu that you can tick off. Now you can compose the message as you
874           otherwise do (cut + paste, git format-patch | git imap-send, etc),
875           but you have to insert line breaks manually in any text that you
876           type.
877
878       Approach #2 (configuration)
879           Three steps:
880
881            1. Configure your mail server composition as plain text: Edit...
882               Account Settings...Composition & Addressing, uncheck "Compose
883               Messages in HTML".
884
885            2. Configure your general composition window to not wrap.
886
887               In Thunderbird 2: Edit..Preferences..Composition, wrap plain
888               text messages at 0
889
890               In Thunderbird 3: Edit..Preferences..Advanced..Config Editor.
891               Search for "mail.wrap_long_lines". Toggle it to make sure it is
892               set to false. Also, search for "mailnews.wraplength" and set
893               the value to 0.
894
895            3. Disable the use of format=flowed:
896               Edit..Preferences..Advanced..Config Editor. Search for
897               "mailnews.send_plaintext_flowed". Toggle it to make sure it is
898               set to false.
899
900           After that is done, you should be able to compose email as you
901           otherwise would (cut + paste, git format-patch | git imap-send,
902           etc), and the patches will not be mangled.
903
904       Approach #3 (external editor)
905           The following Thunderbird extensions are needed: AboutConfig from
906           http://aboutconfig.mozdev.org/ and External Editor from
907           http://globs.org/articles.php?lng=en&pg=8
908
909            1. Prepare the patch as a text file using your method of choice.
910
911            2. Before opening a compose window, use Edit→Account Settings to
912               uncheck the "Compose messages in HTML format" setting in the
913               "Composition & Addressing" panel of the account to be used to
914               send the patch.
915
916            3. In the main Thunderbird window, before you open the compose
917               window for the patch, use Tools→about:config to set the
918               following to the indicated values:
919
920                           mailnews.send_plaintext_flowed  => false
921                           mailnews.wraplength             => 0
922
923            4. Open a compose window and click the external editor icon.
924
925            5. In the external editor window, read in the patch file and exit
926               the editor normally.
927
928           Side note: it may be possible to do step 2 with about:config and
929           the following settings but no one’s tried yet.
930
931                       mail.html_compose                       => false
932                       mail.identity.default.compose_html      => false
933                       mail.identity.id?.compose_html          => false
934
935           There is a script in contrib/thunderbird-patch-inline which can
936           help you include patches with Thunderbird in an easy way. To use
937           it, do the steps above and then use the script as the external
938           editor.
939
940   KMail
941       This should help you to submit patches inline using KMail.
942
943        1. Prepare the patch as a text file.
944
945        2. Click on New Mail.
946
947        3. Go under "Options" in the Composer window and be sure that "Word
948           wrap" is not set.
949
950        4. Use Message → Insert file... and insert the patch.
951
952        5. Back in the compose window: add whatever other text you wish to the
953           message, complete the addressing and subject fields, and press
954           send.
955

BASE TREE INFORMATION

957       The base tree information block is used for maintainers or third party
958       testers to know the exact state the patch series applies to. It
959       consists of the base commit, which is a well-known commit that is part
960       of the stable part of the project history everybody else works off of,
961       and zero or more prerequisite patches, which are well-known patches in
962       flight that is not yet part of the base commit that need to be applied
963       on top of base commit in topological order before the patches can be
964       applied.
965
966       The base commit is shown as "base-commit: " followed by the 40-hex of
967       the commit object name. A prerequisite patch is shown as
968       "prerequisite-patch-id: " followed by the 40-hex patch id, which can be
969       obtained by passing the patch through the git patch-id --stable
970       command.
971
972       Imagine that on top of the public commit P, you applied well-known
973       patches X, Y and Z from somebody else, and then built your three-patch
974       series A, B, C, the history would be like:
975
976           ---P---X---Y---Z---A---B---C
977
978       With git format-patch --base=P -3 C (or variants thereof, e.g. with
979       --cover-letter or using Z..C instead of -3 C to specify the range), the
980       base tree information block is shown at the end of the first message
981       the command outputs (either the first patch, or the cover letter), like
982       this:
983
984           base-commit: P
985           prerequisite-patch-id: X
986           prerequisite-patch-id: Y
987           prerequisite-patch-id: Z
988
989       For non-linear topology, such as
990
991           ---P---X---A---M---C
992               \         /
993                Y---Z---B
994
995       You can also use git format-patch --base=P -3 C to generate patches for
996       A, B and C, and the identifiers for P, X, Y, Z are appended at the end
997       of the first message.
998
999       If set --base=auto in cmdline, it will track base commit automatically,
1000       the base commit will be the merge base of tip commit of the
1001       remote-tracking branch and revision-range specified in cmdline. For a
1002       local branch, you need to track a remote branch by git branch
1003       --set-upstream-to before using this option.
1004

EXAMPLES

1006       •   Extract commits between revisions R1 and R2, and apply them on top
1007           of the current branch using git am to cherry-pick them:
1008
1009               $ git format-patch -k --stdout R1..R2 | git am -3 -k
1010
1011       •   Extract all commits which are in the current branch but not in the
1012           origin branch:
1013
1014               $ git format-patch origin
1015
1016           For each commit a separate file is created in the current
1017           directory.
1018
1019       •   Extract all commits that lead to origin since the inception of the
1020           project:
1021
1022               $ git format-patch --root origin
1023
1024       •   The same as the previous one:
1025
1026               $ git format-patch -M -B origin
1027
1028           Additionally, it detects and handles renames and complete rewrites
1029           intelligently to produce a renaming patch. A renaming patch reduces
1030           the amount of text output, and generally makes it easier to review.
1031           Note that non-Git "patch" programs won’t understand renaming
1032           patches, so use it only when you know the recipient uses Git to
1033           apply your patch.
1034
1035       •   Extract three topmost commits from the current branch and format
1036           them as e-mailable patches:
1037
1038               $ git format-patch -3
1039

SEE ALSO

1041       git-am(1), git-send-email(1)
1042

GIT

1044       Part of the git(1) suite
1045
1046
1047
1048Git 2.31.1                        2021-03-26               GIT-FORMAT-PATCH(1)
Impressum