<?xml version="1.0" encoding="UTF-8"?>
<!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.10" />
<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;]]
                   [--interdiff=&lt;previous&gt;]
                   [--range-diff=&lt;previous&gt; [--creation-factor=&lt;percent&gt;]]
                   [--progress]
                   [&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 <code>--root</code> 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>
<dd>
<p>
        Enable the heuristic that shifts diff hunk boundaries to make patches
        easier to read. This is the default.
</p>
</dd>
<dt class="hdlist1">
--no-indent-heuristic
</dt>
<dd>
<p>
        Disable the indent heuristic.
</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">
--anchored=&lt;text&gt;
</dt>
<dd>
<p>
        Generate a diff using the "anchored diff" algorithm.
</p>
<div class="paragraph"><p>This option may be specified more than once.</p></div>
<div class="paragraph"><p>If a line exists in both the source and destination, exists only once,
and starts with this text, this algorithm attempts to prevent it from
appearing as a deletion or addition in the output. It uses the "patience
diff" algorithm internally.</p></div>
</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 the <code>diff.algorithm</code> 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">
--compact-summary
</dt>
<dd>
<p>
        Output a condensed summary of extended header information such
        as file creations or deletions ("new" or "gone", optionally "+l"
        if it&#8217;s a symlink) and mode changes ("+x" or "-x" for adding
        or removing executable bit respectively) in diffstat. The
        information is put between the filename part and the graph
        part. Implies <code>--stat</code>.
</p>
</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 lacks
        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
fnmatch(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-cr-at-eol
</dt>
<dd>
<p>
        Ignore carriage-return at the end of line when doing a comparison.
</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">
--interdiff=&lt;previous&gt;
</dt>
<dd>
<p>
        As a reviewer aid, insert an interdiff into the cover letter,
        or as commentary of the lone patch of a 1-patch series, showing
        the differences between the previous version of the patch series and
        the series currently being formatted. <code>previous</code> is a single revision
        naming the tip of the previous series which shares a common base with
        the series being formatted (for example <code>git format-patch
        --cover-letter --interdiff=feature/v1 -3 feature/v2</code>).
</p>
</dd>
<dt class="hdlist1">
--range-diff=&lt;previous&gt;
</dt>
<dd>
<p>
        As a reviewer aid, insert a range-diff (see <a href="git-range-diff.html">git-range-diff(1)</a>)
        into the cover letter, or as commentary of the lone patch of a
        1-patch series, showing the differences between the previous
        version of the patch series and the series currently being formatted.
        <code>previous</code> can be a single revision naming the tip of the previous
        series if it shares a common base with the series being formatted (for
        example <code>git format-patch --cover-letter --range-diff=feature/v1 -3
        feature/v2</code>), or a revision range if the two versions of the series are
        disjoint (for example <code>git format-patch --cover-letter
        --range-diff=feature/v1~3..feature/v1 -3 feature/v2</code>).
</p>
<div class="paragraph"><p>Note that diff options passed to the command affect how the primary
product of <code>format-patch</code> is generated, and they are not passed to
the underlying <code>range-diff</code> machinery used to generate the cover-letter
material (this may change in the future).</p></div>
</dd>
<dt class="hdlist1">
--creation-factor=&lt;percent&gt;
</dt>
<dd>
<p>
        Used with <code>--range-diff</code>, tweak the heuristic which matches up commits
        between the previous and current series of patches by adjusting the
        creation/deletion cost fudge factor. See <a href="git-range-diff.html">git-range-diff(1)</a>)
        for details.
</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>
<dt class="hdlist1">
--progress
</dt>
<dd>
<p>
        Show progress reports on stderr as patches are generated.
</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> or 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
 2019-02-05 15:33:20 PST
</div>
</div>
</body>
</html>
