<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>git-apply(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-apply(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-apply -
   Apply a patch to files and/or to 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 apply</em> [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way]
          [--apply] [--no-add] [--build-fake-ancestor=&lt;file&gt;] [-R | --reverse]
          [--allow-binary-replacement | --binary] [--reject] [-z]
          [-p&lt;n&gt;] [-C&lt;n&gt;] [--inaccurate-eof] [--recount] [--cached]
          [--ignore-space-change | --ignore-whitespace]
          [--whitespace=(nowarn|warn|fix|error|error-all)]
          [--exclude=&lt;path&gt;] [--include=&lt;path&gt;] [--directory=&lt;root&gt;]
          [--verbose] [--unsafe-paths] [&lt;patch&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>Reads the supplied diff output (i.e. "a patch") and applies it to files.
When running from a subdirectory in a repository, patched paths
outside the directory are ignored.
With the <code>--index</code> option the patch is also applied to the index, and
with the <code>--cached</code> option the patch is only applied to the index.
Without these options, the command applies the patch only to files,
and does not require them to be in a Git repository.</p></div>
<div class="paragraph"><p>This command applies the patch but does not create a commit.  Use
<a href="git-am.html">git-am(1)</a> to create commits from patches generated by
<a href="git-format-patch.html">git-format-patch(1)</a> and/or received by email.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
&lt;patch&gt;&#8230;
</dt>
<dd>
<p>
        The files to read the patch from.  <em>-</em> can be used to read
        from the standard input.
</p>
</dd>
<dt class="hdlist1">
--stat
</dt>
<dd>
<p>
        Instead of applying the patch, output diffstat for the
        input.  Turns off "apply".
</p>
</dd>
<dt class="hdlist1">
--numstat
</dt>
<dd>
<p>
        Similar to <code>--stat</code>, but shows the number of added and
        deleted lines in decimal notation and the pathname without
        abbreviation, to make it more machine friendly.  For
        binary files, outputs two <code>-</code> instead of saying
        <code>0 0</code>.  Turns off "apply".
</p>
</dd>
<dt class="hdlist1">
--summary
</dt>
<dd>
<p>
        Instead of applying the patch, output a condensed
        summary of information obtained from git diff extended
        headers, such as creations, renames and mode changes.
        Turns off "apply".
</p>
</dd>
<dt class="hdlist1">
--check
</dt>
<dd>
<p>
        Instead of applying the patch, see if the patch is
        applicable to the current working tree and/or the index
        file and detects errors.  Turns off "apply".
</p>
</dd>
<dt class="hdlist1">
--index
</dt>
<dd>
<p>
        When <code>--check</code> is in effect, or when applying the patch
        (which is the default when none of the options that
        disables it is in effect), make sure the patch is
        applicable to what the current index file records.  If
        the file to be patched in the working tree is not
        up to date, it is flagged as an error.  This flag also
        causes the index file to be updated.
</p>
</dd>
<dt class="hdlist1">
--cached
</dt>
<dd>
<p>
        Apply a patch without touching the working tree. Instead take the
        cached data, apply the patch, and store the result in the index
        without using the working tree. This implies <code>--index</code>.
</p>
</dd>
<dt class="hdlist1">
--intent-to-add
</dt>
<dd>
<p>
        When applying the patch only to the working tree, mark new
        files to be added to the index later (see <code>--intent-to-add</code>
        option in <a href="git-add.html">git-add(1)</a>). This option is ignored unless
        running in a Git repository and <code>--index</code> is not specified.
        Note that <code>--index</code> could be implied by other options such
        as <code>--cached</code> or <code>--3way</code>.
</p>
</dd>
<dt class="hdlist1">
-3
</dt>
<dt class="hdlist1">
--3way
</dt>
<dd>
<p>
        When the patch does not apply cleanly, fall back on 3-way merge if
        the patch records the identity of blobs it is supposed to apply to,
        and we have those blobs available locally, possibly leaving the
        conflict markers in the files in the working tree for the user to
        resolve.  This option implies the <code>--index</code> option, and is incompatible
        with the <code>--reject</code> and the <code>--cached</code> options.
</p>
</dd>
<dt class="hdlist1">
--build-fake-ancestor=&lt;file&gt;
</dt>
<dd>
<p>
        Newer <em>git diff</em> output has embedded <em>index information</em>
        for each blob to help identify the original version that
        the patch applies to.  When this flag is given, and if
        the original versions of the blobs are available locally,
        builds a temporary index containing those blobs.
</p>
<div class="paragraph"><p>When a pure mode change is encountered (which has no index information),
the information is read from the current index instead.</p></div>
</dd>
<dt class="hdlist1">
-R
</dt>
<dt class="hdlist1">
--reverse
</dt>
<dd>
<p>
        Apply the patch in reverse.
</p>
</dd>
<dt class="hdlist1">
--reject
</dt>
<dd>
<p>
        For atomicity, <em>git apply</em> by default fails the whole patch and
        does not touch the working tree when some of the hunks
        do not apply.  This option makes it apply
        the parts of the patch that are applicable, and leave the
        rejected hunks in corresponding *.rej files.
</p>
</dd>
<dt class="hdlist1">
-z
</dt>
<dd>
<p>
        When <code>--numstat</code> has been given, do not munge pathnames,
        but use a NUL-terminated machine-readable format.
</p>
<div class="paragraph"><p>Without this option, pathnames with "unusual" characters are quoted as
explained for the configuration variable <code>core.quotePath</code> (see
<a href="git-config.html">git-config(1)</a>).</p></div>
</dd>
<dt class="hdlist1">
-p&lt;n&gt;
</dt>
<dd>
<p>
        Remove &lt;n&gt; leading path components (separated by slashes) from
        traditional diff paths. E.g., with <code>-p2</code>, a patch against
        <code>a/dir/file</code> will be applied directly to <code>file</code>. The default is
        1.
</p>
</dd>
<dt class="hdlist1">
-C&lt;n&gt;
</dt>
<dd>
<p>
        Ensure at least &lt;n&gt; lines of surrounding context match before
        and after each change.  When fewer lines of surrounding
        context exist they all must match.  By default no context is
        ever ignored.
</p>
</dd>
<dt class="hdlist1">
--unidiff-zero
</dt>
<dd>
<p>
        By default, <em>git apply</em> expects that the patch being
        applied is a unified diff with at least one line of context.
        This provides good safety measures, but breaks down when
        applying a diff generated with <code>--unified=0</code>. To bypass these
        checks use <code>--unidiff-zero</code>.
</p>
<div class="paragraph"><p>Note, for the reasons stated above usage of context-free patches is
discouraged.</p></div>
</dd>
<dt class="hdlist1">
--apply
</dt>
<dd>
<p>
        If you use any of the options marked "Turns off
        <em>apply</em>" above, <em>git apply</em> reads and outputs the
        requested information without actually applying the
        patch.  Give this flag after those flags to also apply
        the patch.
</p>
</dd>
<dt class="hdlist1">
--no-add
</dt>
<dd>
<p>
        When applying a patch, ignore additions made by the
        patch.  This can be used to extract the common part between
        two files by first running <em>diff</em> on them and applying
        the result with this option, which would apply the
        deletion part but not the addition part.
</p>
</dd>
<dt class="hdlist1">
--allow-binary-replacement
</dt>
<dt class="hdlist1">
--binary
</dt>
<dd>
<p>
        Historically we did not allow binary patch applied
        without an explicit permission from the user, and this
        flag was the way to do so.  Currently we always allow binary
        patch application, so this is a no-op.
</p>
</dd>
<dt class="hdlist1">
--exclude=&lt;path-pattern&gt;
</dt>
<dd>
<p>
        Don&#8217;t apply changes to files matching the given path pattern. This can
        be useful when importing patchsets, where you want to exclude certain
        files or directories.
</p>
</dd>
<dt class="hdlist1">
--include=&lt;path-pattern&gt;
</dt>
<dd>
<p>
        Apply changes to files matching the given path pattern. This can
        be useful when importing patchsets, where you want to include certain
        files or directories.
</p>
<div class="paragraph"><p>When <code>--exclude</code> and <code>--include</code> patterns are used, they are examined in the
order they appear on the command line, and the first match determines if a
patch to each path is used.  A patch to a path that does not match any
include/exclude pattern is used by default if there is no include pattern
on the command line, and ignored if there is any include pattern.</p></div>
</dd>
<dt class="hdlist1">
--ignore-space-change
</dt>
<dt class="hdlist1">
--ignore-whitespace
</dt>
<dd>
<p>
        When applying a patch, ignore changes in whitespace in context
        lines if necessary.
        Context lines will preserve their whitespace, and they will not
        undergo whitespace fixing regardless of the value of the
        <code>--whitespace</code> option. New lines will still be fixed, though.
</p>
</dd>
<dt class="hdlist1">
--whitespace=&lt;action&gt;
</dt>
<dd>
<p>
        When applying a patch, detect a new or modified line that has
        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.
</p>
<div class="paragraph"><p>By default, the command outputs warning messages but applies the patch.
When <code>git-apply</code> is used for statistics and not applying a
patch, it defaults to <code>nowarn</code>.</p></div>
<div class="paragraph"><p>You can use different <code>&lt;action&gt;</code> values to control this
behavior:</p></div>
<div class="ulist"><ul>
<li>
<p>
<code>nowarn</code> turns off the trailing whitespace warning.
</p>
</li>
<li>
<p>
<code>warn</code> outputs warnings for a few such errors, but applies the
  patch as-is (default).
</p>
</li>
<li>
<p>
<code>fix</code> outputs warnings for a few such errors, and applies the
  patch after fixing them (<code>strip</code> is a synonym --- the tool
  used to consider only trailing whitespace characters as errors, and the
  fix involved <em>stripping</em> them, but modern Gits do more).
</p>
</li>
<li>
<p>
<code>error</code> outputs warnings for a few such errors, and refuses
  to apply the patch.
</p>
</li>
<li>
<p>
<code>error-all</code> is similar to <code>error</code> but shows all errors.
</p>
</li>
</ul></div>
</dd>
<dt class="hdlist1">
--inaccurate-eof
</dt>
<dd>
<p>
        Under certain circumstances, some versions of <em>diff</em> do not correctly
        detect a missing new-line at the end of the file. As a result, patches
        created by such <em>diff</em> programs do not record incomplete lines
        correctly. This option adds support for applying such patches by
        working around this bug.
</p>
</dd>
<dt class="hdlist1">
-v
</dt>
<dt class="hdlist1">
--verbose
</dt>
<dd>
<p>
        Report progress to stderr. By default, only a message about the
        current patch being applied will be printed. This option will cause
        additional information to be reported.
</p>
</dd>
<dt class="hdlist1">
--recount
</dt>
<dd>
<p>
        Do not trust the line counts in the hunk headers, but infer them
        by inspecting the patch (e.g. after editing the patch without
        adjusting the hunk headers appropriately).
</p>
</dd>
<dt class="hdlist1">
--directory=&lt;root&gt;
</dt>
<dd>
<p>
        Prepend &lt;root&gt; to all filenames.  If a "-p" argument was also passed,
        it is applied before prepending the new root.
</p>
<div class="paragraph"><p>For example, a patch that talks about updating <code>a/git-gui.sh</code> to <code>b/git-gui.sh</code>
can be applied to the file in the working tree <code>modules/git-gui/git-gui.sh</code> by
running <code>git apply --directory=modules/git-gui</code>.</p></div>
</dd>
<dt class="hdlist1">
--unsafe-paths
</dt>
<dd>
<p>
        By default, a patch that affects outside the working area
        (either a Git controlled working tree, or the current working
        directory when "git apply" is used as a replacement of GNU
        patch) is rejected as a mistake (or a mischief).
</p>
<div class="paragraph"><p>When <code>git apply</code> is used as a "better GNU patch", the user can pass
the <code>--unsafe-paths</code> option to override this safety check.  This option
has no effect when <code>--index</code> or <code>--cached</code> is in use.</p></div>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_configuration">CONFIGURATION</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
apply.ignoreWhitespace
</dt>
<dd>
<p>
        Set to <em>change</em> if you want changes in whitespace to be ignored by default.
        Set to one of: no, none, never, false if you want changes in
        whitespace to be significant.
</p>
</dd>
<dt class="hdlist1">
apply.whitespace
</dt>
<dd>
<p>
        When no <code>--whitespace</code> flag is given from the command
        line, this configuration item is used as the default.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_submodules">SUBMODULES</h2>
<div class="sectionbody">
<div class="paragraph"><p>If the patch contains any changes to submodules then <em>git apply</em>
treats these changes as follows.</p></div>
<div class="paragraph"><p>If <code>--index</code> is specified (explicitly or implicitly), then the submodule
commits must match the index exactly for the patch to apply.  If any
of the submodules are checked-out, then these check-outs are completely
ignored, i.e., they are not required to be up to date or clean and they
are not updated.</p></div>
<div class="paragraph"><p>If <code>--index</code> is not specified, then the submodule commits in the patch
are ignored and only the absence or presence of the corresponding
subdirectory is checked and (if possible) updated.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-am.html">git-am(1)</a>.</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
 2018-06-28 14:40:38 PDT
</div>
</div>
</body>
</html>
