<!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.6" />
<title>git-diff-index(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; }

pre {
  padding: 0;
  margin: 0;
}

#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; }
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.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; }


/*
 * xhtml11 specific
 *
 * */

tt {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

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
 *
 * */

.monospaced {
  font-family: monospace;
  font-size: inherit;
  color: navy;
}

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]([2-'+(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 == '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 == '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-index(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-diff-index -
   Compare a tree to the working tree or 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-index</em> [-m] [--cached] [&lt;common diff options&gt;] &lt;tree-ish&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 content and mode of the blobs found in a tree object
with the corresponding tracked files in the working tree, or with the
corresponding paths in the index.  When &lt;path&gt; arguments are present,
compares only paths matching those patterns.  Otherwise all tracked
files are compared.</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 <tt>git show</tt> that
        show the patch by default, or to cancel the effect of <tt>--patch</tt>.
</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 <tt>-p</tt>.
</p>
</dd>
<dt class="hdlist1">
--raw
</dt>
<dd>
<p>
        Generate the raw format.
         This is the default.
</p>
</dd>
<dt class="hdlist1">
--patch-with-raw
</dt>
<dd>
<p>
        Synonym for <tt>-p --raw</tt>.
</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">
<tt>default</tt>, <tt>myers</tt>
</dt>
<dd>
<p>
        The basic greedy diff algorithm. Currently, this is the default.
</p>
</dd>
<dt class="hdlist1">
<tt>minimal</tt>
</dt>
<dd>
<p>
        Spend extra time to make sure the smallest possible diff is
        produced.
</p>
</dd>
<dt class="hdlist1">
<tt>patience</tt>
</dt>
<dd>
<p>
        Use "patience diff" algorithm when generating patches.
</p>
</dd>
<dt class="hdlist1">
<tt>histogram</tt>
</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 <tt>--diff-algorithm=default</tt> 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
        <tt>&lt;width&gt;</tt>. The width of the filename part can be limited by
        giving another width <tt>&lt;name-width&gt;</tt> after a comma. The width
        of the graph part can be limited by using
        <tt>--stat-graph-width=&lt;width&gt;</tt> (affects all commands generating
        a stat graph) or by setting <tt>diff.statGraphWidth=&lt;width&gt;</tt>
        (does not affect <tt>git format-patch</tt>).
        By giving a third parameter <tt>&lt;count&gt;</tt>, you can limit the
        output to the first <tt>&lt;count&gt;</tt> lines, followed by <tt>...</tt> if
        there are more.
</p>
<div class="paragraph"><p>These parameters can also be set individually with <tt>--stat-width=&lt;width&gt;</tt>,
<tt>--stat-name-width=&lt;name-width&gt;</tt> and <tt>--stat-count=&lt;count&gt;</tt>.</p></div>
</dd>
<dt class="hdlist1">
--numstat
</dt>
<dd>
<p>
        Similar to <tt>--stat</tt>, 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 <tt>-</tt> instead of saying
        <tt>0 0</tt>.
</p>
</dd>
<dt class="hdlist1">
--shortstat
</dt>
<dd>
<p>
        Output only the last line of the <tt>--stat</tt> 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 <tt>--dirstat</tt> can be customized by
        passing it a comma separated list of parameters.
        The defaults are controlled by the <tt>diff.dirstat</tt> 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">
<tt>changes</tt>
</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">
<tt>lines</tt>
</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 <tt>--dirstat</tt>
        behavior than the <tt>changes</tt> 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 <tt>--*stat</tt> options.
</p>
</dd>
<dt class="hdlist1">
<tt>files</tt>
</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 <tt>--dirstat</tt> behavior, since it does
        not have to look at the file contents at all.
</p>
</dd>
<dt class="hdlist1">
<tt>cumulative</tt>
</dt>
<dd>
<p>
        Count changes in a child directory for the parent directory as well.
        Note that when using <tt>cumulative</tt>, the sum of the percentages
        reported may exceed 100%. The default (non-cumulative) behavior can
        be specified with the <tt>noncumulative</tt> 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:
<tt>--dirstat=files,10,cumulative</tt>.</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 <tt>-p --stat</tt>.
</p>
</dd>
<dt class="hdlist1">
-z
</dt>
<dd>
<p>
        When <tt>--raw</tt>, <tt>--numstat</tt>, <tt>--name-only</tt> or <tt>--name-status</tt> 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 <tt>\t</tt>, <tt>\n</tt>, <tt>\"</tt>, and <tt>\\</tt>,
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 <tt>--diff-filter</tt> 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 <tt>--submodule</tt>
        or <tt>--submodule=log</tt> is given, 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> <tt>summary</tt> does.
        Omitting the <tt>--submodule</tt> option or specifying <tt>--submodule=short</tt>,
        uses the <em>short</em> format. This format just shows the names of the commits
        at the beginning and end of the range.  Can be tweaked via the
        <tt>diff.submodule</tt> configuration variable.
</p>
</dd>
<dt class="hdlist1">
--color[=&lt;when&gt;]
</dt>
<dd>
<p>
        Show colored diff.
        <tt>--color</tt> (i.e. without <em>=&lt;when&gt;</em>) is the same as <tt>--color=always</tt>.
        <em>&lt;when&gt;</em> can be one of <tt>always</tt>, <tt>never</tt>, or <tt>auto</tt>.
</p>
</dd>
<dt class="hdlist1">
--no-color
</dt>
<dd>
<p>
        Turn off colored diff.
        It is the same as <tt>--color=never</tt>.
</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
        <tt>--word-diff-regex</tt> 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 <tt>--color</tt>.
</p>
</dd>
<dt class="hdlist1">
plain
</dt>
<dd>
<p>
        Show words as <tt>[-removed-]</tt> and <tt>{+added+}</tt>.  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 <tt>+</tt>/<tt>-</tt>/` `
        character at the beginning of the line and extending to the
        end of the line.  Newlines in the input are represented by a
        tilde <tt>~</tt> 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
        <tt>--word-diff</tt> 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 <tt>|[^[:space:]]</tt> 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>The regex can also be set via a diff driver or configuration option, see
<a href="gitattributes.html">gitattributes(1)</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 <tt>--word-diff=color</tt> plus (if a regex was
        specified) <tt>--word-diff-regex=&lt;regex&gt;</tt>.
</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 whitespace errors.  What are
        considered whitespace errors is controlled by <tt>core.whitespace</tt>
        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">
--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 <tt>--full-index</tt>, output a binary diff that
        can be applied with <tt>git-apply</tt>.
</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 <tt>--full-index</tt> option above, which controls
        the diff-patch output format.  Non default number of
        digits can be specified with <tt>--abbrev=&lt;n&gt;</tt>.
</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 <tt>m</tt> controls this aspect of the -B
option (defaults to 60%). <tt>-B/70%</tt> 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 <tt>n</tt> controls this aspect of
the -B option (defaults to 50%). <tt>-B20%</tt> 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 <tt>n</tt> 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, <tt>-M90%</tt> 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 <tt>%</tt> sign, the number is to be read as
        a fraction, with a decimal point before it.  I.e., <tt>-M5</tt> becomes
        0.5, and is thus the same as <tt>-M50%</tt>.  Similarly, <tt>-M05</tt> is
        the same as <tt>-M5%</tt>.  To limit detection to exact renames, use
        <tt>-M100%</tt>.  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 <tt>--find-copies-harder</tt>.
        If <tt>n</tt> is specified, it has the same meaning as for <tt>-M&lt;n&gt;</tt>.
</p>
</dd>
<dt class="hdlist1">
--find-copies-harder
</dt>
<dd>
<p>
        For performance reasons, by default, <tt>-C</tt> 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
        <tt>-C</tt> 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 <tt>/dev/null</tt>. The resulting patch
        is not meant to be applied with <tt>patch</tt> or <tt>git apply</tt>; 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 <tt>-B</tt>, 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 <tt>-M</tt> and <tt>-C</tt> 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 (<tt>A</tt>), Copied (<tt>C</tt>),
        Deleted (<tt>D</tt>), Modified (<tt>M</tt>), Renamed (<tt>R</tt>), have their
        type (i.e. regular file, symlink, submodule, &#8230;) changed (<tt>T</tt>),
        are Unmerged (<tt>U</tt>), are
        Unknown (<tt>X</tt>), or have had their pairing Broken (<tt>B</tt>).
        Any combination of the filter characters (including none) can be used.
        When <tt>*</tt> (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>
</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 <tt>-S</tt>, 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 <tt>-S&lt;regex&gt; --pickaxe-regex</tt> and
<tt>-G&lt;regex&gt;</tt>, consider a commit with the following diff in the same
file:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>+    return !regexec(regexp, two-&gt;ptr, 1, &amp;regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &amp;regmatch, 0);</tt></pre>
</div></div>
<div class="paragraph"><p>While <tt>git log -G"regexec\(regexp"</tt> will show this commit, <tt>git log
-S"regexec\(regexp" --pickaxe-regex</tt> 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 <tt>-S</tt> or <tt>-G</tt> 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 <tt>-S</tt> as an extended POSIX regular
        expression to match.
</p>
</dd>
<dt class="hdlist1">
-O&lt;orderfile&gt;
</dt>
<dd>
<p>
        Output the patch in the order specified in the
        &lt;orderfile&gt;, which has one shell glob pattern per line.
        This overrides the <tt>diff.orderfile</tt> configuration variable
        (see <a href="git-config.html">git-config(1)</a>).  To cancel <tt>diff.orderfile</tt>,
        use <tt>-O/dev/null</tt>.
</p>
</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.
</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 <tt>--exit-code</tt>.
</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>
</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;tree-ish&gt;
</dt>
<dd>
<p>
        The id of a tree object to diff against.
</p>
</dd>
<dt class="hdlist1">
--cached
</dt>
<dd>
<p>
        do not consider the on-disk file at all
</p>
</dd>
<dt class="hdlist1">
-m
</dt>
<dd>
<p>
        By default, files recorded in the index but not checked
        out are reported as deleted.  This flag makes
        <em>git diff-index</em> say that all non-checked-out files are up
        to date.
</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><tt>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</tt></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 <em>-z</em> option is used.
</p>
</li>
<li>
<p>
path for "src"
</p>
</li>
<li>
<p>
a tab or a NUL when <em>-z</em> 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 <em>-z</em> 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), and are the only ones to be so.</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><tt>:100644 100644 5be4a4...... 000000...... M file.c</tt></pre>
</div></div>
<div class="paragraph"><p>When <tt>-z</tt> option is not used, TAB, LF, and backslash characters
in pathnames are represented as <tt>\t</tt>, <tt>\n</tt>, and <tt>\\</tt>,
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 <em>-c</em> or <em>--cc</em> 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><tt>::100644 100644 100644 fabadb8... cc95eb0... 4866510... MM      describe.c</tt></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 <em>-p</em> option, "git diff" without the <em>--raw</em> 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
GIT_EXTERNAL_DIFF and the GIT_DIFF_OPTS 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><tt>diff --git a/file1 b/file2</tt></pre>
</div></div>
<div class="paragraph"><p>The <tt>a/</tt> and <tt>b/</tt> filenames are the same unless rename/copy is
involved.  Especially, even for a creation or a deletion,
<tt>/dev/null</tt> is <em>not</em> used in place of the <tt>a/</tt> or <tt>b/</tt> filenames.</p></div>
<div class="paragraph"><p>When rename/copy is involved, <tt>file1</tt> and <tt>file2</tt> 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><tt>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;</tt></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 <tt>a/</tt> and <tt>b/</tt> 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 <tt>\t</tt>, <tt>\n</tt>, <tt>\"</tt> and <tt>\\</tt>, respectively.
    If there is need for such substitution then the whole
    pathname is put in double quotes.
</p>
</li>
<li>
<p>
All the <tt>file1</tt> files in the output refer to files before the
    commit, and all the <tt>file2</tt> 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><tt>diff --git a/a b/b
rename from a
rename to b
diff --git a/b b/a
rename from b
rename to a</tt></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 &#8216;-c` or <tt>--cc</tt> 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 `-m&#8217; 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><tt>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);</tt></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 <em>-c</em> option is used):
</p>
<div class="literalblock">
<div class="content">
<pre><tt>diff --combined file</tt></pre>
</div></div>
<div class="paragraph"><p>or like this (when <em>--cc</em> option is used):</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>diff --cc file</tt></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><tt>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;</tt></pre>
</div></div>
<div class="paragraph"><p>The <tt>mode &lt;mode&gt;,&lt;mode&gt;..&lt;mode&gt;</tt> 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><tt>--- a/file
+++ b/file</tt></pre>
</div></div>
<div class="paragraph"><p>Similar to two-line header for traditional <em>unified</em> diff
format, <tt>/dev/null</tt> 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 <tt>patch -p1</tt>. 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><tt>@@@ &lt;from-file-range&gt; &lt;from-file-range&gt; &lt;to-file-range&gt; @@@</tt></pre>
</div></div>
<div class="paragraph"><p>There are (number of parents + 1) <tt>@</tt> 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 <tt>-</tt> (minus&#8201;&#8212;&#8201;appears in A but removed in B), <tt>+</tt> (plus&#8201;&#8212;&#8201;missing in A but
added to B), or <tt>" "</tt> (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 <tt>-</tt> character in the column N means that the line appears in
fileN but it does not appear in the result.  A <tt>+</tt> 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 <tt>-</tt> removals from both file1 and
file2, plus <tt>++</tt> 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 <tt>+</tt>).</p></div>
<div class="paragraph"><p>When shown by <tt>git diff-tree -c</tt>, it compares the parents of a
merge commit with the merge result (i.e. file1..fileN are the
parents).  When shown by <tt>git diff-files -c</tt>, 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 <tt>--summary</tt> option describes newly added, deleted, renamed and
copied files.  The <tt>--stat</tt> option adds diffstat(1) graph to the
output.  These options can be combined with other options, such as
<tt>-p</tt>, and are meant for human consumption.</p></div>
<div class="paragraph"><p>When showing a change that involves a rename or a copy, <tt>--stat</tt> output
formats the pathnames compactly by combining common prefix and suffix of
the pathnames.  For example, a change that moves <tt>arch/i386/Makefile</tt> to
<tt>arch/x86/Makefile</tt> while modifying 4 lines will be shown like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>arch/{i386 =&gt; x86}/Makefile    |   4 +--</tt></pre>
</div></div>
<div class="paragraph"><p>The <tt>--numstat</tt> option gives the diffstat(1) information but is designed
for easier machine consumption.  An entry in <tt>--numstat</tt> output looks
like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>1       2       README
3       1       arch/{i386 =&gt; x86}/Makefile</tt></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 <tt>-z</tt> output option is in effect, the output is formatted this way:</p></div>
<div class="listingblock">
<div class="content">
<pre><tt>1       2       README NUL
3       1       NUL arch/i386/Makefile NUL arch/x86/Makefile NUL</tt></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 <tt>NUL</tt> 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 <tt>NUL</tt> would yield
the pathname, but if that is <tt>NUL</tt>, the record will show two paths.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_operating_modes">Operating Modes</h2>
<div class="sectionbody">
<div class="paragraph"><p>You can choose whether you want to trust the index file entirely
(using the <em>--cached</em> flag) or ask the diff logic to show any files
that don&#8217;t match the stat state as being "tentatively changed".  Both
of these operations are very useful indeed.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_cached_mode">Cached Mode</h2>
<div class="sectionbody">
<div class="paragraph"><p>If <em>--cached</em> is specified, it allows you to ask:</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>show me the differences between HEAD and the current index
contents (the ones I'd write using 'git write-tree')</tt></pre>
</div></div>
<div class="paragraph"><p>For example, let&#8217;s say that you have worked on your working directory, updated
some files in the index and are ready to commit. You want to see exactly
<strong>what</strong> you are going to commit, without having to write a new tree
object and compare it that way, and to do that, you just do</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>git diff-index --cached HEAD</tt></pre>
</div></div>
<div class="paragraph"><p>Example: let&#8217;s say I had renamed <tt>commit.c</tt> to <tt>git-commit.c</tt>, and I had
done an <tt>update-index</tt> to make that effective in the index file.
<tt>git diff-files</tt> wouldn&#8217;t show anything at all, since the index file
matches my working directory. But doing a <em>git diff-index</em> does:</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>torvalds@ppc970:~/git&gt; git diff-index --cached HEAD
-100644 blob    4161aecc6700a2eb579e842af0b7f22b98443f74        commit.c
+100644 blob    4161aecc6700a2eb579e842af0b7f22b98443f74        git-commit.c</tt></pre>
</div></div>
<div class="paragraph"><p>You can see easily that the above is a rename.</p></div>
<div class="paragraph"><p>In fact, <tt>git diff-index --cached</tt> <strong>should</strong> always be entirely equivalent to
actually doing a <em>git write-tree</em> and comparing that. Except this one is much
nicer for the case where you just want to check where you are.</p></div>
<div class="paragraph"><p>So doing a <tt>git diff-index --cached</tt> is basically very useful when you are
asking yourself "what have I already marked for being committed, and
what&#8217;s the difference to a previous tree".</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_non_cached_mode">Non-cached Mode</h2>
<div class="sectionbody">
<div class="paragraph"><p>The "non-cached" mode takes a different approach, and is potentially
the more useful of the two in that what it does can&#8217;t be emulated with
a <em>git write-tree</em> + <em>git diff-tree</em>. Thus that&#8217;s the default mode.
The non-cached version asks the question:</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>show me the differences between HEAD and the currently checked out
tree - index contents _and_ files that aren't up-to-date</tt></pre>
</div></div>
<div class="paragraph"><p>which is obviously a very useful question too, since that tells you what
you <strong>could</strong> commit. Again, the output matches the <em>git diff-tree -r</em>
output to a tee, but with a twist.</p></div>
<div class="paragraph"><p>The twist is that if some file doesn&#8217;t match the index, we don&#8217;t have
a backing store thing for it, and we use the magic "all-zero" sha1 to
show that. So let&#8217;s say that you have edited <tt>kernel/sched.c</tt>, but
have not actually done a <em>git update-index</em> on it yet - there is no
"object" associated with the new state, and you get:</p></div>
<div class="literalblock">
<div class="content">
<pre><tt>torvalds@ppc970:~/v2.6/linux&gt; git diff-index --abbrev HEAD
:100644 100664 7476bb... 000000...      kernel/sched.c</tt></pre>
</div></div>
<div class="paragraph"><p>i.e., it shows that the tree has changed, and that <tt>kernel/sched.c</tt> has is
not up-to-date and may contain new stuff. The all-zero sha1 means that to
get the real diff, you need to look at the object in the working directory
directly rather than do an object-to-object diff.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">As with other commands of this type, <em>git diff-index</em> does not
actually look at the contents of the file at all. So maybe
<tt>kernel/sched.c</tt> hasn&#8217;t actually changed, and it&#8217;s just that you
touched it. In either case, it&#8217;s a note that you need to
<em>git update-index</em> it to make the index be in sync.</td>
</tr></table>
</div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">You can have a mixture of files show up as "has been updated"
and "is still dirty in the working directory" together. You can always
tell which file is in which state, since the "has been updated" ones
show a valid sha1, and the "not in sync with the index" ones will
always have the special all-zero sha1.</td>
</tr></table>
</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>
