<!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-diff-files(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-diff-files(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-diff-files -
   Compares files in the working tree and the index
</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 diff-files</em> [-q] [-0|-1|-2|-3|-c|--cc] [&lt;common diff options&gt;] [&lt;path&gt;&#8230;]</pre>
<div class="attribution">
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>Compares the files in the working tree and the index.  When paths
are specified, compares only those named paths.  Otherwise all
entries in the index are compared.  The output format is the
same as for <em>git diff-index</em> and <em>git diff-tree</em>.</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">
-u
</dt>
<dt class="hdlist1">
--patch
</dt>
<dd>
<p>
        Generate patch (see section on generating patches).
</p>
</dd>
<dt class="hdlist1">
-s
</dt>
<dt class="hdlist1">
--no-patch
</dt>
<dd>
<p>
        Suppress diff output. Useful for commands like <code>git show</code> that
        show the patch by default, or to cancel the effect of <code>--patch</code>.
</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.
        Implies <code>-p</code>.
</p>
</dd>
<dt class="hdlist1">
--raw
</dt>
<dd>
<p>
        Generate the diff in raw format.
        This is the default.
</p>
</dd>
<dt class="hdlist1">
--patch-with-raw
</dt>
<dd>
<p>
        Synonym for <code>-p --raw</code>.
</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">
--patch-with-stat
</dt>
<dd>
<p>
        Synonym for <code>-p --stat</code>.
</p>
</dd>
<dt class="hdlist1">
-z
</dt>
<dd>
<p>
        When <code>--raw</code>, <code>--numstat</code>, <code>--name-only</code> or <code>--name-status</code> has been
        given, do not munge pathnames and use NULs as output field terminators.
</p>
<div class="paragraph"><p>Without this option, each pathname output will have TAB, LF, double quotes,
and backslash characters replaced with <code>\t</code>, <code>\n</code>, <code>\"</code>, and <code>\\</code>,
respectively, and the pathname will be enclosed in double quotes if
any of those replacements occurred.</p></div>
</dd>
<dt class="hdlist1">
--name-only
</dt>
<dd>
<p>
        Show only names of changed files.
</p>
</dd>
<dt class="hdlist1">
--name-status
</dt>
<dd>
<p>
        Show only names and status of changed files. See the description
        of the <code>--diff-filter</code> option on what the status letters mean.
</p>
</dd>
<dt class="hdlist1">
--submodule[=&lt;format&gt;]
</dt>
<dd>
<p>
        Specify how differences in submodules are shown.  When specifying
        <code>--submodule=short</code> the <em>short</em> format is used.  This format just
        shows the names of the commits at the beginning and end of the range.
        When <code>--submodule</code> or <code>--submodule=log</code> is specified, the <em>log</em>
        format is used.  This format lists the commits in the range like
        <a href="git-submodule.html">git-submodule(1)</a> <code>summary</code> does.  When <code>--submodule=diff</code>
        is specified, the <em>diff</em> format is used.  This format shows an
        inline diff of the changes in the submodule contents between the
        commit range.  Defaults to <code>diff.submodule</code> or the <em>short</em> format
        if the config option is unset.
</p>
</dd>
<dt class="hdlist1">
--color[=&lt;when&gt;]
</dt>
<dd>
<p>
        Show colored diff.
        <code>--color</code> (i.e. without <em>=&lt;when&gt;</em>) is the same as <code>--color=always</code>.
        <em>&lt;when&gt;</em> can be one of <code>always</code>, <code>never</code>, or <code>auto</code>.
</p>
</dd>
<dt class="hdlist1">
--no-color
</dt>
<dd>
<p>
        Turn off colored diff.
        It is the same as <code>--color=never</code>.
</p>
</dd>
<dt class="hdlist1">
--word-diff[=&lt;mode&gt;]
</dt>
<dd>
<p>
        Show a word diff, using the &lt;mode&gt; to delimit changed words.
        By default, words are delimited by whitespace; see
        <code>--word-diff-regex</code> below.  The &lt;mode&gt; defaults to <em>plain</em>, and
        must be one of:
</p>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
color
</dt>
<dd>
<p>
        Highlight changed words using only colors.  Implies <code>--color</code>.
</p>
</dd>
<dt class="hdlist1">
plain
</dt>
<dd>
<p>
        Show words as <code>[-removed-]</code> and <code>{+added+}</code>.  Makes no
        attempts to escape the delimiters if they appear in the input,
        so the output may be ambiguous.
</p>
</dd>
<dt class="hdlist1">
porcelain
</dt>
<dd>
<p>
        Use a special line-based format intended for script
        consumption.  Added/removed/unchanged runs are printed in the
        usual unified diff format, starting with a <code>+</code>/<code>-</code>/` `
        character at the beginning of the line and extending to the
        end of the line.  Newlines in the input are represented by a
        tilde <code>~</code> on a line of its own.
</p>
</dd>
<dt class="hdlist1">
none
</dt>
<dd>
<p>
        Disable word diff again.
</p>
</dd>
</dl></div>
</div></div>
<div class="paragraph"><p>Note that despite the name of the first mode, color is used to
highlight the changed parts in all modes if enabled.</p></div>
</dd>
<dt class="hdlist1">
--word-diff-regex=&lt;regex&gt;
</dt>
<dd>
<p>
        Use &lt;regex&gt; to decide what a word is, instead of considering
        runs of non-whitespace to be a word.  Also implies
        <code>--word-diff</code> unless it was already enabled.
</p>
<div class="paragraph"><p>Every non-overlapping match of the
&lt;regex&gt; is considered a word.  Anything between these matches is
considered whitespace and ignored(!) for the purposes of finding
differences.  You may want to append <code>|[^[:space:]]</code> to your regular
expression to make sure that it matches all non-whitespace characters.
A match that contains a newline is silently truncated(!) at the
newline.</p></div>
<div class="paragraph"><p>For example, <code>--word-diff-regex=.</code> will treat each character as a word
and, correspondingly, show differences character by character.</p></div>
<div class="paragraph"><p>The regex can also be set via a diff driver or configuration option, see
<a href="gitattributes.html">gitattributes(5)</a> or <a href="git-config.html">git-config(1)</a>.  Giving it explicitly
overrides any diff driver or configuration setting.  Diff drivers
override configuration settings.</p></div>
</dd>
<dt class="hdlist1">
--color-words[=&lt;regex&gt;]
</dt>
<dd>
<p>
        Equivalent to <code>--word-diff=color</code> plus (if a regex was
        specified) <code>--word-diff-regex=&lt;regex&gt;</code>.
</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">
--check
</dt>
<dd>
<p>
        Warn if changes introduce conflict markers or whitespace errors.
        What are considered whitespace errors is controlled by <code>core.whitespace</code>
        configuration.  By default, trailing whitespaces (including
        lines that solely consist of whitespaces) and a space character
        that is immediately followed by a tab character inside the
        initial indent of the line are considered whitespace errors.
        Exits with non-zero status if problems are found. Not compatible
        with --exit-code.
</p>
</dd>
<dt class="hdlist1">
--ws-error-highlight=&lt;kind&gt;
</dt>
<dd>
<p>
        Highlight whitespace errors on lines specified by &lt;kind&gt;
        in the color specified by <code>color.diff.whitespace</code>.  &lt;kind&gt;
        is a comma separated list of <code>old</code>, <code>new</code>, <code>context</code>.  When
        this option is not given, only whitespace errors in <code>new</code>
        lines are highlighted.  E.g. <code>--ws-error-highlight=new,old</code>
        highlights whitespace errors on both deleted and added lines.
        <code>all</code> can be used as a short-hand for <code>old,new,context</code>.
        The <code>diff.wsErrorHighlight</code> configuration variable can be
        used to specify the default behaviour.
</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">
--diff-filter=[(A|C|D|M|R|T|U|X|B)&#8230;[*]]
</dt>
<dd>
<p>
        Select only files that are Added (<code>A</code>), Copied (<code>C</code>),
        Deleted (<code>D</code>), Modified (<code>M</code>), Renamed (<code>R</code>), have their
        type (i.e. regular file, symlink, submodule, &#8230;) changed (<code>T</code>),
        are Unmerged (<code>U</code>), are
        Unknown (<code>X</code>), or have had their pairing Broken (<code>B</code>).
        Any combination of the filter characters (including none) can be used.
        When <code>*</code> (All-or-none) is added to the combination, all
        paths are selected if there is any file that matches
        other criteria in the comparison; if there is no file
        that matches other criteria, nothing is selected.
</p>
<div class="paragraph"><p>Also, these upper-case letters can be downcased to exclude.  E.g.
<code>--diff-filter=ad</code> excludes added and deleted paths.</p></div>
</dd>
<dt class="hdlist1">
-S&lt;string&gt;
</dt>
<dd>
<p>
        Look for differences that change the number of occurrences of
        the specified string (i.e. addition/deletion) in a file.
        Intended for the scripter&#8217;s use.
</p>
<div class="paragraph"><p>It is useful when you&#8217;re looking for an exact block of code (like a
struct), and want to know the history of that block since it first
came into being: use the feature iteratively to feed the interesting
block in the preimage back into <code>-S</code>, and keep going until you get the
very first version of the block.</p></div>
</dd>
<dt class="hdlist1">
-G&lt;regex&gt;
</dt>
<dd>
<p>
        Look for differences whose patch text contains added/removed
        lines that match &lt;regex&gt;.
</p>
<div class="paragraph"><p>To illustrate the difference between <code>-S&lt;regex&gt; --pickaxe-regex</code> and
<code>-G&lt;regex&gt;</code>, consider a commit with the following diff in the same
file:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>+    return !regexec(regexp, two-&gt;ptr, 1, &amp;regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &amp;regmatch, 0);</code></pre>
</div></div>
<div class="paragraph"><p>While <code>git log -G"regexec\(regexp"</code> will show this commit, <code>git log
-S"regexec\(regexp" --pickaxe-regex</code> will not (because the number of
occurrences of that string did not change).</p></div>
<div class="paragraph"><p>See the <em>pickaxe</em> entry in <a href="gitdiffcore.html">gitdiffcore(7)</a> for more
information.</p></div>
</dd>
<dt class="hdlist1">
--pickaxe-all
</dt>
<dd>
<p>
        When <code>-S</code> or <code>-G</code> finds a change, show all the changes in that
        changeset, not just the files that contain the change
        in &lt;string&gt;.
</p>
</dd>
<dt class="hdlist1">
--pickaxe-regex
</dt>
<dd>
<p>
        Treat the &lt;string&gt; given to <code>-S</code> as an extended POSIX regular
        expression to match.
</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">
-R
</dt>
<dd>
<p>
        Swap two inputs; that is, show differences from index or
        on-disk file to tree contents.
</p>
</dd>
<dt class="hdlist1">
--relative[=&lt;path&gt;]
</dt>
<dd>
<p>
        When run from a subdirectory of the project, it can be
        told to exclude changes outside the directory and show
        pathnames relative to it with this option.  When you are
        not in a subdirectory (e.g. in a bare repository), you
        can name which subdirectory to make the output relative
        to by giving a &lt;path&gt; as an argument.
</p>
</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">
--exit-code
</dt>
<dd>
<p>
        Make the program exit with codes similar to diff(1).
        That is, it exits with 1 if there were differences and
        0 means no differences.
</p>
</dd>
<dt class="hdlist1">
--quiet
</dt>
<dd>
<p>
        Disable all output of the program. Implies <code>--exit-code</code>.
</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">
-1 --base
</dt>
<dt class="hdlist1">
-2 --ours
</dt>
<dt class="hdlist1">
-3 --theirs
</dt>
<dt class="hdlist1">
-0
</dt>
<dd>
<p>
        Diff against the "base" version, "our branch" or "their
        branch" respectively.  With these options, diffs for
        merged entries are not shown.
</p>
<div class="paragraph"><p>The default is to diff against our branch (-2) and the
cleanly resolved paths.  The option -0 can be given to
omit diff output for unmerged entries and just show "Unmerged".</p></div>
</dd>
<dt class="hdlist1">
-c
</dt>
<dt class="hdlist1">
--cc
</dt>
<dd>
<p>
        This compares stage 2 (our branch), stage 3 (their
        branch) and the working tree file and outputs a combined
        diff, similar to the way <em>diff-tree</em> shows a merge
        commit with these flags.
</p>
</dd>
<dt class="hdlist1">
-q
</dt>
<dd>
<p>
        Remain silent even on nonexistent files
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_raw_output_format">Raw output format</h2>
<div class="sectionbody">
<div class="paragraph"><p>The raw output format from "git-diff-index", "git-diff-tree",
"git-diff-files" and "git diff --raw" are very similar.</p></div>
<div class="paragraph"><p>These commands all compare two sets of things; what is
compared differs:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
git-diff-index &lt;tree-ish&gt;
</dt>
<dd>
<p>
        compares the &lt;tree-ish&gt; and the files on the filesystem.
</p>
</dd>
<dt class="hdlist1">
git-diff-index --cached &lt;tree-ish&gt;
</dt>
<dd>
<p>
        compares the &lt;tree-ish&gt; and the index.
</p>
</dd>
<dt class="hdlist1">
git-diff-tree [-r] &lt;tree-ish-1&gt; &lt;tree-ish-2&gt; [&lt;pattern&gt;&#8230;]
</dt>
<dd>
<p>
        compares the trees named by the two arguments.
</p>
</dd>
<dt class="hdlist1">
git-diff-files [&lt;pattern&gt;&#8230;]
</dt>
<dd>
<p>
        compares the index and the files on the filesystem.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>The "git-diff-tree" command begins its output by printing the hash of
what is being compared. After that, all the commands print one output
line per changed file.</p></div>
<div class="paragraph"><p>An output line is formatted this way:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>in-place edit  :100644 100644 bcd1234... 0123456... M file0
copy-edit      :100644 100644 abcd123... 1234567... C68 file1 file2
rename-edit    :100644 100644 abcd123... 1234567... R86 file1 file3
create         :000000 100644 0000000... 1234567... A file4
delete         :100644 000000 1234567... 0000000... D file5
unmerged       :000000 000000 0000000... 0000000... U file6</code></pre>
</div></div>
<div class="paragraph"><p>That is, from the left to the right:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
a colon.
</p>
</li>
<li>
<p>
mode for "src"; 000000 if creation or unmerged.
</p>
</li>
<li>
<p>
a space.
</p>
</li>
<li>
<p>
mode for "dst"; 000000 if deletion or unmerged.
</p>
</li>
<li>
<p>
a space.
</p>
</li>
<li>
<p>
sha1 for "src"; 0{40} if creation or unmerged.
</p>
</li>
<li>
<p>
a space.
</p>
</li>
<li>
<p>
sha1 for "dst"; 0{40} if creation, unmerged or "look at work tree".
</p>
</li>
<li>
<p>
a space.
</p>
</li>
<li>
<p>
status, followed by optional "score" number.
</p>
</li>
<li>
<p>
a tab or a NUL when <code>-z</code> option is used.
</p>
</li>
<li>
<p>
path for "src"
</p>
</li>
<li>
<p>
a tab or a NUL when <code>-z</code> option is used; only exists for C or R.
</p>
</li>
<li>
<p>
path for "dst"; only exists for C or R.
</p>
</li>
<li>
<p>
an LF or a NUL when <code>-z</code> option is used, to terminate the record.
</p>
</li>
</ol></div>
<div class="paragraph"><p>Possible status letters are:</p></div>
<div class="ulist"><ul>
<li>
<p>
A: addition of a file
</p>
</li>
<li>
<p>
C: copy of a file into a new one
</p>
</li>
<li>
<p>
D: deletion of a file
</p>
</li>
<li>
<p>
M: modification of the contents or mode of a file
</p>
</li>
<li>
<p>
R: renaming of a file
</p>
</li>
<li>
<p>
T: change in the type of the file
</p>
</li>
<li>
<p>
U: file is unmerged (you must complete the merge before it can
be committed)
</p>
</li>
<li>
<p>
X: "unknown" change type (most probably a bug, please report it)
</p>
</li>
</ul></div>
<div class="paragraph"><p>Status letters C and R are always followed by a score (denoting the
percentage of similarity between the source and target of the move or
copy).  Status letter M may be followed by a score (denoting the
percentage of dissimilarity) for file rewrites.</p></div>
<div class="paragraph"><p>&lt;sha1&gt; is shown as all 0&#8217;s if a file is new on the filesystem
and it is out of sync with the index.</p></div>
<div class="paragraph"><p>Example:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>:100644 100644 5be4a4...... 000000...... M file.c</code></pre>
</div></div>
<div class="paragraph"><p>When <code>-z</code> option is not used, TAB, LF, and backslash characters
in pathnames are represented as <code>\t</code>, <code>\n</code>, and <code>\\</code>,
respectively.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_diff_format_for_merges">diff format for merges</h2>
<div class="sectionbody">
<div class="paragraph"><p>"git-diff-tree", "git-diff-files" and "git-diff --raw"
can take <code>-c</code> or <code>--cc</code> option
to generate diff output also for merge commits.  The output differs
from the format described above in the following way:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
there is a colon for each parent
</p>
</li>
<li>
<p>
there are more "src" modes and "src" sha1
</p>
</li>
<li>
<p>
status is concatenated status characters for each parent
</p>
</li>
<li>
<p>
no optional "score" number
</p>
</li>
<li>
<p>
single path, only for "dst"
</p>
</li>
</ol></div>
<div class="paragraph"><p>Example:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>::100644 100644 100644 fabadb8... cc95eb0... 4866510... MM      describe.c</code></pre>
</div></div>
<div class="paragraph"><p>Note that <em>combined diff</em> lists only files which were modified from
all parents.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_generating_patches_with_p">Generating patches with -p</h2>
<div class="sectionbody">
<div class="paragraph"><p>When "git-diff-index", "git-diff-tree", or "git-diff-files" are run
with a <code>-p</code> option, "git diff" without the <code>--raw</code> option, or
"git log" with the "-p" option, they
do not produce the output described above; instead they produce a
patch file.  You can customize the creation of such patches via the
<code>GIT_EXTERNAL_DIFF</code> and the <code>GIT_DIFF_OPTS</code> environment variables.</p></div>
<div class="paragraph"><p>What the -p option produces is slightly different from the traditional
diff format:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
It is preceded with a "git diff" header that looks like this:
</p>
<div class="literalblock">
<div class="content">
<pre><code>diff --git a/file1 b/file2</code></pre>
</div></div>
<div class="paragraph"><p>The <code>a/</code> and <code>b/</code> filenames are the same unless rename/copy is
involved.  Especially, even for a creation or a deletion,
<code>/dev/null</code> is <em>not</em> used in place of the <code>a/</code> or <code>b/</code> filenames.</p></div>
<div class="paragraph"><p>When rename/copy is involved, <code>file1</code> and <code>file2</code> show the
name of the source file of the rename/copy and the name of
the file that rename/copy produces, respectively.</p></div>
</li>
<li>
<p>
It is followed by one or more extended header lines:
</p>
<div class="literalblock">
<div class="content">
<pre><code>old mode &lt;mode&gt;
new mode &lt;mode&gt;
deleted file mode &lt;mode&gt;
new file mode &lt;mode&gt;
copy from &lt;path&gt;
copy to &lt;path&gt;
rename from &lt;path&gt;
rename to &lt;path&gt;
similarity index &lt;number&gt;
dissimilarity index &lt;number&gt;
index &lt;hash&gt;..&lt;hash&gt; &lt;mode&gt;</code></pre>
</div></div>
<div class="paragraph"><p>File modes are printed as 6-digit octal numbers including the file type
and file permission bits.</p></div>
<div class="paragraph"><p>Path names in extended headers do not include the <code>a/</code> and <code>b/</code> prefixes.</p></div>
<div class="paragraph"><p>The similarity index is the percentage of unchanged lines, and
the dissimilarity index is the percentage of changed lines.  It
is a rounded down integer, followed by a percent sign.  The
similarity index value of 100% is thus reserved for two equal
files, while 100% dissimilarity means that no line from the old
file made it into the new one.</p></div>
<div class="paragraph"><p>The index line includes the SHA-1 checksum before and after the change.
The &lt;mode&gt; is included if the file mode does not change; otherwise,
separate lines indicate the old and the new mode.</p></div>
</li>
<li>
<p>
TAB, LF, double quote and backslash characters in pathnames
    are represented as <code>\t</code>, <code>\n</code>, <code>\"</code> and <code>\\</code>, respectively.
    If there is need for such substitution then the whole
    pathname is put in double quotes.
</p>
</li>
<li>
<p>
All the <code>file1</code> files in the output refer to files before the
    commit, and all the <code>file2</code> files refer to files after the commit.
    It is incorrect to apply each change to each file sequentially.  For
    example, this patch will swap a and b:
</p>
<div class="literalblock">
<div class="content">
<pre><code>diff --git a/a b/b
rename from a
rename to b
diff --git a/b b/a
rename from b
rename to a</code></pre>
</div></div>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_combined_diff_format">combined diff format</h2>
<div class="sectionbody">
<div class="paragraph"><p>Any diff-generating command can take the <code>-c</code> or <code>--cc</code> option to
produce a <em>combined diff</em> when showing a merge. This is the default
format when showing merges with <a href="git-diff.html">git-diff(1)</a> or
<a href="git-show.html">git-show(1)</a>. Note also that you can give the <code>-m</code> option to any
of these commands to force generation of diffs with individual parents
of a merge.</p></div>
<div class="paragraph"><p>A <em>combined diff</em> format looks like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>diff --combined describe.c
index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
        return (a_date &gt; b_date) ? -1 : (a_date == b_date) ? 0 : 1;
  }

- static void describe(char *arg)
 -static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
  {
 +      unsigned char sha1[20];
 +      struct commit *cmit;
        struct commit_list *list;
        static int initialized = 0;
        struct commit_name *n;

 +      if (get_sha1(arg, sha1) &lt; 0)
 +              usage(describe_usage);
 +      cmit = lookup_commit_reference(sha1);
 +      if (!cmit)
 +              usage(describe_usage);
 +
        if (!initialized) {
                initialized = 1;
                for_each_ref(get_name);</code></pre>
</div></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
It is preceded with a "git diff" header, that looks like
     this (when <code>-c</code> option is used):
</p>
<div class="literalblock">
<div class="content">
<pre><code>diff --combined file</code></pre>
</div></div>
<div class="paragraph"><p>or like this (when <code>--cc</code> option is used):</p></div>
<div class="literalblock">
<div class="content">
<pre><code>diff --cc file</code></pre>
</div></div>
</li>
<li>
<p>
It is followed by one or more extended header lines
     (this example shows a merge with two parents):
</p>
<div class="literalblock">
<div class="content">
<pre><code>index &lt;hash&gt;,&lt;hash&gt;..&lt;hash&gt;
mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;
new file mode &lt;mode&gt;
deleted file mode &lt;mode&gt;,&lt;mode&gt;</code></pre>
</div></div>
<div class="paragraph"><p>The <code>mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;</code> line appears only if at least one of
the &lt;mode&gt; is different from the rest. Extended headers with
information about detected contents movement (renames and
copying detection) are designed to work with diff of two
&lt;tree-ish&gt; and are not used by combined diff format.</p></div>
</li>
<li>
<p>
It is followed by two-line from-file/to-file header
</p>
<div class="literalblock">
<div class="content">
<pre><code>--- a/file
+++ b/file</code></pre>
</div></div>
<div class="paragraph"><p>Similar to two-line header for traditional <em>unified</em> diff
format, <code>/dev/null</code> is used to signal created or deleted
files.</p></div>
</li>
<li>
<p>
Chunk header format is modified to prevent people from
     accidentally feeding it to <code>patch -p1</code>. Combined diff format
     was created for review of merge commit changes, and was not
     meant for apply. The change is similar to the change in the
     extended <em>index</em> header:
</p>
<div class="literalblock">
<div class="content">
<pre><code>@@@ &lt;from-file-range&gt; &lt;from-file-range&gt; &lt;to-file-range&gt; @@@</code></pre>
</div></div>
<div class="paragraph"><p>There are (number of parents + 1) <code>@</code> characters in the chunk
header for combined diff format.</p></div>
</li>
</ol></div>
<div class="paragraph"><p>Unlike the traditional <em>unified</em> diff format, which shows two
files A and B with a single column that has <code>-</code> (minus&#8201;&#8212;&#8201;appears in A but removed in B), <code>+</code> (plus&#8201;&#8212;&#8201;missing in A but
added to B), or <code>" "</code> (space&#8201;&#8212;&#8201;unchanged) prefix, this format
compares two or more files file1, file2,&#8230; with one file X, and
shows how X differs from each of fileN.  One column for each of
fileN is prepended to the output line to note how X&#8217;s line is
different from it.</p></div>
<div class="paragraph"><p>A <code>-</code> character in the column N means that the line appears in
fileN but it does not appear in the result.  A <code>+</code> character
in the column N means that the line appears in the result,
and fileN does not have that line (in other words, the line was
added, from the point of view of that parent).</p></div>
<div class="paragraph"><p>In the above example output, the function signature was changed
from both files (hence two <code>-</code> removals from both file1 and
file2, plus <code>++</code> to mean one line that was added does not appear
in either file1 or file2).  Also eight other lines are the same
from file1 but do not appear in file2 (hence prefixed with <code>+</code>).</p></div>
<div class="paragraph"><p>When shown by <code>git diff-tree -c</code>, it compares the parents of a
merge commit with the merge result (i.e. file1..fileN are the
parents).  When shown by <code>git diff-files -c</code>, it compares the
two unresolved merge parents with the working tree file
(i.e. file1 is stage 2 aka "our version", file2 is stage 3 aka
"their version").</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_other_diff_formats">other diff formats</h2>
<div class="sectionbody">
<div class="paragraph"><p>The <code>--summary</code> option describes newly added, deleted, renamed and
copied files.  The <code>--stat</code> option adds diffstat(1) graph to the
output.  These options can be combined with other options, such as
<code>-p</code>, and are meant for human consumption.</p></div>
<div class="paragraph"><p>When showing a change that involves a rename or a copy, <code>--stat</code> output
formats the pathnames compactly by combining common prefix and suffix of
the pathnames.  For example, a change that moves <code>arch/i386/Makefile</code> to
<code>arch/x86/Makefile</code> while modifying 4 lines will be shown like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>arch/{i386 =&gt; x86}/Makefile    |   4 +--</code></pre>
</div></div>
<div class="paragraph"><p>The <code>--numstat</code> option gives the diffstat(1) information but is designed
for easier machine consumption.  An entry in <code>--numstat</code> output looks
like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>1       2       README
3       1       arch/{i386 =&gt; x86}/Makefile</code></pre>
</div></div>
<div class="paragraph"><p>That is, from left to right:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
the number of added lines;
</p>
</li>
<li>
<p>
a tab;
</p>
</li>
<li>
<p>
the number of deleted lines;
</p>
</li>
<li>
<p>
a tab;
</p>
</li>
<li>
<p>
pathname (possibly with rename/copy information);
</p>
</li>
<li>
<p>
a newline.
</p>
</li>
</ol></div>
<div class="paragraph"><p>When <code>-z</code> output option is in effect, the output is formatted this way:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>1       2       README NUL
3       1       NUL arch/i386/Makefile NUL arch/x86/Makefile NUL</code></pre>
</div></div>
<div class="paragraph"><p>That is:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
the number of added lines;
</p>
</li>
<li>
<p>
a tab;
</p>
</li>
<li>
<p>
the number of deleted lines;
</p>
</li>
<li>
<p>
a tab;
</p>
</li>
<li>
<p>
a NUL (only exists if renamed/copied);
</p>
</li>
<li>
<p>
pathname in preimage;
</p>
</li>
<li>
<p>
a NUL (only exists if renamed/copied);
</p>
</li>
<li>
<p>
pathname in postimage (only exists if renamed/copied);
</p>
</li>
<li>
<p>
a NUL.
</p>
</li>
</ol></div>
<div class="paragraph"><p>The extra <code>NUL</code> before the preimage path in renamed case is to allow
scripts that read the output to tell if the current record being read is
a single-path record or a rename/copy record without reading ahead.
After reading added and deleted lines, reading up to <code>NUL</code> would yield
the pathname, but if that is <code>NUL</code>, the record will show two paths.</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 2013-08-20 08:40:27 PDT
</div>
</div>
</body>
</html>
