<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title>git-format-patch(1)</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="manpage">
<div id="header">
<h1>
git-format-patch(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-format-patch -
   Prepare patches for e-mail submission
</p>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
<pre class="content"><em>git format-patch</em> [-k] [(-o|--output-directory) &lt;dir&gt; | --stdout]
                   [--no-thread | --thread[=&lt;style&gt;]]
                   [(--attach|--inline)[=&lt;boundary&gt;] | --no-attach]
                   [-s | --signoff]
                   [--signature=&lt;signature&gt; | --no-signature]
                   [--signature-file=&lt;file&gt;]
                   [-n | --numbered | -N | --no-numbered]
                   [--start-number &lt;n&gt;] [--numbered-files]
                   [--in-reply-to=Message-Id] [--suffix=.&lt;sfx&gt;]
                   [--ignore-if-in-upstream]
                   [--rfc] [--subject-prefix=Subject-Prefix]
                   [(--reroll-count|-v) &lt;n&gt;]
                   [--to=&lt;email&gt;] [--cc=&lt;email&gt;]
                   [--[no-]cover-letter] [--quiet] [--notes[=&lt;ref&gt;]]
                   [&lt;common diff options&gt;]
                   [ &lt;since&gt; | &lt;revision range&gt; ]</pre>
<div class="attribution">
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Prepare each commit with its patch in
one file per commit, formatted to resemble UNIX mailbox format.
The output of this command is convenient for e-mail submission or
for use with <em>git am</em>.</p></div>
<div class="paragraph"><p>There are two ways to specify which commits to operate on.</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
A single commit, &lt;since&gt;, specifies that the commits leading
   to the tip of the current branch that are not in the history
   that leads to the &lt;since&gt; to be output.
</p>
</li>
<li>
<p>
Generic &lt;revision range&gt; expression (see "SPECIFYING
   REVISIONS" section in <a href="gitrevisions.html">gitrevisions(7)</a>) means the
   commits in the specified range.
</p>
</li>
</ol></div>
<div class="paragraph"><p>The first rule takes precedence in the case of a single &lt;commit&gt;.  To
apply the second rule, i.e., format everything since the beginning of
history up until &lt;commit&gt;, use the <em>--root</em> option: <code>git format-patch
--root &lt;commit&gt;</code>.  If you want to format only &lt;commit&gt; itself, you
can do this with <code>git format-patch -1 &lt;commit&gt;</code>.</p></div>
<div class="paragraph"><p>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. With the <code>--numbered-files</code> 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 <code>--stdout</code> option is specified.</p></div>
<div class="paragraph"><p>If <code>-o</code> is specified, output files are created in &lt;dir&gt;.  Otherwise
they are created in the current working directory. The default path
can be set with the <code>format.outputDirectory</code> configuration option.
The <code>-o</code> option takes precedence over <code>format.outputDirectory</code>.
To store patches in the current working directory even when
<code>format.outputDirectory</code> points elsewhere, use <code>-o .</code>.</p></div>
<div class="paragraph"><p>By default, the subject of a single patch is "[PATCH] " followed by
the concatenation of lines from the commit message up to the first blank
line (see the DISCUSSION section of <a href="git-commit.html">git-commit(1)</a>).</p></div>
<div class="paragraph"><p>When multiple patches are output, the subject prefix will instead be
"[PATCH n/m] ".  To force 1/1 to be added for a single patch, use <code>-n</code>.
To omit patch numbers from the subject, use <code>-N</code>.</p></div>
<div class="paragraph"><p>If given <code>--thread</code>, <code>git-format-patch</code> will generate <code>In-Reply-To</code> and
<code>References</code> headers to make the second and subsequent patch mails appear
as replies to the first mail; this also generates a <code>Message-Id</code> header to
reference.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
-p
</dt>
<dt class="hdlist1">
--no-stat
</dt>
<dd>
<p>
        Generate plain patches without any diffstats.
</p>
</dd>
<dt class="hdlist1">
-U&lt;n&gt;
</dt>
<dt class="hdlist1">
--unified=&lt;n&gt;
</dt>
<dd>
<p>
        Generate diffs with &lt;n&gt; lines of context instead of
        the usual three.
</p>
</dd>
<dt class="hdlist1">
--indent-heuristic
</dt>
<dt class="hdlist1">
--no-indent-heuristic
</dt>
<dd>
<p>
        These are to help debugging and tuning experimental heuristics
        (which are off by default) that shift diff hunk boundaries to
        make patches easier to read.
</p>
</dd>
<dt class="hdlist1">
--minimal
</dt>
<dd>
<p>
        Spend extra time to make sure the smallest possible
        diff is produced.
</p>
</dd>
<dt class="hdlist1">
--patience
</dt>
<dd>
<p>
        Generate a diff using the "patience diff" algorithm.
</p>
</dd>
<dt class="hdlist1">
--histogram
</dt>
<dd>
<p>
        Generate a diff using the "histogram diff" algorithm.
</p>
</dd>
<dt class="hdlist1">
--diff-algorithm={patience|minimal|histogram|myers}
</dt>
<dd>
<p>
        Choose a diff algorithm. The variants are as follows:
</p>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
<code>default</code>, <code>myers</code>
</dt>
<dd>
<p>
        The basic greedy diff algorithm. Currently, this is the default.
</p>
</dd>
<dt class="hdlist1">
<code>minimal</code>
</dt>
<dd>
<p>
        Spend extra time to make sure the smallest possible diff is
        produced.
</p>
</dd>
<dt class="hdlist1">
<code>patience</code>
</dt>
<dd>
<p>
        Use "patience diff" algorithm when generating patches.
</p>
</dd>
<dt class="hdlist1">
<code>histogram</code>
</dt>
<dd>
<p>
        This algorithm extends the patience algorithm to "support
        low-occurrence common elements".
</p>
</dd>
</dl></div>
</div></div>
<div class="paragraph"><p>For instance, if you configured diff.algorithm variable to a
non-default value and want to use the default one, then you
have to use <code>--diff-algorithm=default</code> option.</p></div>
</dd>
<dt class="hdlist1">
--stat[=&lt;width&gt;[,&lt;name-width&gt;[,&lt;count&gt;]]]
</dt>
<dd>
<p>
        Generate a diffstat. By default, as much space as necessary
        will be used for the filename part, and the rest for the graph
        part. Maximum width defaults to terminal width, or 80 columns
        if not connected to a terminal, and can be overridden by
        <code>&lt;width&gt;</code>. The width of the filename part can be limited by
        giving another width <code>&lt;name-width&gt;</code> after a comma. The width
        of the graph part can be limited by using
        <code>--stat-graph-width=&lt;width&gt;</code> (affects all commands generating
        a stat graph) or by setting <code>diff.statGraphWidth=&lt;width&gt;</code>
        (does not affect <code>git format-patch</code>).
        By giving a third parameter <code>&lt;count&gt;</code>, you can limit the
        output to the first <code>&lt;count&gt;</code> lines, followed by <code>...</code> if
        there are more.
</p>
<div class="paragraph"><p>These parameters can also be set individually with <code>--stat-width=&lt;width&gt;</code>,
<code>--stat-name-width=&lt;name-width&gt;</code> and <code>--stat-count=&lt;count&gt;</code>.</p></div>
</dd>
<dt class="hdlist1">
--numstat
</dt>
<dd>
<p>
        Similar to <code>--stat</code>, but shows number of added and
        deleted lines in decimal notation and pathname without
        abbreviation, to make it more machine friendly.  For
        binary files, outputs two <code>-</code> instead of saying
        <code>0 0</code>.
</p>
</dd>
<dt class="hdlist1">
--shortstat
</dt>
<dd>
<p>
        Output only the last line of the <code>--stat</code> format containing total
        number of modified files, as well as number of added and deleted
        lines.
</p>
</dd>
<dt class="hdlist1">
--dirstat[=&lt;param1,param2,&#8230;&gt;]
</dt>
<dd>
<p>
        Output the distribution of relative amount of changes for each
        sub-directory. The behavior of <code>--dirstat</code> can be customized by
        passing it a comma separated list of parameters.
        The defaults are controlled by the <code>diff.dirstat</code> configuration
        variable (see <a href="git-config.html">git-config(1)</a>).
        The following parameters are available:
</p>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
<code>changes</code>
</dt>
<dd>
<p>
        Compute the dirstat numbers by counting the lines that have been
        removed from the source, or added to the destination. This ignores
        the amount of pure code movements within a file.  In other words,
        rearranging lines in a file is not counted as much as other changes.
        This is the default behavior when no parameter is given.
</p>
</dd>
<dt class="hdlist1">
<code>lines</code>
</dt>
<dd>
<p>
        Compute the dirstat numbers by doing the regular line-based diff
        analysis, and summing the removed/added line counts. (For binary
        files, count 64-byte chunks instead, since binary files have no
        natural concept of lines). This is a more expensive <code>--dirstat</code>
        behavior than the <code>changes</code> behavior, but it does count rearranged
        lines within a file as much as other changes. The resulting output
        is consistent with what you get from the other <code>--*stat</code> options.
</p>
</dd>
<dt class="hdlist1">
<code>files</code>
</dt>
<dd>
<p>
        Compute the dirstat numbers by counting the number of files changed.
        Each changed file counts equally in the dirstat analysis. This is
        the computationally cheapest <code>--dirstat</code> behavior, since it does
        not have to look at the file contents at all.
</p>
</dd>
<dt class="hdlist1">
<code>cumulative</code>
</dt>
<dd>
<p>
        Count changes in a child directory for the parent directory as well.
        Note that when using <code>cumulative</code>, the sum of the percentages
        reported may exceed 100%. The default (non-cumulative) behavior can
        be specified with the <code>noncumulative</code> parameter.
</p>
</dd>
<dt class="hdlist1">
&lt;limit&gt;
</dt>
<dd>
<p>
        An integer parameter specifies a cut-off percent (3% by default).
        Directories contributing less than this percentage of the changes
        are not shown in the output.
</p>
</dd>
</dl></div>
</div></div>
<div class="paragraph"><p>Example: The following will count changed files, while ignoring
directories with less than 10% of the total amount of changed files,
and accumulating child directory counts in the parent directories:
<code>--dirstat=files,10,cumulative</code>.</p></div>
</dd>
<dt class="hdlist1">
--summary
</dt>
<dd>
<p>
        Output a condensed summary of extended header information
        such as creations, renames and mode changes.
</p>
</dd>
<dt class="hdlist1">
--no-renames
</dt>
<dd>
<p>
        Turn off rename detection, even when the configuration
        file gives the default to do so.
</p>
</dd>
<dt class="hdlist1">
--full-index
</dt>
<dd>
<p>
        Instead of the first handful of characters, show the full
        pre- and post-image blob object names on the "index"
        line when generating patch format output.
</p>
</dd>
<dt class="hdlist1">
--binary
</dt>
<dd>
<p>
        In addition to <code>--full-index</code>, output a binary diff that
        can be applied with <code>git-apply</code>.
</p>
</dd>
<dt class="hdlist1">
--abbrev[=&lt;n&gt;]
</dt>
<dd>
<p>
        Instead of showing the full 40-byte hexadecimal object
        name in diff-raw format output and diff-tree header
        lines, show only a partial prefix.  This is
        independent of the <code>--full-index</code> option above, which controls
        the diff-patch output format.  Non default number of
        digits can be specified with <code>--abbrev=&lt;n&gt;</code>.
</p>
</dd>
<dt class="hdlist1">
-B[&lt;n&gt;][/&lt;m&gt;]
</dt>
<dt class="hdlist1">
--break-rewrites[=[&lt;n&gt;][/&lt;m&gt;]]
</dt>
<dd>
<p>
        Break complete rewrite changes into pairs of delete and
        create. This serves two purposes:
</p>
<div class="paragraph"><p>It affects the way a change that amounts to a total rewrite of a file
not as a series of deletion and insertion mixed together with a very
few lines that happen to match textually as the context, but as a
single deletion of everything old followed by a single insertion of
everything new, and the number <code>m</code> controls this aspect of the -B
option (defaults to 60%). <code>-B/70%</code> specifies that less than 30% of the
original should remain in the result for Git to consider it a total
rewrite (i.e. otherwise the resulting patch will be a series of
deletion and insertion mixed together with context lines).</p></div>
<div class="paragraph"><p>When used with -M, a totally-rewritten file is also considered as the
source of a rename (usually -M only considers a file that disappeared
as the source of a rename), and the number <code>n</code> controls this aspect of
the -B option (defaults to 50%). <code>-B20%</code> specifies that a change with
addition and deletion compared to 20% or more of the file&#8217;s size are
eligible for being picked up as a possible source of a rename to
another file.</p></div>
</dd>
<dt class="hdlist1">
-M[&lt;n&gt;]
</dt>
<dt class="hdlist1">
--find-renames[=&lt;n&gt;]
</dt>
<dd>
<p>
        Detect renames.
        If <code>n</code> is specified, it is a threshold on the similarity
        index (i.e. amount of addition/deletions compared to the
        file&#8217;s size). For example, <code>-M90%</code> means Git should consider a
        delete/add pair to be a rename if more than 90% of the file
        hasn&#8217;t changed.  Without a <code>%</code> sign, the number is to be read as
        a fraction, with a decimal point before it.  I.e., <code>-M5</code> becomes
        0.5, and is thus the same as <code>-M50%</code>.  Similarly, <code>-M05</code> is
        the same as <code>-M5%</code>.  To limit detection to exact renames, use
        <code>-M100%</code>.  The default similarity index is 50%.
</p>
</dd>
<dt class="hdlist1">
-C[&lt;n&gt;]
</dt>
<dt class="hdlist1">
--find-copies[=&lt;n&gt;]
</dt>
<dd>
<p>
        Detect copies as well as renames.  See also <code>--find-copies-harder</code>.
        If <code>n</code> is specified, it has the same meaning as for <code>-M&lt;n&gt;</code>.
</p>
</dd>
<dt class="hdlist1">
--find-copies-harder
</dt>
<dd>
<p>
        For performance reasons, by default, <code>-C</code> option finds copies only
        if the original file of the copy was modified in the same
        changeset.  This flag makes the command
        inspect unmodified files as candidates for the source of
        copy.  This is a very expensive operation for large
        projects, so use it with caution.  Giving more than one
        <code>-C</code> option has the same effect.
</p>
</dd>
<dt class="hdlist1">
-D
</dt>
<dt class="hdlist1">
--irreversible-delete
</dt>
<dd>
<p>
        Omit the preimage for deletes, i.e. print only the header but not
        the diff between the preimage and <code>/dev/null</code>. The resulting patch
        is not meant to be applied with <code>patch</code> or <code>git apply</code>; this is
        solely for people who want to just concentrate on reviewing the
        text after the change. In addition, the output obviously lack
        enough information to apply such a patch in reverse, even manually,
        hence the name of the option.
</p>
<div class="paragraph"><p>When used together with <code>-B</code>, omit also the preimage in the deletion part
of a delete/create pair.</p></div>
</dd>
<dt class="hdlist1">
-l&lt;num&gt;
</dt>
<dd>
<p>
        The <code>-M</code> and <code>-C</code> options require O(n^2) processing time where n
        is the number of potential rename/copy targets.  This
        option prevents rename/copy detection from running if
        the number of rename/copy targets exceeds the specified
        number.
</p>
</dd>
<dt class="hdlist1">
-O&lt;orderfile&gt;
</dt>
<dd>
<p>
        Control the order in which files appear in the output.
        This overrides the <code>diff.orderFile</code> configuration variable
        (see <a href="git-config.html">git-config(1)</a>).  To cancel <code>diff.orderFile</code>,
        use <code>-O/dev/null</code>.
</p>
<div class="paragraph"><p>The output order is determined by the order of glob patterns in
&lt;orderfile&gt;.
All files with pathnames that match the first pattern are output
first, all files with pathnames that match the second pattern (but not
the first) are output next, and so on.
All files with pathnames that do not match any pattern are output
last, as if there was an implicit match-all pattern at the end of the
file.
If multiple pathnames have the same rank (they match the same pattern
but no earlier patterns), their output order relative to each other is
the normal order.</p></div>
<div class="paragraph"><p>&lt;orderfile&gt; is parsed as follows:</p></div>
<div class="openblock">
<div class="content">
<div class="ulist"><ul>
<li>
<p>
Blank lines are ignored, so they can be used as separators for
   readability.
</p>
</li>
<li>
<p>
Lines starting with a hash ("<code>#</code>") are ignored, so they can be used
   for comments.  Add a backslash ("<code>\</code>") to the beginning of the
   pattern if it starts with a hash.
</p>
</li>
<li>
<p>
Each other line contains a single pattern.
</p>
</li>
</ul></div>
</div></div>
<div class="paragraph"><p>Patterns have the same syntax and semantics as patterns used for
fnmantch(3) without the FNM_PATHNAME flag, except a pathname also
matches a pattern if removing any number of the final pathname
components matches the pattern.  For example, the pattern "<code>foo*bar</code>"
matches "<code>fooasdfbar</code>" and "<code>foo/bar/baz/asdf</code>" but not "<code>foobarx</code>".</p></div>
</dd>
<dt class="hdlist1">
-a
</dt>
<dt class="hdlist1">
--text
</dt>
<dd>
<p>
        Treat all files as text.
</p>
</dd>
<dt class="hdlist1">
--ignore-space-at-eol
</dt>
<dd>
<p>
        Ignore changes in whitespace at EOL.
</p>
</dd>
<dt class="hdlist1">
-b
</dt>
<dt class="hdlist1">
--ignore-space-change
</dt>
<dd>
<p>
        Ignore changes in amount of whitespace.  This ignores whitespace
        at line end, and considers all other sequences of one or
        more whitespace characters to be equivalent.
</p>
</dd>
<dt class="hdlist1">
-w
</dt>
<dt class="hdlist1">
--ignore-all-space
</dt>
<dd>
<p>
        Ignore whitespace when comparing lines.  This ignores
        differences even if one line has whitespace where the other
        line has none.
</p>
</dd>
<dt class="hdlist1">
--ignore-blank-lines
</dt>
<dd>
<p>
        Ignore changes whose lines are all blank.
</p>
</dd>
<dt class="hdlist1">
--inter-hunk-context=&lt;lines&gt;
</dt>
<dd>
<p>
        Show the context between diff hunks, up to the specified number
        of lines, thereby fusing hunks that are close to each other.
        Defaults to <code>diff.interHunkContext</code> or 0 if the config option
        is unset.
</p>
</dd>
<dt class="hdlist1">
-W
</dt>
<dt class="hdlist1">
--function-context
</dt>
<dd>
<p>
        Show whole surrounding functions of changes.
</p>
</dd>
<dt class="hdlist1">
--ext-diff
</dt>
<dd>
<p>
        Allow an external diff helper to be executed. If you set an
        external diff driver with <a href="gitattributes.html">gitattributes(5)</a>, you need
        to use this option with <a href="git-log.html">git-log(1)</a> and friends.
</p>
</dd>
<dt class="hdlist1">
--no-ext-diff
</dt>
<dd>
<p>
        Disallow external diff drivers.
</p>
</dd>
<dt class="hdlist1">
--textconv
</dt>
<dt class="hdlist1">
--no-textconv
</dt>
<dd>
<p>
        Allow (or disallow) external text conversion filters to be run
        when comparing binary files. See <a href="gitattributes.html">gitattributes(5)</a> for
        details. Because textconv filters are typically a one-way
        conversion, the resulting diff is suitable for human
        consumption, but cannot be applied. For this reason, textconv
        filters are enabled by default only for <a href="git-diff.html">git-diff(1)</a> and
        <a href="git-log.html">git-log(1)</a>, but not for <a href="git-format-patch.html">git-format-patch(1)</a> or
        diff plumbing commands.
</p>
</dd>
<dt class="hdlist1">
--ignore-submodules[=&lt;when&gt;]
</dt>
<dd>
<p>
        Ignore changes to submodules in the diff generation. &lt;when&gt; can be
        either "none", "untracked", "dirty" or "all", which is the default.
        Using "none" will consider the submodule modified when it either contains
        untracked or modified files or its HEAD differs from the commit recorded
        in the superproject and can be used to override any settings of the
        <em>ignore</em> option in <a href="git-config.html">git-config(1)</a> or <a href="gitmodules.html">gitmodules(5)</a>. When
        "untracked" is used submodules are not considered dirty when they only
        contain untracked content (but they are still scanned for modified
        content). Using "dirty" ignores all changes to the work tree of submodules,
        only changes to the commits stored in the superproject are shown (this was
        the behavior until 1.7.0). Using "all" hides all changes to submodules.
</p>
</dd>
<dt class="hdlist1">
--src-prefix=&lt;prefix&gt;
</dt>
<dd>
<p>
        Show the given source prefix instead of "a/".
</p>
</dd>
<dt class="hdlist1">
--dst-prefix=&lt;prefix&gt;
</dt>
<dd>
<p>
        Show the given destination prefix instead of "b/".
</p>
</dd>
<dt class="hdlist1">
--no-prefix
</dt>
<dd>
<p>
        Do not show any source or destination prefix.
</p>
</dd>
<dt class="hdlist1">
--line-prefix=&lt;prefix&gt;
</dt>
<dd>
<p>
        Prepend an additional prefix to every line of output.
</p>
</dd>
<dt class="hdlist1">
--ita-invisible-in-index
</dt>
<dd>
<p>
        By default entries added by "git add -N" appear as an existing
        empty file in "git diff" and a new file in "git diff --cached".
        This option makes the entry appear as a new file in "git diff"
        and non-existent in "git diff --cached". This option could be
        reverted with <code>--ita-visible-in-index</code>. Both options are
        experimental and could be removed in future.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>For more detailed explanation on these common options, see also
<a href="gitdiffcore.html">gitdiffcore(7)</a>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
-&lt;n&gt;
</dt>
<dd>
<p>
        Prepare patches from the topmost &lt;n&gt; commits.
</p>
</dd>
<dt class="hdlist1">
-o &lt;dir&gt;
</dt>
<dt class="hdlist1">
--output-directory &lt;dir&gt;
</dt>
<dd>
<p>
        Use &lt;dir&gt; to store the resulting files, instead of the
        current working directory.
</p>
</dd>
<dt class="hdlist1">
-n
</dt>
<dt class="hdlist1">
--numbered
</dt>
<dd>
<p>
        Name output in <em>[PATCH n/m]</em> format, even with a single patch.
</p>
</dd>
<dt class="hdlist1">
-N
</dt>
<dt class="hdlist1">
--no-numbered
</dt>
<dd>
<p>
        Name output in <em>[PATCH]</em> format.
</p>
</dd>
<dt class="hdlist1">
--start-number &lt;n&gt;
</dt>
<dd>
<p>
        Start numbering the patches at &lt;n&gt; instead of 1.
</p>
</dd>
<dt class="hdlist1">
--numbered-files
</dt>
<dd>
<p>
        Output file names will be a simple number sequence
        without the default first line of the commit appended.
</p>
</dd>
<dt class="hdlist1">
-k
</dt>
<dt class="hdlist1">
--keep-subject
</dt>
<dd>
<p>
        Do not strip/add <em>[PATCH]</em> from the first line of the
        commit log message.
</p>
</dd>
<dt class="hdlist1">
-s
</dt>
<dt class="hdlist1">
--signoff
</dt>
<dd>
<p>
        Add <code>Signed-off-by:</code> line to the commit message, using
        the committer identity of yourself.
        See the signoff option in <a href="git-commit.html">git-commit(1)</a> for more information.
</p>
</dd>
<dt class="hdlist1">
--stdout
</dt>
<dd>
<p>
        Print all commits to the standard output in mbox format,
        instead of creating a file for each one.
</p>
</dd>
<dt class="hdlist1">
--attach[=&lt;boundary&gt;]
</dt>
<dd>
<p>
        Create multipart/mixed attachment, the first part of
        which is the commit message and the patch itself in the
        second part, with <code>Content-Disposition: attachment</code>.
</p>
</dd>
<dt class="hdlist1">
--no-attach
</dt>
<dd>
<p>
        Disable the creation of an attachment, overriding the
        configuration setting.
</p>
</dd>
<dt class="hdlist1">
--inline[=&lt;boundary&gt;]
</dt>
<dd>
<p>
        Create multipart/mixed attachment, the first part of
        which is the commit message and the patch itself in the
        second part, with <code>Content-Disposition: inline</code>.
</p>
</dd>
<dt class="hdlist1">
--thread[=&lt;style&gt;]
</dt>
<dt class="hdlist1">
--no-thread
</dt>
<dd>
<p>
        Controls addition of <code>In-Reply-To</code> and <code>References</code> headers to
        make the second and subsequent mails appear as replies to the
        first.  Also controls generation of the <code>Message-Id</code> header to
        reference.
</p>
<div class="paragraph"><p>The optional &lt;style&gt; argument can be either <code>shallow</code> or <code>deep</code>.
<em>shallow</em> threading makes every mail a reply to the head of the
series, where the head is chosen from the cover letter, the
<code>--in-reply-to</code>, and the first patch mail, in this order.  <em>deep</em>
threading makes every mail a reply to the previous one.</p></div>
<div class="paragraph"><p>The default is <code>--no-thread</code>, unless the <code>format.thread</code> configuration
is set.  If <code>--thread</code> is specified without a style, it defaults to the
style specified by <code>format.thread</code> if any, or else <code>shallow</code>.</p></div>
<div class="paragraph"><p>Beware that the default for <em>git send-email</em> is to thread emails
itself.  If you want <code>git format-patch</code> to take care of threading, you
will want to ensure that threading is disabled for <code>git send-email</code>.</p></div>
</dd>
<dt class="hdlist1">
--in-reply-to=Message-Id
</dt>
<dd>
<p>
        Make the first mail (or all the mails with <code>--no-thread</code>) appear as a
        reply to the given Message-Id, which avoids breaking threads to
        provide a new patch series.
</p>
</dd>
<dt class="hdlist1">
--ignore-if-in-upstream
</dt>
<dd>
<p>
        Do not include a patch that matches a commit in
        &lt;until&gt;..&lt;since&gt;.  This will examine all patches reachable
        from &lt;since&gt; but not from &lt;until&gt; and compare them with the
        patches being generated, and any patch that matches is
        ignored.
</p>
</dd>
<dt class="hdlist1">
--subject-prefix=&lt;Subject-Prefix&gt;
</dt>
<dd>
<p>
        Instead of the standard <em>[PATCH]</em> prefix in the subject
        line, instead use <em>[&lt;Subject-Prefix&gt;]</em>. This
        allows for useful naming of a patch series, and can be
        combined with the <code>--numbered</code> option.
</p>
</dd>
<dt class="hdlist1">
--rfc
</dt>
<dd>
<p>
        Alias for <code>--subject-prefix="RFC PATCH"</code>. RFC means "Request For
        Comments"; use this when sending an experimental patch for
        discussion rather than application.
</p>
</dd>
<dt class="hdlist1">
-v &lt;n&gt;
</dt>
<dt class="hdlist1">
--reroll-count=&lt;n&gt;
</dt>
<dd>
<p>
        Mark the series as the &lt;n&gt;-th iteration of the topic. The
        output filenames have <code>v&lt;n&gt;</code> prepended to them, and the
        subject prefix ("PATCH" by default, but configurable via the
        <code>--subject-prefix</code> option) has ` v&lt;n&gt;` appended to it.  E.g.
        <code>--reroll-count=4</code> may produce <code>v4-0001-add-makefile.patch</code>
        file that has "Subject: [PATCH v4 1/20] Add makefile" in it.
</p>
</dd>
<dt class="hdlist1">
--to=&lt;email&gt;
</dt>
<dd>
<p>
        Add a <code>To:</code> header to the email headers. This is in addition
        to any configured headers, and may be used multiple times.
        The negated form <code>--no-to</code> discards all <code>To:</code> headers added so
        far (from config or command line).
</p>
</dd>
<dt class="hdlist1">
--cc=&lt;email&gt;
</dt>
<dd>
<p>
        Add a <code>Cc:</code> header to the email headers. This is in addition
        to any configured headers, and may be used multiple times.
        The negated form <code>--no-cc</code> discards all <code>Cc:</code> headers added so
        far (from config or command line).
</p>
</dd>
<dt class="hdlist1">
--from
</dt>
<dt class="hdlist1">
--from=&lt;ident&gt;
</dt>
<dd>
<p>
        Use <code>ident</code> in the <code>From:</code> header of each commit email. If the
        author ident of the commit is not textually identical to the
        provided <code>ident</code>, place a <code>From:</code> header in the body of the
        message with the original author. If no <code>ident</code> is given, use
        the committer ident.
</p>
<div class="paragraph"><p>Note that this option is only useful if you are actually sending the
emails and want to identify yourself as the sender, but retain the
original author (and <code>git am</code> will correctly pick up the in-body
header). Note also that <code>git send-email</code> already handles this
transformation for you, and this option should not be used if you are
feeding the result to <code>git send-email</code>.</p></div>
</dd>
<dt class="hdlist1">
--add-header=&lt;header&gt;
</dt>
<dd>
<p>
        Add an arbitrary header to the email headers.  This is in addition
        to any configured headers, and may be used multiple times.
        For example, <code>--add-header="Organization: git-foo"</code>.
        The negated form <code>--no-add-header</code> discards <strong>all</strong> (<code>To:</code>,
        <code>Cc:</code>, and custom) headers added so far from config or command
        line.
</p>
</dd>
<dt class="hdlist1">
--[no-]cover-letter
</dt>
<dd>
<p>
        In addition to the patches, generate a cover letter file
        containing the branch description, shortlog and the overall diffstat.  You can
        fill in a description in the file before sending it out.
</p>
</dd>
<dt class="hdlist1">
--notes[=&lt;ref&gt;]
</dt>
<dd>
<p>
        Append the notes (see <a href="git-notes.html">git-notes(1)</a>) for the commit
        after the three-dash line.
</p>
<div class="paragraph"><p>The expected use case of this is to write supporting explanation for
the commit that does not belong to the commit log message proper,
and include it with the patch submission. While one can simply write
these explanations after <code>format-patch</code> has run but before sending,
keeping them as Git notes allows them to be maintained between versions
of the patch series (but see the discussion of the <code>notes.rewrite</code>
configuration options in <a href="git-notes.html">git-notes(1)</a> to use this workflow).</p></div>
</dd>
<dt class="hdlist1">
--[no-]signature=&lt;signature&gt;
</dt>
<dd>
<p>
        Add a signature to each message produced. Per RFC 3676 the signature
        is separated from the body by a line with '-- ' on it. If the
        signature option is omitted the signature defaults to the Git version
        number.
</p>
</dd>
<dt class="hdlist1">
--signature-file=&lt;file&gt;
</dt>
<dd>
<p>
        Works just like --signature except the signature is read from a file.
</p>
</dd>
<dt class="hdlist1">
--suffix=.&lt;sfx&gt;
</dt>
<dd>
<p>
        Instead of using <code>.patch</code> as the suffix for generated
        filenames, use specified suffix.  A common alternative is
        <code>--suffix=.txt</code>.  Leaving this empty will remove the <code>.patch</code>
        suffix.
</p>
<div class="paragraph"><p>Note that the leading character does not have to be a dot; for example,
you can use <code>--suffix=-patch</code> to get <code>0001-description-of-my-change-patch</code>.</p></div>
</dd>
<dt class="hdlist1">
-q
</dt>
<dt class="hdlist1">
--quiet
</dt>
<dd>
<p>
        Do not print the names of the generated files to standard output.
</p>
</dd>
<dt class="hdlist1">
--no-binary
</dt>
<dd>
<p>
        Do not output contents of changes in binary files, instead
        display a notice that those files changed.  Patches generated
        using this option cannot be applied properly, but they are
        still useful for code review.
</p>
</dd>
<dt class="hdlist1">
--zero-commit
</dt>
<dd>
<p>
  Output an all-zero hash in each patch&#8217;s From header instead
  of the hash of the commit.
</p>
</dd>
<dt class="hdlist1">
--base=&lt;commit&gt;
</dt>
<dd>
<p>
        Record the base tree information to identify the state the
        patch series applies to.  See the BASE TREE INFORMATION section
        below for details.
</p>
</dd>
<dt class="hdlist1">
--root
</dt>
<dd>
<p>
        Treat the revision argument as a &lt;revision range&gt;, even if it
        is just a single commit (that would normally be treated as a
        &lt;since&gt;).  Note that root commits included in the specified
        range are always formatted as creation patches, independently
        of this flag.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_configuration">CONFIGURATION</h2>
<div class="sectionbody">
<div class="paragraph"><p>You can specify extra mail header lines to be added to each message,
defaults for the subject prefix and file suffix, number patches when
outputting more than one patch, add "To" or "Cc:" headers, configure
attachments, and sign off patches with configuration variables.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>[format]
        headers = "Organization: git-foo\n"
        subjectPrefix = CHANGE
        suffix = .txt
        numbered = auto
        to = &lt;email&gt;
        cc = &lt;email&gt;
        attach [ = mime-boundary-string ]
        signOff = true
        coverletter = auto</code></pre>
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_discussion">DISCUSSION</h2>
<div class="sectionbody">
<div class="paragraph"><p>The patch produced by <em>git format-patch</em> is in UNIX mailbox format,
with a fixed "magic" time stamp to indicate that the file is output
from format-patch rather than a real mailbox, like so:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>From 8f72bad1baf19a53459661343e21d6491c3908d3 Mon Sep 17 00:00:00 2001
From: Tony Luck &lt;tony.luck@intel.com&gt;
Date: Tue, 13 Jul 2010 11:42:54 -0700
Subject: [PATCH] =?UTF-8?q?[IA64]=20Put=20ia64=20config=20files=20on=20the=20?=
 =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20diet?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

arch/arm config files were slimmed down using a python script
(See commit c2330e286f68f1c408b4aa6515ba49d57f05beae comment)

Do the same for ia64 so we can have sleek &amp; trim looking
...</code></pre>
</div></div>
<div class="paragraph"><p>Typically it will be placed in a MUA&#8217;s drafts folder, edited to add
timely commentary that should not go in the changelog after the three
dashes, and then sent as a message whose body, in our example, starts
with "arch/arm config files were&#8230;".  On the receiving end, readers
can save interesting patches in a UNIX mailbox and apply them with
<a href="git-am.html">git-am(1)</a>.</p></div>
<div class="paragraph"><p>When a patch is part of an ongoing discussion, the patch generated by
<em>git format-patch</em> can be tweaked to take advantage of the <em>git am
--scissors</em> feature.  After your response to the discussion comes a
line that consists solely of "<code>-- &gt;8 --</code>" (scissors and perforation),
followed by the patch with unnecessary header fields removed:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>...
&gt; So we should do such-and-such.

Makes sense to me.  How about this patch?

-- &gt;8 --
Subject: [IA64] Put ia64 config files on the Uwe Kleine-König diet

arch/arm config files were slimmed down using a python script
...</code></pre>
</div></div>
<div class="paragraph"><p>When sending a patch this way, most often you are sending your own
patch, so in addition to the "<code>From $SHA1 $magic_timestamp</code>" marker you
should omit <code>From:</code> and <code>Date:</code> lines from the patch file.  The patch
title is likely to be different from the subject of the discussion the
patch is in response to, so it is likely that you would want to keep
the Subject: line, like the example above.</p></div>
<div class="sect2">
<h3 id="_checking_for_patch_corruption">Checking for patch corruption</h3>
<div class="paragraph"><p>Many mailers if not set up properly will corrupt whitespace.  Here are
two common types of corruption:</p></div>
<div class="ulist"><ul>
<li>
<p>
Empty context lines that do not have <em>any</em> whitespace.
</p>
</li>
<li>
<p>
Non-empty context lines that have one extra whitespace at the
  beginning.
</p>
</li>
</ul></div>
<div class="paragraph"><p>One way to test if your MUA is set up correctly is:</p></div>
<div class="ulist"><ul>
<li>
<p>
Send the patch to yourself, exactly the way you would, except
  with To: and Cc: lines that do not contain the list and
  maintainer address.
</p>
</li>
<li>
<p>
Save that patch to a file in UNIX mailbox format.  Call it a.patch,
  say.
</p>
</li>
<li>
<p>
Apply it:
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ git fetch &lt;project&gt; master:test-apply
$ git checkout test-apply
$ git reset --hard
$ git am a.patch</code></pre>
</div></div>
</li>
</ul></div>
<div class="paragraph"><p>If it does not apply correctly, there can be various reasons.</p></div>
<div class="ulist"><ul>
<li>
<p>
The patch itself does not apply cleanly.  That is <em>bad</em> but
  does not have much to do with your MUA.  You might want to rebase
  the patch with <a href="git-rebase.html">git-rebase(1)</a> before regenerating it in
  this case.
</p>
</li>
<li>
<p>
The MUA corrupted your patch; "am" would complain that
  the patch does not apply.  Look in the .git/rebase-apply/ subdirectory and
  see what <em>patch</em> file contains and check for the common
  corruption patterns mentioned above.
</p>
</li>
<li>
<p>
While at it, check the <em>info</em> and <em>final-commit</em> files as well.
  If what is in <em>final-commit</em> is not exactly what you would want to
  see in the commit log message, it is very likely that the
  receiver would end up hand editing the log message when applying
  your patch.  Things like "Hi, this is my first patch.\n" in the
  patch e-mail should come after the three-dash line that signals
  the end of the commit message.
</p>
</li>
</ul></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_mua_specific_hints">MUA-SPECIFIC HINTS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Here are some hints on how to successfully submit patches inline using
various mailers.</p></div>
<div class="sect2">
<h3 id="_gmail">GMail</h3>
<div class="paragraph"><p>GMail does not have any way to turn off line wrapping in the web
interface, so it will mangle any emails that you send.  You can however
use "git send-email" and send your patches through the GMail SMTP server, or
use any IMAP email client to connect to the google IMAP server and forward
the emails through that.</p></div>
<div class="paragraph"><p>For hints on using <em>git send-email</em> to send your patches through the
GMail SMTP server, see the EXAMPLE section of <a href="git-send-email.html">git-send-email(1)</a>.</p></div>
<div class="paragraph"><p>For hints on submission using the IMAP interface, see the EXAMPLE
section of <a href="git-imap-send.html">git-imap-send(1)</a>.</p></div>
</div>
<div class="sect2">
<h3 id="_thunderbird">Thunderbird</h3>
<div class="paragraph"><p>By default, Thunderbird will both wrap emails as well as flag
them as being <em>format=flowed</em>, both of which will make the
resulting email unusable by Git.</p></div>
<div class="paragraph"><p>There are three different approaches: use an add-on to turn off line wraps,
configure Thunderbird to not mangle patches, or use
an external editor to keep Thunderbird from mangling the patches.</p></div>
<div class="sect3">
<h4 id="_approach_1_add_on">Approach #1 (add-on)</h4>
<div class="paragraph"><p>Install the Toggle Word Wrap add-on that is available from
<a href="https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/">https://addons.mozilla.org/thunderbird/addon/toggle-word-wrap/</a>
It adds a menu entry "Enable Word Wrap" in the composer&#8217;s "Options" menu
that you can tick off. Now you can compose the message as you otherwise do
(cut + paste, <em>git format-patch</em> | <em>git imap-send</em>, etc), but you have to
insert line breaks manually in any text that you type.</p></div>
</div>
<div class="sect3">
<h4 id="_approach_2_configuration">Approach #2 (configuration)</h4>
<div class="paragraph"><p>Three steps:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Configure your mail server composition as plain text:
   Edit&#8230;Account Settings&#8230;Composition &amp; Addressing,
   uncheck "Compose Messages in HTML".
</p>
</li>
<li>
<p>
Configure your general composition window to not wrap.
</p>
<div class="paragraph"><p>In Thunderbird 2:
Edit..Preferences..Composition, wrap plain text messages at 0</p></div>
<div class="paragraph"><p>In Thunderbird 3:
Edit..Preferences..Advanced..Config Editor.  Search for
"mail.wrap_long_lines".
Toggle it to make sure it is set to <code>false</code>. Also, search for
"mailnews.wraplength" and set the value to 0.</p></div>
</li>
<li>
<p>
Disable the use of format=flowed:
Edit..Preferences..Advanced..Config Editor.  Search for
"mailnews.send_plaintext_flowed".
Toggle it to make sure it is set to <code>false</code>.
</p>
</li>
</ol></div>
<div class="paragraph"><p>After that is done, you should be able to compose email as you
otherwise would (cut + paste, <em>git format-patch</em> | <em>git imap-send</em>, etc),
and the patches will not be mangled.</p></div>
</div>
<div class="sect3">
<h4 id="_approach_3_external_editor">Approach #3 (external editor)</h4>
<div class="paragraph"><p>The following Thunderbird extensions are needed:
AboutConfig from <a href="http://aboutconfig.mozdev.org/">http://aboutconfig.mozdev.org/</a> and
External Editor from <a href="http://globs.org/articles.php?lng=en&amp;pg=8">http://globs.org/articles.php?lng=en&amp;pg=8</a></p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Prepare the patch as a text file using your method of choice.
</p>
</li>
<li>
<p>
Before opening a compose window, use Edit&#8594;Account Settings to
   uncheck the "Compose messages in HTML format" setting in the
   "Composition &amp; Addressing" panel of the account to be used to
   send the patch.
</p>
</li>
<li>
<p>
In the main Thunderbird window, <em>before</em> you open the compose
   window for the patch, use Tools&#8594;about:config to set the
   following to the indicated values:
</p>
<div class="listingblock">
<div class="content">
<pre><code>        mailnews.send_plaintext_flowed  =&gt; false
        mailnews.wraplength             =&gt; 0</code></pre>
</div></div>
</li>
<li>
<p>
Open a compose window and click the external editor icon.
</p>
</li>
<li>
<p>
In the external editor window, read in the patch file and exit
   the editor normally.
</p>
</li>
</ol></div>
<div class="paragraph"><p>Side note: it may be possible to do step 2 with
about:config and the following settings but no one&#8217;s tried yet.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        mail.html_compose                       =&gt; false
        mail.identity.default.compose_html      =&gt; false
        mail.identity.id?.compose_html          =&gt; false</code></pre>
</div></div>
<div class="paragraph"><p>There is a script in contrib/thunderbird-patch-inline which can help
you include patches with Thunderbird in an easy way. To use it, do the
steps above and then use the script as the external editor.</p></div>
</div>
</div>
<div class="sect2">
<h3 id="_kmail">KMail</h3>
<div class="paragraph"><p>This should help you to submit patches inline using KMail.</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
Prepare the patch as a text file.
</p>
</li>
<li>
<p>
Click on New Mail.
</p>
</li>
<li>
<p>
Go under "Options" in the Composer window and be sure that
   "Word wrap" is not set.
</p>
</li>
<li>
<p>
Use Message &#8594; Insert file&#8230; and insert the patch.
</p>
</li>
<li>
<p>
Back in the compose window: add whatever other text you wish to the
   message, complete the addressing and subject fields, and press send.
</p>
</li>
</ol></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_base_tree_information">BASE TREE INFORMATION</h2>
<div class="sectionbody">
<div class="paragraph"><p>The base tree information block is used for maintainers or third party
testers to know the exact state the patch series applies to. It consists
of the <em>base commit</em>, which is a well-known commit that is part of the
stable part of the project history everybody else works off of, and zero
or more <em>prerequisite patches</em>, which are well-known patches in flight
that is not yet part of the <em>base commit</em> that need to be applied on top
of <em>base commit</em> in topological order before the patches can be applied.</p></div>
<div class="paragraph"><p>The <em>base commit</em> is shown as "base-commit: " followed by the 40-hex of
the commit object name.  A <em>prerequisite patch</em> is shown as
"prerequisite-patch-id: " followed by the 40-hex <em>patch id</em>, which can
be obtained by passing the patch through the <code>git patch-id --stable</code>
command.</p></div>
<div class="paragraph"><p>Imagine that on top of the public commit P, you applied well-known
patches X, Y and Z from somebody else, and then built your three-patch
series A, B, C, the history would be like:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>---P---X---Y---Z---A---B---C</code></pre>
</div></div>
<div class="paragraph"><p>With <code>git format-patch --base=P -3 C</code> (or variants thereof, e.g. with
<code>--cover-letter</code> of using <code>Z..C</code> instead of <code>-3 C</code> to specify the
range), the base tree information block is shown at the end of the
first message the command outputs (either the first patch, or the
cover letter), like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>base-commit: P
prerequisite-patch-id: X
prerequisite-patch-id: Y
prerequisite-patch-id: Z</code></pre>
</div></div>
<div class="paragraph"><p>For non-linear topology, such as</p></div>
<div class="literalblock">
<div class="content">
<pre><code>---P---X---A---M---C
    \         /
     Y---Z---B</code></pre>
</div></div>
<div class="paragraph"><p>You can also use <code>git format-patch --base=P -3 C</code> to generate patches
for A, B and C, and the identifiers for P, X, Y, Z are appended at the
end of the first message.</p></div>
<div class="paragraph"><p>If set <code>--base=auto</code> in cmdline, it will track base commit automatically,
the base commit will be the merge base of tip commit of the remote-tracking
branch and revision-range specified in cmdline.
For a local branch, you need to track a remote branch by <code>git branch
--set-upstream-to</code> before using this option.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">EXAMPLES</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Extract commits between revisions R1 and R2, and apply them on top of
the current branch using <em>git am</em> to cherry-pick them:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git format-patch -k --stdout R1..R2 | git am -3 -k</code></pre>
</div></div>
</li>
<li>
<p>
Extract all commits which are in the current branch but not in the
origin branch:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git format-patch origin</code></pre>
</div></div>
<div class="paragraph"><p>For each commit a separate file is created in the current directory.</p></div>
</li>
<li>
<p>
Extract all commits that lead to <em>origin</em> since the inception of the
project:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git format-patch --root origin</code></pre>
</div></div>
</li>
<li>
<p>
The same as the previous one:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git format-patch -M -B origin</code></pre>
</div></div>
<div class="paragraph"><p>Additionally, it detects and handles renames and complete rewrites
intelligently to produce a renaming patch.  A renaming patch reduces
the amount of text output, and generally makes it easier to review.
Note that non-Git "patch" programs won&#8217;t understand renaming patches, so
use it only when you know the recipient uses Git to apply your patch.</p></div>
</li>
<li>
<p>
Extract three topmost commits from the current branch and format them
as e-mailable patches:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git format-patch -3</code></pre>
</div></div>
</li>
</ul></div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-am.html">git-am(1)</a>, <a href="git-send-email.html">git-send-email(1)</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_git">GIT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2017-03-21 15:39:58 PDT
</div>
</div>
</body>
</html>
