Code

Allow builtin-fetch to work on a detached HEAD
[git.git] / Documentation / git-format-patch.txt
index 23acb47528fc2e3beafe4d85a26152cb718b3e72..c9857a2d62e55edaf7e71c1a89ae09c8ae2423d2 100644 (file)
@@ -9,25 +9,47 @@ git-format-patch - Prepare patches for e-mail submission
 SYNOPSIS
 --------
 [verse]
-'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--attach] [--thread]
-                  [-s | --signoff] [--diff-options] [--start-number <n>]
-                  [--in-reply-to=Message-Id] [--suffix=.<sfx>]
-                  <since>[..<until>]
+'git-format-patch' [-n | -k] [-o <dir> | --stdout] [--thread]
+                   [--attach[=<boundary>] | --inline[=<boundary>]]
+                   [-s | --signoff] [<common diff options>]
+                   [--start-number <n>] [--numbered-files]
+                   [--in-reply-to=Message-Id] [--suffix=.<sfx>]
+                   [--ignore-if-in-upstream]
+                   [--subject-prefix=Subject-Prefix]
+                  [ <since> | <revision range> ]
 
 DESCRIPTION
 -----------
 
-Prepare each commit between <since> and <until> with its patch in
+Prepare each commit with its patch in
 one file per commit, formatted to resemble UNIX mailbox format.
-If ..<until> is not specified, the head of the current working
-tree is implied.
-
 The output of this command is convenient for e-mail submission or
 for use with gitlink:git-am[1].
 
-Each output file is numbered sequentially from 1, and uses the
+There are two ways to specify which commits to operate on.
+
+1. A single commit, <since>, specifies that the commits leading
+   to the tip of the current branch that are not in the history
+   that leads to the <since> to be output.
+
+2. Generic <revision range> expression (see "SPECIFYING
+   REVISIONS" section in gitlink:git-rev-parse[1]) means the
+   commits in the specified range.
+
+A single commit, when interpreted as a <revision range>
+expression, means "everything that leads to that commit", but
+if you write 'git format-patch <commit>', the previous rule
+applies to that command line and you do not get "everything
+since the beginning of the time".  If you want to format
+everything since project inception to one commit, say "git
+format-patch \--root <commit>" to make it clear that it is the
+latter case.
+
+By default, each output file is numbered sequentially from 1, and uses the
 first line of the commit message (massaged for pathname safety) as
-the filename. The names of the output files are printed to standard
+the filename. With the --numbered-files option, the output file names
+will only be numbers, without the first line of the commit appended.
+The names of the output files are printed to standard
 output, unless the --stdout option is specified.
 
 If -o is specified, output files are created in <dir>.  Otherwise
@@ -43,6 +65,11 @@ reference.
 
 OPTIONS
 -------
+include::diff-options.txt[]
+
+-<n>::
+       Limits the number of patches to prepare.
+
 -o|--output-directory <dir>::
        Use <dir> to store the resulting files, instead of the
        current working directory.
@@ -53,6 +80,11 @@ OPTIONS
 --start-number <n>::
        Start numbering the patches at <n> instead of 1.
 
+--numbered-files::
+       Output file names will be a simple number sequence
+       without the default first line of the commit appended.
+       Mutually exclusive with the --stdout option.
+
 -k|--keep-subject::
        Do not strip/add '[PATCH]' from the first line of the
        commit log message.
@@ -65,8 +97,15 @@ OPTIONS
        Print all commits to the standard output in mbox format,
        instead of creating a file for each one.
 
---attach::
-       Create attachments instead of inlining patches.
+--attach[=<boundary>]::
+       Create multipart/mixed attachment, the first part of
+       which is the commit message and the patch itself in the
+       second part, with "Content-Disposition: attachment".
+
+--inline[=<boundary>]::
+       Create multipart/mixed attachment, the first part of
+       which is the commit message and the patch itself in the
+       second part, with "Content-Disposition: inline".
 
 --thread::
        Add In-Reply-To and References headers to make the second and
@@ -78,10 +117,23 @@ OPTIONS
        reply to the given Message-Id, which avoids breaking threads to
        provide a new patch series.
 
+--ignore-if-in-upstream::
+       Do not include a patch that matches a commit in
+       <until>..<since>.  This will examine all patches reachable
+       from <since> but not from <until> and compare them with the
+       patches being generated, and any patch that matches is
+       ignored.
+
+--subject-prefix=<Subject-Prefix>::
+       Instead of the standard '[PATCH]' prefix in the subject
+       line, instead use '[<Subject-Prefix>]'. This
+       allows for useful naming of a patch series, and can be
+       combined with the --numbered option.
+
 --suffix=.<sfx>::
-       Instead of using `.txt` as the suffix for generated
-       filenames, use specifed suffix.  A common alternative is
-       `--suffix=.patch`.
+       Instead of using `.patch` as the suffix for generated
+       filenames, use specified suffix.  A common alternative is
+       `--suffix=.txt`.
 +
 Note that you would need to include the leading dot `.` if you
 want a filename like `0001-description-of-my-change.patch`, and
@@ -91,15 +143,15 @@ not add any suffix.
 CONFIGURATION
 -------------
 You can specify extra mail header lines to be added to each
-message in the repository configuration as follows:
+message in the repository configuration.  You can also specify
+new defaults for the subject prefix and file suffix.
 
+------------
 [format]
         headers = "Organization: git-foo\n"
-
-You can specify default suffix used:
-
-[format]
-        suffix = .patch
+        subjectprefix = CHANGE
+        suffix = .txt
+------------
 
 
 EXAMPLES
@@ -115,6 +167,10 @@ git-format-patch origin::
        not in the origin branch.  For each commit a separate file
        is created in the current directory.
 
+git-format-patch \--root origin::
+       Extract all commits which that leads to 'origin' since the
+       inception of the project.
+
 git-format-patch -M -B origin::
        The same as the previous one.  Additionally, it detects
        and handles renames and complete rewrites intelligently to
@@ -124,6 +180,9 @@ git-format-patch -M -B origin::
        understand renaming patches, so use it only when you know
        the recipient uses git to apply your patch.
 
+git-format-patch -3::
+       Extract three topmost commits from the current branch
+       and format them as e-mailable patches.
 
 See Also
 --------
@@ -141,4 +200,3 @@ Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 GIT
 ---
 Part of the gitlink:git[7] suite
-