blob: 373b46fc0de64f4c7426f683b95f24f95ff9cd84 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-format-patch(1)
2===================
3
4NAME
5----
Junio C Hamano01078922006-03-10 00:31:476git-format-patch - Prepare patches for e-mail submission
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamano235a91e2006-01-07 01:13:5811[verse]
Junio C Hamanof4581102009-04-25 08:29:5912'git format-patch' [-k] [(-o|--output-directory) <dir> | --stdout]
Junio C Hamano1bbd0f42009-07-23 06:20:2913 [--no-thread | --thread[=<style>]]
Junio C Hamanof4581102009-04-25 08:29:5914 [(--attach|--inline)[=<boundary>] | --no-attach]
15 [-s | --signoff]
Junio C Hamano89a57342010-06-22 23:22:5516 [--signature=<signature> | --no-signature]
Junio C Hamanoc8c398a2014-06-16 21:14:0517 [--signature-file=<file>]
Junio C Hamano24bc09a2008-02-28 00:27:4418 [-n | --numbered | -N | --no-numbered]
19 [--start-number <n>] [--numbered-files]
Junio C Hamanoa8858312019-09-30 05:07:4520 [--in-reply-to=<message id>] [--suffix=.<sfx>]
Junio C Hamanoe872a1c2022-01-05 22:15:1321 [--ignore-if-in-upstream] [--always]
Junio C Hamano8ac8a3d2019-11-11 04:33:4622 [--cover-from-description=<mode>]
Junio C Hamanoa8858312019-09-30 05:07:4523 [--rfc] [--subject-prefix=<subject prefix>]
Junio C Hamanoad70bf02016-09-26 23:44:2724 [(--reroll-count|-v) <n>]
Junio C Hamanoea90ab32010-03-15 20:32:5525 [--to=<email>] [--cc=<email>]
Junio C Hamano51937872019-06-13 22:09:3026 [--[no-]cover-letter] [--quiet]
Junio C Hamano67bf2242020-04-22 21:41:4427 [--[no-]encode-email-headers]
Junio C Hamano51937872019-06-13 22:09:3028 [--no-notes | --notes[=<ref>]]
Junio C Hamano980e61e2018-09-17 22:45:5229 [--interdiff=<previous>]
30 [--range-diff=<previous> [--creation-factor=<percent>]]
Junio C Hamano60c374e2020-11-23 20:02:1131 [--filename-max-length=<n>]
Junio C Hamanoa4ff7292017-08-23 21:56:4332 [--progress]
Junio C Hamanof4581102009-04-25 08:29:5933 [<common diff options>]
Junio C Hamano7d9e9bd2007-08-29 07:31:4734 [ <since> | <revision range> ]
Junio C Hamano1a4e8412005-12-27 08:17:2335
36DESCRIPTION
37-----------
Junio C Hamano341071d2006-06-04 07:24:4838
Junio C Hamano51a55bc2021-05-12 05:22:1939Prepare each non-merge commit with its "patch" in
Junio C Hamano3818f892021-03-30 22:12:4540one "message" per commit, formatted to resemble a UNIX mailbox.
Junio C Hamano341071d2006-06-04 07:24:4841The output of this command is convenient for e-mail submission or
Junio C Hamano1aa40d22010-01-21 17:46:4342for use with 'git am'.
Junio C Hamano1a4e8412005-12-27 08:17:2343
Junio C Hamano3818f892021-03-30 22:12:4544A "message" generated by the command consists of three parts:
45
46* A brief metadata header that begins with `From <commit>`
47 with a fixed `Mon Sep 17 00:00:00 2001` datestamp to help programs
48 like "file(1)" to recognize that the file is an output from this
49 command, fields that record the author identity, the author date,
50 and the title of the change (taken from the first paragraph of the
51 commit log message).
52
53* The second and subsequent paragraphs of the commit log message.
54
55* The "patch", which is the "diff -p --stat" output (see
56 linkgit:git-diff[1]) between the commit and its parent.
57
58The log message and the patch is separated by a line with a
59three-dash line.
60
Junio C Hamano7d9e9bd2007-08-29 07:31:4761There are two ways to specify which commits to operate on.
62
631. A single commit, <since>, specifies that the commits leading
64 to the tip of the current branch that are not in the history
65 that leads to the <since> to be output.
66
672. Generic <revision range> expression (see "SPECIFYING
Junio C Hamanoc27b7332010-10-14 04:37:2868 REVISIONS" section in linkgit:gitrevisions[7]) means the
Junio C Hamano7d9e9bd2007-08-29 07:31:4769 commits in the specified range.
70
Junio C Hamano9572e922009-04-02 06:52:0371The first rule takes precedence in the case of a single <commit>. To
72apply the second rule, i.e., format everything since the beginning of
Junio C Hamanoccb82522018-05-08 07:52:0973history up until <commit>, use the `--root` option: `git format-patch
Junio C Hamanob76a6862012-05-02 22:02:4674--root <commit>`. If you want to format only <commit> itself, you
Junio C Hamano3b70d3c2009-11-21 17:37:3775can do this with `git format-patch -1 <commit>`.
Junio C Hamano7d9e9bd2007-08-29 07:31:4776
Junio C Hamano94cad1a2007-06-06 10:48:2577By default, each output file is numbered sequentially from 1, and uses the
Junio C Hamano341071d2006-06-04 07:24:4878first line of the commit message (massaged for pathname safety) as
Junio C Hamano3b70d3c2009-11-21 17:37:3779the filename. With the `--numbered-files` option, the output file names
Junio C Hamano94cad1a2007-06-06 10:48:2580will only be numbers, without the first line of the commit appended.
81The names of the output files are printed to standard
Junio C Hamano3b70d3c2009-11-21 17:37:3782output, unless the `--stdout` option is specified.
Junio C Hamano38de0a22006-02-07 10:24:3583
Junio C Hamano3b70d3c2009-11-21 17:37:3784If `-o` is specified, output files are created in <dir>. Otherwise
Junio C Hamano289d7e82016-01-27 00:20:3885they are created in the current working directory. The default path
Junio C Hamano042f2142016-06-27 18:05:0586can be set with the `format.outputDirectory` configuration option.
Junio C Hamano289d7e82016-01-27 00:20:3887The `-o` option takes precedence over `format.outputDirectory`.
88To store patches in the current working directory even when
Junio C Hamanod52ae632019-10-23 05:33:3189`format.outputDirectory` points elsewhere, use `-o .`. All directory
90components will be created.
Junio C Hamano1a4e8412005-12-27 08:17:2391
Junio C Hamano281fd392012-09-17 23:57:4192By default, the subject of a single patch is "[PATCH] " followed by
93the concatenation of lines from the commit message up to the first blank
94line (see the DISCUSSION section of linkgit:git-commit[1]).
95
96When multiple patches are output, the subject prefix will instead be
97"[PATCH n/m] ". To force 1/1 to be added for a single patch, use `-n`.
98To omit patch numbers from the subject, use `-N`.
Junio C Hamano1a4e8412005-12-27 08:17:2399
Junio C Hamano3b70d3c2009-11-21 17:37:37100If given `--thread`, `git-format-patch` will generate `In-Reply-To` and
101`References` headers to make the second and subsequent patch mails appear
Junio C Hamano3a9663e2023-04-11 20:54:14102as replies to the first mail; this also generates a `Message-ID` header to
Junio C Hamanof9ca97d2006-07-25 22:23:09103reference.
Junio C Hamano1a4e8412005-12-27 08:17:23104
105OPTIONS
106-------
Junio C Hamanoff979792007-11-16 10:11:30107:git-format-patch: 1
Junio C Hamano60f8aa82007-03-06 09:58:26108include::diff-options.txt[]
109
Junio C Hamanobb0f4042007-07-04 06:41:40110-<n>::
Junio C Hamano3b4609d2010-09-30 00:04:34111Prepare patches from the topmost <n> commits.
Junio C Hamanobb0f4042007-07-04 06:41:40112
Junio C Hamanoeb415992008-06-08 22:49:47113-o <dir>::
114--output-directory <dir>::
Junio C Hamano1a4e8412005-12-27 08:17:23115Use <dir> to store the resulting files, instead of the
Junio C Hamano1bab4b02006-06-06 21:58:33116current working directory.
Junio C Hamano1a4e8412005-12-27 08:17:23117
Junio C Hamanoeb415992008-06-08 22:49:47118-n::
119--numbered::
Junio C Hamano7d06a8a2008-10-20 05:42:33120Name output in '[PATCH n/m]' format, even with a single patch.
Junio C Hamano1a4e8412005-12-27 08:17:23121
Junio C Hamanoeb415992008-06-08 22:49:47122-N::
123--no-numbered::
Junio C Hamano8c5802d2007-11-15 00:13:36124Name output in '[PATCH]' format.
125
Junio C Hamano341071d2006-06-04 07:24:48126--start-number <n>::
127Start numbering the patches at <n> instead of 1.
128
Junio C Hamano94cad1a2007-06-06 10:48:25129--numbered-files::
130Output file names will be a simple number sequence
131without the default first line of the commit appended.
Junio C Hamano94cad1a2007-06-06 10:48:25132
Junio C Hamanoeb415992008-06-08 22:49:47133-k::
134--keep-subject::
Junio C Hamano1a4e8412005-12-27 08:17:23135Do not strip/add '[PATCH]' from the first line of the
136commit log message.
137
Junio C Hamanoeb415992008-06-08 22:49:47138-s::
139--signoff::
Junio C Hamanodf3d3cd2020-11-02 22:05:05140Add a `Signed-off-by` trailer to the commit message, using
Junio C Hamano1a4e8412005-12-27 08:17:23141the committer identity of yourself.
Junio C Hamano4e6ba272016-01-20 23:23:19142See the signoff option in linkgit:git-commit[1] for more information.
Junio C Hamano1a4e8412005-12-27 08:17:23143
Junio C Hamano1a4e8412005-12-27 08:17:23144--stdout::
Junio C Hamano341071d2006-06-04 07:24:48145Print all commits to the standard output in mbox format,
146instead of creating a file for each one.
Junio C Hamano1a4e8412005-12-27 08:17:23147
Junio C Hamanoc51fede2007-03-12 07:29:20148--attach[=<boundary>]::
149Create multipart/mixed attachment, the first part of
150which is the commit message and the patch itself in the
Junio C Hamano3b70d3c2009-11-21 17:37:37151second part, with `Content-Disposition: attachment`.
Junio C Hamanoc51fede2007-03-12 07:29:20152
Junio C Hamano0a235222009-03-06 08:21:09153--no-attach::
154Disable the creation of an attachment, overriding the
155configuration setting.
156
Junio C Hamanoc51fede2007-03-12 07:29:20157--inline[=<boundary>]::
158Create multipart/mixed attachment, the first part of
159which is the commit message and the patch itself in the
Junio C Hamano3b70d3c2009-11-21 17:37:37160second part, with `Content-Disposition: inline`.
Junio C Hamano2496ae42006-03-11 08:04:33161
Junio C Hamanoea6a7642009-03-11 23:56:19162--thread[=<style>]::
Junio C Hamano1bbd0f42009-07-23 06:20:29163--no-thread::
Junio C Hamano3b70d3c2009-11-21 17:37:37164Controls addition of `In-Reply-To` and `References` headers to
Junio C Hamano1bbd0f42009-07-23 06:20:29165make the second and subsequent mails appear as replies to the
Junio C Hamano3a9663e2023-04-11 20:54:14166first. Also controls generation of the `Message-ID` header to
Junio C Hamano1bbd0f42009-07-23 06:20:29167reference.
Junio C Hamanoea6a7642009-03-11 23:56:19168+
169The optional <style> argument can be either `shallow` or `deep`.
Junio C Hamanof4581102009-04-25 08:29:59170'shallow' threading makes every mail a reply to the head of the
Junio C Hamanoea6a7642009-03-11 23:56:19171series, where the head is chosen from the cover letter, the
Junio C Hamanob76a6862012-05-02 22:02:46172`--in-reply-to`, and the first patch mail, in this order. 'deep'
Junio C Hamano1bbd0f42009-07-23 06:20:29173threading makes every mail a reply to the previous one.
174+
Junio C Hamano042f2142016-06-27 18:05:05175The default is `--no-thread`, unless the `format.thread` configuration
Junio C Hamano1794ede2023-04-21 23:00:40176is set. `--thread` without an argument is equivalent to `--thread=shallow`.
Junio C Hamano1bbd0f42009-07-23 06:20:29177+
178Beware that the default for 'git send-email' is to thread emails
Junio C Hamano3b70d3c2009-11-21 17:37:37179itself. If you want `git format-patch` to take care of threading, you
180will want to ensure that threading is disabled for `git send-email`.
Junio C Hamanof9ca97d2006-07-25 22:23:09181
Junio C Hamanoa8858312019-09-30 05:07:45182--in-reply-to=<message id>::
Junio C Hamano3b70d3c2009-11-21 17:37:37183Make the first mail (or all the mails with `--no-thread`) appear as a
Junio C Hamanoa8858312019-09-30 05:07:45184reply to the given <message id>, which avoids breaking threads to
Junio C Hamanof9ca97d2006-07-25 22:23:09185provide a new patch series.
Junio C Hamano2496ae42006-03-11 08:04:33186
Junio C Hamano7c73c662007-01-19 00:37:50187--ignore-if-in-upstream::
188Do not include a patch that matches a commit in
189<until>..<since>. This will examine all patches reachable
190from <since> but not from <until> and compare them with the
191patches being generated, and any patch that matches is
192ignored.
193
Junio C Hamanoe872a1c2022-01-05 22:15:13194--always::
195Include patches for commits that do not introduce any change,
196which are omitted by default.
197
Junio C Hamano8ac8a3d2019-11-11 04:33:46198--cover-from-description=<mode>::
199Controls which parts of the cover letter will be automatically
200populated using the branch's description.
201+
202If `<mode>` is `message` or `default`, the cover letter subject will be
203populated with placeholder text. The body of the cover letter will be
204populated with the branch's description. This is the default mode when
205no configuration nor command line option is specified.
206+
207If `<mode>` is `subject`, the first paragraph of the branch description will
208populate the cover letter subject. The remainder of the description will
209populate the body of the cover letter.
210+
211If `<mode>` is `auto`, if the first paragraph of the branch description
212is greater than 100 bytes, then the mode will be `message`, otherwise
213`subject` will be used.
214+
215If `<mode>` is `none`, both the cover letter subject and body will be
216populated with placeholder text.
217
Junio C Hamanoa8858312019-09-30 05:07:45218--subject-prefix=<subject prefix>::
Junio C Hamano6f1cca82007-04-12 05:02:47219Instead of the standard '[PATCH]' prefix in the subject
Junio C Hamanoa8858312019-09-30 05:07:45220line, instead use '[<subject prefix>]'. This
Junio C Hamano6f1cca82007-04-12 05:02:47221allows for useful naming of a patch series, and can be
Junio C Hamano3b70d3c2009-11-21 17:37:37222combined with the `--numbered` option.
Junio C Hamano6f1cca82007-04-12 05:02:47223
Junio C Hamano60c374e2020-11-23 20:02:11224--filename-max-length=<n>::
225Instead of the standard 64 bytes, chomp the generated output
226filenames at around '<n>' bytes (too short a value will be
227silently raised to a reasonable length). Defaults to the
228value of the `format.filenameMaxLength` configuration
229variable, or 64 if unconfigured.
230
Junio C Hamanoad70bf02016-09-26 23:44:27231--rfc::
232Alias for `--subject-prefix="RFC PATCH"`. RFC means "Request For
233Comments"; use this when sending an experimental patch for
234discussion rather than application.
235
Junio C Hamano7dac6902013-01-12 08:25:31236-v <n>::
237--reroll-count=<n>::
238Mark the series as the <n>-th iteration of the topic. The
Junio C Hamanodf5384b2015-06-24 21:12:12239output filenames have `v<n>` prepended to them, and the
Junio C Hamano7dac6902013-01-12 08:25:31240subject prefix ("PATCH" by default, but configurable via the
241`--subject-prefix` option) has ` v<n>` appended to it. E.g.
242`--reroll-count=4` may produce `v4-0001-add-makefile.patch`
243file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
Junio C Hamanob4e47592021-04-02 22:14:54244`<n>` does not have to be an integer (e.g. "--reroll-count=4.4",
245or "--reroll-count=4rev2" are allowed), but the downside of
246using such a reroll-count is that the range-diff/interdiff
247with the previous version does not state exactly which
Junio C Hamano9469c132023-06-23 20:26:29248version the new iteration is compared against.
Junio C Hamano7dac6902013-01-12 08:25:31249
Junio C Hamanoea90ab32010-03-15 20:32:55250--to=<email>::
251Add a `To:` header to the email headers. This is in addition
252to any configured headers, and may be used multiple times.
Junio C Hamano7bd050f2011-09-22 06:32:22253The negated form `--no-to` discards all `To:` headers added so
254far (from config or command line).
Junio C Hamanoea90ab32010-03-15 20:32:55255
Junio C Hamano24bc09a2008-02-28 00:27:44256--cc=<email>::
Junio C Hamano3b70d3c2009-11-21 17:37:37257Add a `Cc:` header to the email headers. This is in addition
Junio C Hamano24bc09a2008-02-28 00:27:44258to any configured headers, and may be used multiple times.
Junio C Hamano7bd050f2011-09-22 06:32:22259The negated form `--no-cc` discards all `Cc:` headers added so
260far (from config or command line).
Junio C Hamano24bc09a2008-02-28 00:27:44261
Junio C Hamanoededf2b2013-07-15 21:11:16262--from::
263--from=<ident>::
264Use `ident` in the `From:` header of each commit email. If the
265author ident of the commit is not textually identical to the
266provided `ident`, place a `From:` header in the body of the
267message with the original author. If no `ident` is given, use
268the committer ident.
269+
270Note that this option is only useful if you are actually sending the
271emails and want to identify yourself as the sender, but retain the
272original author (and `git am` will correctly pick up the in-body
273header). Note also that `git send-email` already handles this
274transformation for you, and this option should not be used if you are
275feeding the result to `git send-email`.
276
Junio C Hamano80d588f2022-09-09 22:08:29277--[no-]force-in-body-from::
278With the e-mail sender specified via the `--from` option, by
279default, an in-body "From:" to identify the real author of
280the commit is added at the top of the commit log message if
281the sender is different from the author. With this option,
282the in-body "From:" is added even when the sender and the
283author have the same name and address, which may help if the
284mailing list software mangles the sender's identity.
285Defaults to the value of the `format.forceInBodyFrom`
286configuration variable.
287
Junio C Hamano9572e922009-04-02 06:52:03288--add-header=<header>::
289Add an arbitrary header to the email headers. This is in addition
290to any configured headers, and may be used multiple times.
Junio C Hamano7bd050f2011-09-22 06:32:22291For example, `--add-header="Organization: git-foo"`.
292The negated form `--no-add-header` discards *all* (`To:`,
293`Cc:`, and custom) headers added so far from config or command
294line.
Junio C Hamano9572e922009-04-02 06:52:03295
Junio C Hamanoea3b7522013-04-18 19:37:53296--[no-]cover-letter::
Junio C Hamano92a4abd2008-08-15 05:34:44297In addition to the patches, generate a cover letter file
Junio C Hamano7db630e2015-09-17 20:26:22298containing the branch description, shortlog and the overall diffstat. You can
Junio C Hamano92a4abd2008-08-15 05:34:44299fill in a description in the file before sending it out.
Junio C Hamano24bc09a2008-02-28 00:27:44300
Junio C Hamano67bf2242020-04-22 21:41:44301--encode-email-headers::
302--no-encode-email-headers::
303Encode email headers that have non-ASCII characters with
304"Q-encoding" (described in RFC 2047), instead of outputting the
305headers verbatim. Defaults to the value of the
306`format.encodeEmailHeaders` configuration variable.
307
Junio C Hamano980e61e2018-09-17 22:45:52308--interdiff=<previous>::
309As a reviewer aid, insert an interdiff into the cover letter,
310or as commentary of the lone patch of a 1-patch series, showing
311the differences between the previous version of the patch series and
312the series currently being formatted. `previous` is a single revision
313naming the tip of the previous series which shares a common base with
314the series being formatted (for example `git format-patch
315--cover-letter --interdiff=feature/v1 -3 feature/v2`).
316
317--range-diff=<previous>::
318As a reviewer aid, insert a range-diff (see linkgit:git-range-diff[1])
319into the cover letter, or as commentary of the lone patch of a
3201-patch series, showing the differences between the previous
321version of the patch series and the series currently being formatted.
322`previous` can be a single revision naming the tip of the previous
323series if it shares a common base with the series being formatted (for
324example `git format-patch --cover-letter --range-diff=feature/v1 -3
325feature/v2`), or a revision range if the two versions of the series are
326disjoint (for example `git format-patch --cover-letter
327--range-diff=feature/v1~3..feature/v1 -3 feature/v2`).
Junio C Hamanof2b280b2018-12-01 14:45:01328+
329Note that diff options passed to the command affect how the primary
330product of `format-patch` is generated, and they are not passed to
331the underlying `range-diff` machinery used to generate the cover-letter
332material (this may change in the future).
Junio C Hamano980e61e2018-09-17 22:45:52333
334--creation-factor=<percent>::
335Used with `--range-diff`, tweak the heuristic which matches up commits
336between the previous and current series of patches by adjusting the
337creation/deletion cost fudge factor. See linkgit:git-range-diff[1])
338for details.
339
Junio C Hamano4eb2b9c2012-11-15 21:12:29340--notes[=<ref>]::
Junio C Hamano51937872019-06-13 22:09:30341--no-notes::
Junio C Hamano4eb2b9c2012-11-15 21:12:29342Append the notes (see linkgit:git-notes[1]) for the commit
343after the three-dash line.
344+
345The expected use case of this is to write supporting explanation for
346the commit that does not belong to the commit log message proper,
347and include it with the patch submission. While one can simply write
348these explanations after `format-patch` has run but before sending,
Junio C Hamano076ffcc2013-02-06 05:13:21349keeping them as Git notes allows them to be maintained between versions
Junio C Hamano4eb2b9c2012-11-15 21:12:29350of the patch series (but see the discussion of the `notes.rewrite`
351configuration options in linkgit:git-notes[1] to use this workflow).
Junio C Hamano51937872019-06-13 22:09:30352+
353The default is `--no-notes`, unless the `format.notes` configuration is
354set.
Junio C Hamano4eb2b9c2012-11-15 21:12:29355
Junio C Hamanocb06ef92017-03-21 22:40:14356--[no-]signature=<signature>::
Junio C Hamano89a57342010-06-22 23:22:55357Add a signature to each message produced. Per RFC 3676 the signature
358is separated from the body by a line with '-- ' on it. If the
Junio C Hamano076ffcc2013-02-06 05:13:21359signature option is omitted the signature defaults to the Git version
Junio C Hamano89a57342010-06-22 23:22:55360number.
361
Junio C Hamanoc8c398a2014-06-16 21:14:05362--signature-file=<file>::
363Works just like --signature except the signature is read from a file.
364
Junio C Hamano4f9a6052007-01-17 20:25:16365--suffix=.<sfx>::
Junio C Hamano7c73c662007-01-19 00:37:50366Instead of using `.patch` as the suffix for generated
Junio C Hamanoa6387422007-08-25 03:54:27367filenames, use specified suffix. A common alternative is
Junio C Hamanof4581102009-04-25 08:29:59368`--suffix=.txt`. Leaving this empty will remove the `.patch`
369suffix.
Junio C Hamano4f9a6052007-01-17 20:25:16370+
Junio C Hamanof4581102009-04-25 08:29:59371Note that the leading character does not have to be a dot; for example,
372you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`.
Junio C Hamano4f9a6052007-01-17 20:25:16373
Junio C Hamano535ed7a2013-09-04 20:35:57374-q::
Junio C Hamano209ebe82011-04-27 21:09:59375--quiet::
376Do not print the names of the generated files to standard output.
377
Junio C Hamano869bb802008-05-12 00:29:47378--no-binary::
Junio C Hamanof4581102009-04-25 08:29:59379Do not output contents of changes in binary files, instead
380display a notice that those files changed. Patches generated
381using this option cannot be applied properly, but they are
382still useful for code review.
Junio C Hamano869bb802008-05-12 00:29:47383
Junio C Hamano409a33a2015-12-22 23:45:23384--zero-commit::
385 Output an all-zero hash in each patch's From header instead
386 of the hash of the commit.
387
Junio C Hamano2267da52019-12-18 23:09:43388--[no-]base[=<commit>]::
Junio C Hamanof2a3a752016-05-23 22:54:39389Record the base tree information to identify the state the
390patch series applies to. See the BASE TREE INFORMATION section
Junio C Hamanoa8858312019-09-30 05:07:45391below for details. If <commit> is "auto", a base commit is
Junio C Hamano2267da52019-12-18 23:09:43392automatically chosen. The `--no-base` option overrides a
393`format.useAutoBase` configuration.
Junio C Hamanof2a3a752016-05-23 22:54:39394
Junio C Hamano9572e922009-04-02 06:52:03395--root::
396Treat the revision argument as a <revision range>, even if it
397is just a single commit (that would normally be treated as a
398<since>). Note that root commits included in the specified
399range are always formatted as creation patches, independently
400of this flag.
401
Junio C Hamanoa4ff7292017-08-23 21:56:43402--progress::
403Show progress reports on stderr as patches are generated.
404
Junio C Hamano2496ae42006-03-11 08:04:33405CONFIGURATION
406-------------
Junio C Hamanof4581102009-04-25 08:29:59407You can specify extra mail header lines to be added to each message,
408defaults for the subject prefix and file suffix, number patches when
Junio C Hamanoa8858312019-09-30 05:07:45409outputting more than one patch, add "To:" or "Cc:" headers, configure
410attachments, change the patch output directory, and sign off patches
411with configuration variables.
Junio C Hamano2496ae42006-03-11 08:04:33412
Junio C Hamano7c73c662007-01-19 00:37:50413------------
Junio C Hamano2496ae42006-03-11 08:04:33414[format]
Junio C Hamanoba4b9282008-07-06 05:20:31415headers = "Organization: git-foo\n"
Junio C Hamano322c6242015-03-23 21:32:46416subjectPrefix = CHANGE
Junio C Hamanoba4b9282008-07-06 05:20:31417suffix = .txt
418numbered = auto
Junio C Hamanoea90ab32010-03-15 20:32:55419to = <email>
Junio C Hamano2fbcd212008-05-14 22:26:07420cc = <email>
Junio C Hamano0a235222009-03-06 08:21:09421attach [ = mime-boundary-string ]
Junio C Hamano322c6242015-03-23 21:32:46422signOff = true
Junio C Hamanoa8858312019-09-30 05:07:45423outputDirectory = <directory>
424coverLetter = auto
Junio C Hamano8ac8a3d2019-11-11 04:33:46425coverFromDescription = auto
Junio C Hamano7c73c662007-01-19 00:37:50426------------
Junio C Hamano4f9a6052007-01-17 20:25:16427
Junio C Hamano1a4e8412005-12-27 08:17:23428
Junio C Hamanob77f8192011-05-05 01:30:38429DISCUSSION
430----------
431
432The patch produced by 'git format-patch' is in UNIX mailbox format,
433with a fixed "magic" time stamp to indicate that the file is output
434from format-patch rather than a real mailbox, like so:
435
436------------
437From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
438From: Tony Luck <tony.luck@intel.com>
439Date: Tue, 13 Jul 2010 11:42:54 -0700
440Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
441 =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
442MIME-Version: 1.0
443Content-Type: text/plain; charset=UTF-8
444Content-Transfer-Encoding: 8bit
445
446arch/arm config files were slimmed down using a python script
447(See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment)
448
449Do the same for ia64 so we can have sleek & trim looking
450...
451------------
452
453Typically it will be placed in a MUA's drafts folder, edited to add
454timely commentary that should not go in the changelog after the three
455dashes, and then sent as a message whose body, in our example, starts
456with "arch/arm config files were...". On the receiving end, readers
457can save interesting patches in a UNIX mailbox and apply them with
458linkgit:git-am[1].
459
460When a patch is part of an ongoing discussion, the patch generated by
461'git format-patch' can be tweaked to take advantage of the 'git am
462--scissors' feature. After your response to the discussion comes a
463line that consists solely of "`-- >8 --`" (scissors and perforation),
464followed by the patch with unnecessary header fields removed:
465
466------------
467...
468> So we should do such-and-such.
469
470Makes sense to me. How about this patch?
471
472-- >8 --
473Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet
474
475arch/arm config files were slimmed down using a python script
476...
477------------
478
479When sending a patch this way, most often you are sending your own
480patch, so in addition to the "`From $SHA1 $magic_timestamp`" marker you
481should omit `From:` and `Date:` lines from the patch file. The patch
482title is likely to be different from the subject of the discussion the
483patch is in response to, so it is likely that you would want to keep
484the Subject: line, like the example above.
485
486Checking for patch corruption
487~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
488Many mailers if not set up properly will corrupt whitespace. Here are
489two common types of corruption:
490
491* Empty context lines that do not have _any_ whitespace.
492
493* Non-empty context lines that have one extra whitespace at the
494 beginning.
495
496One way to test if your MUA is set up correctly is:
497
498* Send the patch to yourself, exactly the way you would, except
499 with To: and Cc: lines that do not contain the list and
500 maintainer address.
501
502* Save that patch to a file in UNIX mailbox format. Call it a.patch,
503 say.
504
505* Apply it:
506
507 $ git fetch <project> master:test-apply
Junio C Hamanoc9f11c22019-07-10 02:54:04508 $ git switch test-apply
509 $ git restore --source=HEAD --staged --worktree :/
Junio C Hamanob77f8192011-05-05 01:30:38510 $ git am a.patch
511
512If it does not apply correctly, there can be various reasons.
513
514* The patch itself does not apply cleanly. That is _bad_ but
515 does not have much to do with your MUA. You might want to rebase
516 the patch with linkgit:git-rebase[1] before regenerating it in
517 this case.
518
519* The MUA corrupted your patch; "am" would complain that
520 the patch does not apply. Look in the .git/rebase-apply/ subdirectory and
521 see what 'patch' file contains and check for the common
522 corruption patterns mentioned above.
523
524* While at it, check the 'info' and 'final-commit' files as well.
525 If what is in 'final-commit' is not exactly what you would want to
526 see in the commit log message, it is very likely that the
527 receiver would end up hand editing the log message when applying
528 your patch. Things like "Hi, this is my first patch.\n" in the
529 patch e-mail should come after the three-dash line that signals
530 the end of the commit message.
531
532MUA-SPECIFIC HINTS
533------------------
534Here are some hints on how to successfully submit patches inline using
535various mailers.
536
537GMail
538~~~~~
539GMail does not have any way to turn off line wrapping in the web
540interface, so it will mangle any emails that you send. You can however
541use "git send-email" and send your patches through the GMail SMTP server, or
542use any IMAP email client to connect to the google IMAP server and forward
543the emails through that.
544
545For hints on using 'git send-email' to send your patches through the
546GMail SMTP server, see the EXAMPLE section of linkgit:git-send-email[1].
547
548For hints on submission using the IMAP interface, see the EXAMPLE
549section of linkgit:git-imap-send[1].
550
551Thunderbird
552~~~~~~~~~~~
553By default, Thunderbird will both wrap emails as well as flag
554them as being 'format=flowed', both of which will make the
Junio C Hamano076ffcc2013-02-06 05:13:21555resulting email unusable by Git.
Junio C Hamanob77f8192011-05-05 01:30:38556
557There are three different approaches: use an add-on to turn off line wraps,
558configure Thunderbird to not mangle patches, or use
559an external editor to keep Thunderbird from mangling the patches.
560
561Approach #1 (add-on)
562^^^^^^^^^^^^^^^^^^^^
563
564Install the Toggle Word Wrap add-on that is available from
565https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/
566It adds a menu entry "Enable Word Wrap" in the composer's "Options" menu
567that you can tick off. Now you can compose the message as you otherwise do
568(cut + paste, 'git format-patch' | 'git imap-send', etc), but you have to
569insert line breaks manually in any text that you type.
570
571Approach #2 (configuration)
572^^^^^^^^^^^^^^^^^^^^^^^^^^^
573Three steps:
574
5751. Configure your mail server composition as plain text:
576 Edit...Account Settings...Composition & Addressing,
577 uncheck "Compose Messages in HTML".
578
5792. Configure your general composition window to not wrap.
580+
581In Thunderbird 2:
582Edit..Preferences..Composition, wrap plain text messages at 0
583+
584In Thunderbird 3:
585Edit..Preferences..Advanced..Config Editor. Search for
586"mail.wrap_long_lines".
Junio C Hamano369e3402013-10-15 18:40:25587Toggle it to make sure it is set to `false`. Also, search for
588"mailnews.wraplength" and set the value to 0.
Junio C Hamanob77f8192011-05-05 01:30:38589
5903. Disable the use of format=flowed:
Junio C Hamano2567b322019-02-05 23:33:56591 Edit..Preferences..Advanced..Config Editor. Search for
592 "mailnews.send_plaintext_flowed".
593 Toggle it to make sure it is set to `false`.
Junio C Hamanob77f8192011-05-05 01:30:38594
595After that is done, you should be able to compose email as you
596otherwise would (cut + paste, 'git format-patch' | 'git imap-send', etc),
597and the patches will not be mangled.
598
599Approach #3 (external editor)
600^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
601
602The following Thunderbird extensions are needed:
603AboutConfig from http://aboutconfig.mozdev.org/ and
604External Editor from http://globs.org/articles.php?lng=en&pg=8
605
6061. Prepare the patch as a text file using your method of choice.
607
6082. Before opening a compose window, use Edit->Account Settings to
609 uncheck the "Compose messages in HTML format" setting in the
610 "Composition & Addressing" panel of the account to be used to
611 send the patch.
612
6133. In the main Thunderbird window, 'before' you open the compose
614 window for the patch, use Tools->about:config to set the
615 following to the indicated values:
616+
617----------
618mailnews.send_plaintext_flowed => false
619mailnews.wraplength => 0
620----------
621
6224. Open a compose window and click the external editor icon.
623
6245. In the external editor window, read in the patch file and exit
625 the editor normally.
626
627Side note: it may be possible to do step 2 with
628about:config and the following settings but no one's tried yet.
629
630----------
631mail.html_compose => false
632mail.identity.default.compose_html => false
633mail.identity.id?.compose_html => false
634----------
635
636There is a script in contrib/thunderbird-patch-inline which can help
637you include patches with Thunderbird in an easy way. To use it, do the
638steps above and then use the script as the external editor.
639
640KMail
641~~~~~
642This should help you to submit patches inline using KMail.
643
6441. Prepare the patch as a text file.
645
6462. Click on New Mail.
647
6483. Go under "Options" in the Composer window and be sure that
649 "Word wrap" is not set.
650
6514. Use Message -> Insert file... and insert the patch.
652
6535. Back in the compose window: add whatever other text you wish to the
654 message, complete the addressing and subject fields, and press send.
655
Junio C Hamanof2a3a752016-05-23 22:54:39656BASE TREE INFORMATION
657---------------------
658
659The base tree information block is used for maintainers or third party
660testers to know the exact state the patch series applies to. It consists
661of the 'base commit', which is a well-known commit that is part of the
662stable part of the project history everybody else works off of, and zero
663or more 'prerequisite patches', which are well-known patches in flight
664that is not yet part of the 'base commit' that need to be applied on top
665of 'base commit' in topological order before the patches can be applied.
666
667The 'base commit' is shown as "base-commit: " followed by the 40-hex of
668the commit object name. A 'prerequisite patch' is shown as
669"prerequisite-patch-id: " followed by the 40-hex 'patch id', which can
670be obtained by passing the patch through the `git patch-id --stable`
671command.
672
673Imagine that on top of the public commit P, you applied well-known
674patches X, Y and Z from somebody else, and then built your three-patch
675series A, B, C, the history would be like:
676
677................................................
678---P---X---Y---Z---A---B---C
679................................................
680
681With `git format-patch --base=P -3 C` (or variants thereof, e.g. with
Junio C Hamanoe25cc812017-04-24 06:17:43682`--cover-letter` or using `Z..C` instead of `-3 C` to specify the
Junio C Hamanof2a3a752016-05-23 22:54:39683range), the base tree information block is shown at the end of the
684first message the command outputs (either the first patch, or the
685cover letter), like this:
686
687------------
688base-commit: P
689prerequisite-patch-id: X
690prerequisite-patch-id: Y
691prerequisite-patch-id: Z
692------------
693
694For non-linear topology, such as
695
696................................................
697---P---X---A---M---C
698 \ /
699 Y---Z---B
700................................................
701
702You can also use `git format-patch --base=P -3 C` to generate patches
703for A, B and C, and the identifiers for P, X, Y, Z are appended at the
704end of the first message.
705
Junio C Hamano52964ad2021-11-02 00:10:25706If set `--base=auto` in cmdline, it will automatically compute
707the base commit as the merge base of tip commit of the remote-tracking
Junio C Hamanof2a3a752016-05-23 22:54:39708branch and revision-range specified in cmdline.
Junio C Hamano52964ad2021-11-02 00:10:25709For a local branch, you need to make it to track a remote branch by `git branch
Junio C Hamanof2a3a752016-05-23 22:54:39710--set-upstream-to` before using this option.
Junio C Hamanob77f8192011-05-05 01:30:38711
Junio C Hamano1a4e8412005-12-27 08:17:23712EXAMPLES
713--------
714
Junio C Hamano6d76d612008-05-09 05:46:08715* Extract commits between revisions R1 and R2, and apply them on top of
Junio C Hamano2567b322019-02-05 23:33:56716 the current branch using 'git am' to cherry-pick them:
Junio C Hamano6d76d612008-05-09 05:46:08717+
718------------
Junio C Hamanoba4b9282008-07-06 05:20:31719$ git format-patch -k --stdout R1..R2 | git am -3 -k
Junio C Hamano6d76d612008-05-09 05:46:08720------------
Junio C Hamano1a4e8412005-12-27 08:17:23721
Junio C Hamano6d76d612008-05-09 05:46:08722* Extract all commits which are in the current branch but not in the
Junio C Hamano2567b322019-02-05 23:33:56723 origin branch:
Junio C Hamano6d76d612008-05-09 05:46:08724+
725------------
726$ git format-patch origin
727------------
728+
729For each commit a separate file is created in the current directory.
Junio C Hamano1a4e8412005-12-27 08:17:23730
Junio C Hamano6d76d612008-05-09 05:46:08731* Extract all commits that lead to 'origin' since the inception of the
Junio C Hamano2567b322019-02-05 23:33:56732 project:
Junio C Hamano6d76d612008-05-09 05:46:08733+
734------------
Junio C Hamanoba4b9282008-07-06 05:20:31735$ git format-patch --root origin
Junio C Hamano6d76d612008-05-09 05:46:08736------------
Junio C Hamano7d9e9bd2007-08-29 07:31:47737
Junio C Hamano6d76d612008-05-09 05:46:08738* The same as the previous one:
739+
740------------
741$ git format-patch -M -B origin
742------------
743+
744Additionally, it detects and handles renames and complete rewrites
745intelligently to produce a renaming patch. A renaming patch reduces
Junio C Hamanof4581102009-04-25 08:29:59746the amount of text output, and generally makes it easier to review.
Junio C Hamano076ffcc2013-02-06 05:13:21747Note that non-Git "patch" programs won't understand renaming patches, so
748use it only when you know the recipient uses Git to apply your patch.
Junio C Hamano1a4e8412005-12-27 08:17:23749
Junio C Hamano6d76d612008-05-09 05:46:08750* Extract three topmost commits from the current branch and format them
Junio C Hamano2567b322019-02-05 23:33:56751 as e-mailable patches:
Junio C Hamano6d76d612008-05-09 05:46:08752+
753------------
754$ git format-patch -3
755------------
Junio C Hamano1a4e8412005-12-27 08:17:23756
Junio C Hamano51a55bc2021-05-12 05:22:19757CAVEATS
758-------
759
760Note that `format-patch` will omit merge commits from the output, even
761if they are part of the requested range. A simple "patch" does not
762include enough information for the receiving end to reproduce the same
763merge commit.
764
Junio C Hamano9049d912008-05-29 02:09:50765SEE ALSO
Junio C Hamano1a4e8412005-12-27 08:17:23766--------
Junio C Hamano35738e82008-01-07 07:55:46767linkgit:git-am[1], linkgit:git-send-email[1]
Junio C Hamano1a4e8412005-12-27 08:17:23768
Junio C Hamano1a4e8412005-12-27 08:17:23769GIT
770---
Junio C Hamanof7c042d2008-06-06 22:50:53771Part of the linkgit:git[1] suite