<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title>git-pull(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-pull(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-pull -
   Fetch from and integrate with another repository or a local branch
</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 pull</em> [options] [&lt;repository&gt; [&lt;refspec&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>Incorporates changes from a remote repository into the current
branch.  In its default mode, <code>git pull</code> is shorthand for
<code>git fetch</code> followed by <code>git merge FETCH_HEAD</code>.</p></div>
<div class="paragraph"><p>More precisely, <em>git pull</em> runs <em>git fetch</em> with the given
parameters and calls <em>git merge</em> to merge the retrieved branch
heads into the current branch.
With <code>--rebase</code>, it runs <em>git rebase</em> instead of <em>git merge</em>.</p></div>
<div class="paragraph"><p>&lt;repository&gt; should be the name of a remote repository as
passed to <a href="git-fetch.html">git-fetch(1)</a>.  &lt;refspec&gt; can name an
arbitrary remote ref (for example, the name of a tag) or even
a collection of refs with corresponding remote-tracking branches
(e.g., refs/heads/&#42;:refs/remotes/origin/&#42;),
but usually it is the name of a branch in the remote repository.</p></div>
<div class="paragraph"><p>Default values for &lt;repository&gt; and &lt;branch&gt; are read from the
"remote" and "merge" configuration for the current branch
as set by <a href="git-branch.html">git-branch(1)</a> <code>--track</code>.</p></div>
<div class="paragraph"><p>Assume the following history exists and the current branch is
"<code>master</code>":</p></div>
<div class="listingblock">
<div class="content">
<pre><code>          A---B---C master on origin
         /
    D---E---F---G master
        ^
        origin/master in your repository</code></pre>
</div></div>
<div class="paragraph"><p>Then "<code>git pull</code>" will fetch and replay the changes from the remote
<code>master</code> branch since it diverged from the local <code>master</code> (i.e., <code>E</code>)
until its current commit (<code>C</code>) on top of <code>master</code> and record the
result in a new commit along with the names of the two parent commits
and a log message from the user describing the changes.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>          A---B---C origin/master
         /         \
    D---E---F---G---H master</code></pre>
</div></div>
<div class="paragraph"><p>See <a href="git-merge.html">git-merge(1)</a> for details, including how conflicts
are presented and handled.</p></div>
<div class="paragraph"><p>In Git 1.7.0 or later, to cancel a conflicting merge, use
<code>git reset --merge</code>.  <strong>Warning</strong>: In older versions of Git, running <em>git pull</em>
with uncommitted changes is discouraged: while possible, it leaves you
in a state that may be hard to back out of in the case of a conflict.</p></div>
<div class="paragraph"><p>If any of the remote changes overlap with local uncommitted changes,
the merge will be automatically cancelled and the work tree untouched.
It is generally best to get any local changes in working order before
pulling or stash them away with <a href="git-stash.html">git-stash(1)</a>.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
-q
</dt>
<dt class="hdlist1">
--quiet
</dt>
<dd>
<p>
        This is passed to both underlying git-fetch to squelch reporting of
        during transfer, and underlying git-merge to squelch output during
        merging.
</p>
</dd>
<dt class="hdlist1">
-v
</dt>
<dt class="hdlist1">
--verbose
</dt>
<dd>
<p>
        Pass --verbose to git-fetch and git-merge.
</p>
</dd>
<dt class="hdlist1">
--[no-]recurse-submodules[=yes|on-demand|no]
</dt>
<dd>
<p>
        This option controls if new commits of all populated submodules should
        be fetched too (see <a href="git-config.html">git-config(1)</a> and <a href="gitmodules.html">gitmodules(5)</a>).
        That might be necessary to get the data needed for merging submodule
        commits, a feature Git learned in 1.7.3. Notice that the result of a
        merge will not be checked out in the submodule, "git submodule update"
        has to be called afterwards to bring the work tree up to date with the
        merge result.
</p>
</dd>
</dl></div>
<div class="sect2">
<h3 id="_options_related_to_merging">Options related to merging</h3>
<div class="dlist"><dl>
<dt class="hdlist1">
--commit
</dt>
<dt class="hdlist1">
--no-commit
</dt>
<dd>
<p>
        Perform the merge and commit the result. This option can
        be used to override --no-commit.
</p>
<div class="paragraph"><p>With --no-commit perform the merge but pretend the merge
failed and do not autocommit, to give the user a chance to
inspect and further tweak the merge result before committing.</p></div>
</dd>
<dt class="hdlist1">
--edit
</dt>
<dt class="hdlist1">
-e
</dt>
<dt class="hdlist1">
--no-edit
</dt>
<dd>
<p>
        Invoke an editor before committing successful mechanical merge to
        further edit the auto-generated merge message, so that the user
        can explain and justify the merge. The <code>--no-edit</code> option can be
        used to accept the auto-generated message (this is generally
        discouraged).
</p>
<div class="paragraph"><p>Older scripts may depend on the historical behaviour of not allowing the
user to edit the merge log message. They will see an editor opened when
they run <code>git merge</code>. To make it easier to adjust such scripts to the
updated behaviour, the environment variable <code>GIT_MERGE_AUTOEDIT</code> can be
set to <code>no</code> at the beginning of them.</p></div>
</dd>
<dt class="hdlist1">
--ff
</dt>
<dd>
<p>
        When the merge resolves as a fast-forward, only update the branch
        pointer, without creating a merge commit.  This is the default
        behavior.
</p>
</dd>
<dt class="hdlist1">
--no-ff
</dt>
<dd>
<p>
        Create a merge commit even when the merge resolves as a
        fast-forward.  This is the default behaviour when merging an
        annotated (and possibly signed) tag.
</p>
</dd>
<dt class="hdlist1">
--ff-only
</dt>
<dd>
<p>
        Refuse to merge and exit with a non-zero status unless the
        current <code>HEAD</code> is already up-to-date or the merge can be
        resolved as a fast-forward.
</p>
</dd>
<dt class="hdlist1">
--log[=&lt;n&gt;]
</dt>
<dt class="hdlist1">
--no-log
</dt>
<dd>
<p>
        In addition to branch names, populate the log message with
        one-line descriptions from at most &lt;n&gt; actual commits that are being
        merged. See also <a href="git-fmt-merge-msg.html">git-fmt-merge-msg(1)</a>.
</p>
<div class="paragraph"><p>With --no-log do not list one-line descriptions from the
actual commits being merged.</p></div>
</dd>
<dt class="hdlist1">
--stat
</dt>
<dt class="hdlist1">
-n
</dt>
<dt class="hdlist1">
--no-stat
</dt>
<dd>
<p>
        Show a diffstat at the end of the merge. The diffstat is also
        controlled by the configuration option merge.stat.
</p>
<div class="paragraph"><p>With -n or --no-stat do not show a diffstat at the end of the
merge.</p></div>
</dd>
<dt class="hdlist1">
--squash
</dt>
<dt class="hdlist1">
--no-squash
</dt>
<dd>
<p>
        Produce the working tree and index state as if a real merge
        happened (except for the merge information), but do not actually
        make a commit, move the <code>HEAD</code>, or record <code>$GIT_DIR/MERGE_HEAD</code>
        (to cause the next <code>git commit</code> command to create a merge
        commit).  This allows you to create a single commit on top of
        the current branch whose effect is the same as merging another
        branch (or more in case of an octopus).
</p>
<div class="paragraph"><p>With --no-squash perform the merge and commit the result. This
option can be used to override --squash.</p></div>
</dd>
<dt class="hdlist1">
-s &lt;strategy&gt;
</dt>
<dt class="hdlist1">
--strategy=&lt;strategy&gt;
</dt>
<dd>
<p>
        Use the given merge strategy; can be supplied more than
        once to specify them in the order they should be tried.
        If there is no <code>-s</code> option, a built-in list of strategies
        is used instead (<em>git merge-recursive</em> when merging a single
        head, <em>git merge-octopus</em> otherwise).
</p>
</dd>
<dt class="hdlist1">
-X &lt;option&gt;
</dt>
<dt class="hdlist1">
--strategy-option=&lt;option&gt;
</dt>
<dd>
<p>
        Pass merge strategy specific option through to the merge
        strategy.
</p>
</dd>
<dt class="hdlist1">
--verify-signatures
</dt>
<dt class="hdlist1">
--no-verify-signatures
</dt>
<dd>
<p>
        Verify that the tip commit of the side branch being merged is
        signed with a valid key, i.e. a key that has a valid uid: in the
        default trust model, this means the signing key has been signed by
        a trusted key.  If the tip commit of the side branch is not signed
        with a valid key, the merge is aborted.
</p>
</dd>
<dt class="hdlist1">
--summary
</dt>
<dt class="hdlist1">
--no-summary
</dt>
<dd>
<p>
        Synonyms to --stat and --no-stat; these are deprecated and will be
        removed in the future.
</p>
</dd>
<dt class="hdlist1">
--allow-unrelated-histories
</dt>
<dd>
<p>
        By default, <code>git merge</code> command refuses to merge histories
        that do not share a common ancestor.  This option can be
        used to override this safety when merging histories of two
        projects that started their lives independently. As that is
        a very rare occasion, no configuration variable to enable
        this by default exists and will not be added.
</p>
</dd>
<dt class="hdlist1">
-r
</dt>
<dt class="hdlist1">
--rebase[=false|true|preserve|interactive]
</dt>
<dd>
<p>
        When true, rebase the current branch on top of the upstream
        branch after fetching. If there is a remote-tracking branch
        corresponding to the upstream branch and the upstream branch
        was rebased since last fetched, the rebase uses that information
        to avoid rebasing non-local changes.
</p>
<div class="paragraph"><p>When set to preserve, rebase with the <code>--preserve-merges</code> option passed
to <code>git rebase</code> so that locally created merge commits will not be flattened.</p></div>
<div class="paragraph"><p>When false, merge the current branch into the upstream branch.</p></div>
<div class="paragraph"><p>When <code>interactive</code>, enable the interactive mode of rebase.</p></div>
<div class="paragraph"><p>See <code>pull.rebase</code>, <code>branch.&lt;name&gt;.rebase</code> and <code>branch.autoSetupRebase</code> in
<a href="git-config.html">git-config(1)</a> if you want to make <code>git pull</code> always use
<code>--rebase</code> instead of merging.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">This is a potentially <em>dangerous</em> mode of operation.
It rewrites history, which does not bode well when you
published that history already.  Do <strong>not</strong> use this option
unless you have read <a href="git-rebase.html">git-rebase(1)</a> carefully.</td>
</tr></table>
</div>
</dd>
<dt class="hdlist1">
--no-rebase
</dt>
<dd>
<p>
        Override earlier --rebase.
</p>
</dd>
<dt class="hdlist1">
--autostash
</dt>
<dt class="hdlist1">
--no-autostash
</dt>
<dd>
<p>
        Before starting rebase, stash local modifications away (see
        <a href="git-stash.html">git-stash(1)</a>) if needed, and apply the stash when
        done. <code>--no-autostash</code> is useful to override the <code>rebase.autoStash</code>
        configuration variable (see <a href="git-config.html">git-config(1)</a>).
</p>
<div class="paragraph"><p>This option is only valid when "--rebase" is used.</p></div>
</dd>
</dl></div>
</div>
<div class="sect2">
<h3 id="_options_related_to_fetching">Options related to fetching</h3>
<div class="dlist"><dl>
<dt class="hdlist1">
--all
</dt>
<dd>
<p>
        Fetch all remotes.
</p>
</dd>
<dt class="hdlist1">
-a
</dt>
<dt class="hdlist1">
--append
</dt>
<dd>
<p>
        Append ref names and object names of fetched refs to the
        existing contents of <code>.git/FETCH_HEAD</code>.  Without this
        option old data in <code>.git/FETCH_HEAD</code> will be overwritten.
</p>
</dd>
<dt class="hdlist1">
--depth=&lt;depth&gt;
</dt>
<dd>
<p>
        Limit fetching to the specified number of commits from the tip of
        each remote branch history. If fetching to a <em>shallow</em> repository
        created by <code>git clone</code> with <code>--depth=&lt;depth&gt;</code> option (see
        <a href="git-clone.html">git-clone(1)</a>), deepen or shorten the history to the specified
        number of commits. Tags for the deepened commits are not fetched.
</p>
</dd>
<dt class="hdlist1">
--deepen=&lt;depth&gt;
</dt>
<dd>
<p>
        Similar to --depth, except it specifies the number of commits
        from the current shallow boundary instead of from the tip of
        each remote branch history.
</p>
</dd>
<dt class="hdlist1">
--shallow-since=&lt;date&gt;
</dt>
<dd>
<p>
        Deepen or shorten the history of a shallow repository to
        include all reachable commits after &lt;date&gt;.
</p>
</dd>
<dt class="hdlist1">
--shallow-exclude=&lt;revision&gt;
</dt>
<dd>
<p>
        Deepen or shorten the history of a shallow repository to
        exclude commits reachable from a specified remote branch or tag.
        This option can be specified multiple times.
</p>
</dd>
<dt class="hdlist1">
--unshallow
</dt>
<dd>
<p>
        If the source repository is complete, convert a shallow
        repository to a complete one, removing all the limitations
        imposed by shallow repositories.
</p>
<div class="paragraph"><p>If the source repository is shallow, fetch as much as possible so that
the current repository has the same history as the source repository.</p></div>
</dd>
<dt class="hdlist1">
--update-shallow
</dt>
<dd>
<p>
        By default when fetching from a shallow repository,
        <code>git fetch</code> refuses refs that require updating
        .git/shallow. This option updates .git/shallow and accept such
        refs.
</p>
</dd>
<dt class="hdlist1">
-f
</dt>
<dt class="hdlist1">
--force
</dt>
<dd>
<p>
        When <em>git fetch</em> is used with <code>&lt;rbranch&gt;:&lt;lbranch&gt;</code>
        refspec, it refuses to update the local branch
        <code>&lt;lbranch&gt;</code> unless the remote branch <code>&lt;rbranch&gt;</code> it
        fetches is a descendant of <code>&lt;lbranch&gt;</code>.  This option
        overrides that check.
</p>
</dd>
<dt class="hdlist1">
-k
</dt>
<dt class="hdlist1">
--keep
</dt>
<dd>
<p>
        Keep downloaded pack.
</p>
</dd>
<dt class="hdlist1">
--no-tags
</dt>
<dd>
<p>
        By default, tags that point at objects that are downloaded
        from the remote repository are fetched and stored locally.
        This option disables this automatic tag following. The default
        behavior for a remote may be specified with the remote.&lt;name&gt;.tagOpt
        setting. See <a href="git-config.html">git-config(1)</a>.
</p>
</dd>
<dt class="hdlist1">
-u
</dt>
<dt class="hdlist1">
--update-head-ok
</dt>
<dd>
<p>
        By default <em>git fetch</em> refuses to update the head which
        corresponds to the current branch.  This flag disables the
        check.  This is purely for the internal use for <em>git pull</em>
        to communicate with <em>git fetch</em>, and unless you are
        implementing your own Porcelain you are not supposed to
        use it.
</p>
</dd>
<dt class="hdlist1">
--upload-pack &lt;upload-pack&gt;
</dt>
<dd>
<p>
        When given, and the repository to fetch from is handled
        by <em>git fetch-pack</em>, <code>--exec=&lt;upload-pack&gt;</code> is passed to
        the command to specify non-default path for the command
        run on the other end.
</p>
</dd>
<dt class="hdlist1">
--progress
</dt>
<dd>
<p>
        Progress status is reported on the standard error stream
        by default when it is attached to a terminal, unless -q
        is specified. This flag forces progress status even if the
        standard error stream is not directed to a terminal.
</p>
</dd>
<dt class="hdlist1">
-4
</dt>
<dt class="hdlist1">
--ipv4
</dt>
<dd>
<p>
        Use IPv4 addresses only, ignoring IPv6 addresses.
</p>
</dd>
<dt class="hdlist1">
-6
</dt>
<dt class="hdlist1">
--ipv6
</dt>
<dd>
<p>
        Use IPv6 addresses only, ignoring IPv4 addresses.
</p>
</dd>
<dt class="hdlist1">
&lt;repository&gt;
</dt>
<dd>
<p>
        The "remote" repository that is the source of a fetch
        or pull operation.  This parameter can be either a URL
        (see the section <a href="#URLS">GIT URLS</a> below) or the name
        of a remote (see the section <a href="#REMOTES">REMOTES</a> below).
</p>
</dd>
<dt class="hdlist1">
&lt;refspec&gt;
</dt>
<dd>
<p>
        Specifies which refs to fetch and which local refs to update.
        When no &lt;refspec&gt;s appear on the command line, the refs to fetch
        are read from <code>remote.&lt;repository&gt;.fetch</code> variables instead
        (see <a href="git-fetch.html">git-fetch(1)</a>).
</p>
<div class="paragraph"><p>The format of a &lt;refspec&gt; parameter is an optional plus
<code>+</code>, followed by the source ref &lt;src&gt;, followed
by a colon <code>:</code>, followed by the destination ref &lt;dst&gt;.
The colon can be omitted when &lt;dst&gt; is empty.</p></div>
<div class="paragraph"><p><code>tag &lt;tag&gt;</code> means the same as <code>refs/tags/&lt;tag&gt;:refs/tags/&lt;tag&gt;</code>;
it requests fetching everything up to the given tag.</p></div>
<div class="paragraph"><p>The remote ref that matches &lt;src&gt;
is fetched, and if &lt;dst&gt; is not empty string, the local
ref that matches it is fast-forwarded using &lt;src&gt;.
If the optional plus <code>+</code> is used, the local ref
is updated even if it does not result in a fast-forward
update.</p></div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">When the remote branch you want to fetch is known to
be rewound and rebased regularly, it is expected that
its new tip will not be descendant of its previous tip
(as stored in your remote-tracking branch the last time
you fetched).  You would want
to use the <code>+</code> sign to indicate non-fast-forward updates
will be needed for such branches.  There is no way to
determine or declare that a branch will be made available
in a repository with this behavior; the pulling user simply
must know this is the expected usage pattern for a branch.</td>
</tr></table>
</div>
<div class="admonitionblock">
<table><tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">There is a difference between listing multiple &lt;refspec&gt;
directly on <em>git pull</em> command line and having multiple
<code>remote.&lt;repository&gt;.fetch</code> entries in your configuration
for a &lt;repository&gt; and running a
<em>git pull</em> command without any explicit &lt;refspec&gt; parameters.
&lt;refspec&gt;s listed explicitly on the command line are always
merged into the current branch after fetching.  In other words,
if you list more than one remote ref, <em>git pull</em> will create
an Octopus merge.  On the other hand, if you do not list any
explicit &lt;refspec&gt; parameter on the command line, <em>git pull</em>
will fetch all the &lt;refspec&gt;s it finds in the
<code>remote.&lt;repository&gt;.fetch</code> configuration and merge
only the first &lt;refspec&gt; found into the current branch.
This is because making an
Octopus from remote refs is rarely done, while keeping track
of multiple remote heads in one-go by fetching more than one
is often useful.</td>
</tr></table>
</div>
</dd>
</dl></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_git_urls_a_id_urls_a">GIT URLS<a id="URLS"></a></h2>
<div class="sectionbody">
<div class="paragraph"><p>In general, URLs contain information about the transport protocol, the
address of the remote server, and the path to the repository.
Depending on the transport protocol, some of this information may be
absent.</p></div>
<div class="paragraph"><p>Git supports ssh, git, http, and https protocols (in addition, ftp,
and ftps can be used for fetching, but this is inefficient and
deprecated; do not use it).</p></div>
<div class="paragraph"><p>The native transport (i.e. git:// URL) does no authentication and
should be used with caution on unsecured networks.</p></div>
<div class="paragraph"><p>The following syntaxes may be used with them:</p></div>
<div class="ulist"><ul>
<li>
<p>
ssh://&#91;user@&#93;host.xz&#91;:port&#93;/path/to/repo.git/
</p>
</li>
<li>
<p>
git://host.xz&#91;:port&#93;/path/to/repo.git/
</p>
</li>
<li>
<p>
http&#91;s&#93;://host.xz&#91;:port&#93;/path/to/repo.git/
</p>
</li>
<li>
<p>
ftp&#91;s&#93;://host.xz&#91;:port&#93;/path/to/repo.git/
</p>
</li>
</ul></div>
<div class="paragraph"><p>An alternative scp-like syntax may also be used with the ssh protocol:</p></div>
<div class="ulist"><ul>
<li>
<p>
&#91;user@&#93;host.xz:path/to/repo.git/
</p>
</li>
</ul></div>
<div class="paragraph"><p>This syntax is only recognized if there are no slashes before the
first colon. This helps differentiate a local path that contains a
colon. For example the local path <code>foo:bar</code> could be specified as an
absolute path or <code>./foo:bar</code> to avoid being misinterpreted as an ssh
url.</p></div>
<div class="paragraph"><p>The ssh and git protocols additionally support ~username expansion:</p></div>
<div class="ulist"><ul>
<li>
<p>
ssh://&#91;user@&#93;host.xz&#91;:port&#93;/~&#91;user&#93;/path/to/repo.git/
</p>
</li>
<li>
<p>
git://host.xz&#91;:port&#93;/~&#91;user&#93;/path/to/repo.git/
</p>
</li>
<li>
<p>
&#91;user@&#93;host.xz:/~&#91;user&#93;/path/to/repo.git/
</p>
</li>
</ul></div>
<div class="paragraph"><p>For local repositories, also supported by Git natively, the following
syntaxes may be used:</p></div>
<div class="ulist"><ul>
<li>
<p>
/path/to/repo.git/
</p>
</li>
<li>
<p>
file:///path/to/repo.git/
</p>
</li>
</ul></div>
<div class="paragraph"><p>These two syntaxes are mostly equivalent, except when cloning, when
the former implies --local option. See <a href="git-clone.html">git-clone(1)</a> for
details.</p></div>
<div class="paragraph"><p>When Git doesn&#8217;t know how to handle a certain transport protocol, it
attempts to use the <em>remote-&lt;transport&gt;</em> remote helper, if one
exists. To explicitly request a remote helper, the following syntax
may be used:</p></div>
<div class="ulist"><ul>
<li>
<p>
&lt;transport&gt;::&lt;address&gt;
</p>
</li>
</ul></div>
<div class="paragraph"><p>where &lt;address&gt; may be a path, a server and path, or an arbitrary
URL-like string recognized by the specific remote helper being
invoked. See <a href="gitremote-helpers.html">gitremote-helpers(1)</a> for details.</p></div>
<div class="paragraph"><p>If there are a large number of similarly-named remote repositories and
you want to use a different format for them (such that the URLs you
use will be rewritten into URLs that work), you can create a
configuration section of the form:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        [url "&lt;actual url base&gt;"]
                insteadOf = &lt;other url base&gt;</code></pre>
</div></div>
<div class="paragraph"><p>For example, with this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        [url "git://git.host.xz/"]
                insteadOf = host.xz:/path/to/
                insteadOf = work:</code></pre>
</div></div>
<div class="paragraph"><p>a URL like "work:repo.git" or like "host.xz:/path/to/repo.git" will be
rewritten in any context that takes a URL to be "git://git.host.xz/repo.git".</p></div>
<div class="paragraph"><p>If you want to rewrite URLs for push only, you can create a
configuration section of the form:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        [url "&lt;actual url base&gt;"]
                pushInsteadOf = &lt;other url base&gt;</code></pre>
</div></div>
<div class="paragraph"><p>For example, with this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        [url "ssh://example.org/"]
                pushInsteadOf = git://example.org/</code></pre>
</div></div>
<div class="paragraph"><p>a URL like "git://example.org/path/to/repo.git" will be rewritten to
"ssh://example.org/path/to/repo.git" for pushes, but pulls will still
use the original URL.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_remotes_a_id_remotes_a">REMOTES<a id="REMOTES"></a></h2>
<div class="sectionbody">
<div class="paragraph"><p>The name of one of the following can be used instead
of a URL as <code>&lt;repository&gt;</code> argument:</p></div>
<div class="ulist"><ul>
<li>
<p>
a remote in the Git configuration file: <code>$GIT_DIR/config</code>,
</p>
</li>
<li>
<p>
a file in the <code>$GIT_DIR/remotes</code> directory, or
</p>
</li>
<li>
<p>
a file in the <code>$GIT_DIR/branches</code> directory.
</p>
</li>
</ul></div>
<div class="paragraph"><p>All of these also allow you to omit the refspec from the command line
because they each contain a refspec which git will use by default.</p></div>
<div class="sect2">
<h3 id="_named_remote_in_configuration_file">Named remote in configuration file</h3>
<div class="paragraph"><p>You can choose to provide the name of a remote which you had previously
configured using <a href="git-remote.html">git-remote(1)</a>, <a href="git-config.html">git-config(1)</a>
or even by a manual edit to the <code>$GIT_DIR/config</code> file.  The URL of
this remote will be used to access the repository.  The refspec
of this remote will be used by default when you do
not provide a refspec on the command line.  The entry in the
config file would appear like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        [remote "&lt;name&gt;"]
                url = &lt;url&gt;
                pushurl = &lt;pushurl&gt;
                push = &lt;refspec&gt;
                fetch = &lt;refspec&gt;</code></pre>
</div></div>
<div class="paragraph"><p>The <code>&lt;pushurl&gt;</code> is used for pushes only. It is optional and defaults
to <code>&lt;url&gt;</code>.</p></div>
</div>
<div class="sect2">
<h3 id="_named_file_in_code_git_dir_remotes_code">Named file in <code>$GIT_DIR/remotes</code></h3>
<div class="paragraph"><p>You can choose to provide the name of a
file in <code>$GIT_DIR/remotes</code>.  The URL
in this file will be used to access the repository.  The refspec
in this file will be used as default when you do not
provide a refspec on the command line.  This file should have the
following format:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        URL: one of the above URL format
        Push: &lt;refspec&gt;
        Pull: &lt;refspec&gt;</code></pre>
</div></div>
<div class="paragraph"><p><code>Push:</code> lines are used by <em>git push</em> and
<code>Pull:</code> lines are used by <em>git pull</em> and <em>git fetch</em>.
Multiple <code>Push:</code> and <code>Pull:</code> lines may
be specified for additional branch mappings.</p></div>
</div>
<div class="sect2">
<h3 id="_named_file_in_code_git_dir_branches_code">Named file in <code>$GIT_DIR/branches</code></h3>
<div class="paragraph"><p>You can choose to provide the name of a
file in <code>$GIT_DIR/branches</code>.
The URL in this file will be used to access the repository.
This file should have the following format:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        &lt;url&gt;#&lt;head&gt;</code></pre>
</div></div>
<div class="paragraph"><p><code>&lt;url&gt;</code> is required; <code>#&lt;head&gt;</code> is optional.</p></div>
<div class="paragraph"><p>Depending on the operation, git will use one of the following
refspecs, if you don&#8217;t provide one on the command line.
<code>&lt;branch&gt;</code> is the name of this file in <code>$GIT_DIR/branches</code> and
<code>&lt;head&gt;</code> defaults to <code>master</code>.</p></div>
<div class="paragraph"><p>git fetch uses:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        refs/heads/&lt;head&gt;:refs/heads/&lt;branch&gt;</code></pre>
</div></div>
<div class="paragraph"><p>git push uses:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>        HEAD:refs/heads/&lt;head&gt;</code></pre>
</div></div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_merge_strategies">MERGE STRATEGIES</h2>
<div class="sectionbody">
<div class="paragraph"><p>The merge mechanism (<code>git merge</code> and <code>git pull</code> commands) allows the
backend <em>merge strategies</em> to be chosen with <code>-s</code> option.  Some strategies
can also take their own options, which can be passed by giving <code>-X&lt;option&gt;</code>
arguments to <code>git merge</code> and/or <code>git pull</code>.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
resolve
</dt>
<dd>
<p>
        This can only resolve two heads (i.e. the current branch
        and another branch you pulled from) using a 3-way merge
        algorithm.  It tries to carefully detect criss-cross
        merge ambiguities and is considered generally safe and
        fast.
</p>
</dd>
<dt class="hdlist1">
recursive
</dt>
<dd>
<p>
        This can only resolve two heads using a 3-way merge
        algorithm.  When there is more than one common
        ancestor that can be used for 3-way merge, it creates a
        merged tree of the common ancestors and uses that as
        the reference tree for the 3-way merge.  This has been
        reported to result in fewer merge conflicts without
        causing mismerges by tests done on actual merge commits
        taken from Linux 2.6 kernel development history.
        Additionally this can detect and handle merges involving
        renames.  This is the default merge strategy when
        pulling or merging one branch.
</p>
<div class="paragraph"><p>The <em>recursive</em> strategy can take the following options:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
ours
</dt>
<dd>
<p>
        This option forces conflicting hunks to be auto-resolved cleanly by
        favoring <em>our</em> version.  Changes from the other tree that do not
        conflict with our side are reflected to the merge result.
        For a binary file, the entire contents are taken from our side.
</p>
<div class="paragraph"><p>This should not be confused with the <em>ours</em> merge strategy, which does not
even look at what the other tree contains at all.  It discards everything
the other tree did, declaring <em>our</em> history contains all that happened in it.</p></div>
</dd>
<dt class="hdlist1">
theirs
</dt>
<dd>
<p>
        This is the opposite of <em>ours</em>.
</p>
</dd>
<dt class="hdlist1">
patience
</dt>
<dd>
<p>
        With this option, <em>merge-recursive</em> spends a little extra time
        to avoid mismerges that sometimes occur due to unimportant
        matching lines (e.g., braces from distinct functions).  Use
        this when the branches to be merged have diverged wildly.
        See also <a href="git-diff.html">git-diff(1)</a> <code>--patience</code>.
</p>
</dd>
<dt class="hdlist1">
diff-algorithm=[patience|minimal|histogram|myers]
</dt>
<dd>
<p>
        Tells <em>merge-recursive</em> to use a different diff algorithm, which
        can help avoid mismerges that occur due to unimportant matching
        lines (such as braces from distinct functions).  See also
        <a href="git-diff.html">git-diff(1)</a> <code>--diff-algorithm</code>.
</p>
</dd>
<dt class="hdlist1">
ignore-space-change
</dt>
<dt class="hdlist1">
ignore-all-space
</dt>
<dt class="hdlist1">
ignore-space-at-eol
</dt>
<dd>
<p>
        Treats lines with the indicated type of whitespace change as
        unchanged for the sake of a three-way merge.  Whitespace
        changes mixed with other changes to a line are not ignored.
        See also <a href="git-diff.html">git-diff(1)</a> <code>-b</code>, <code>-w</code>, and
        <code>--ignore-space-at-eol</code>.
</p>
<div class="ulist"><ul>
<li>
<p>
If <em>their</em> version only introduces whitespace changes to a line,
  <em>our</em> version is used;
</p>
</li>
<li>
<p>
If <em>our</em> version introduces whitespace changes but <em>their</em>
  version includes a substantial change, <em>their</em> version is used;
</p>
</li>
<li>
<p>
Otherwise, the merge proceeds in the usual way.
</p>
</li>
</ul></div>
</dd>
<dt class="hdlist1">
renormalize
</dt>
<dd>
<p>
        This runs a virtual check-out and check-in of all three stages
        of a file when resolving a three-way merge.  This option is
        meant to be used when merging branches with different clean
        filters or end-of-line normalization rules.  See "Merging
        branches with differing checkin/checkout attributes" in
        <a href="gitattributes.html">gitattributes(5)</a> for details.
</p>
</dd>
<dt class="hdlist1">
no-renormalize
</dt>
<dd>
<p>
        Disables the <code>renormalize</code> option.  This overrides the
        <code>merge.renormalize</code> configuration variable.
</p>
</dd>
<dt class="hdlist1">
no-renames
</dt>
<dd>
<p>
        Turn off rename detection.
        See also <a href="git-diff.html">git-diff(1)</a> <code>--no-renames</code>.
</p>
</dd>
<dt class="hdlist1">
find-renames[=&lt;n&gt;]
</dt>
<dd>
<p>
        Turn on rename detection, optionally setting the similarity
        threshold.  This is the default.
        See also <a href="git-diff.html">git-diff(1)</a> <code>--find-renames</code>.
</p>
</dd>
<dt class="hdlist1">
rename-threshold=&lt;n&gt;
</dt>
<dd>
<p>
        Deprecated synonym for <code>find-renames=&lt;n&gt;</code>.
</p>
</dd>
<dt class="hdlist1">
subtree[=&lt;path&gt;]
</dt>
<dd>
<p>
        This option is a more advanced form of <em>subtree</em> strategy, where
        the strategy makes a guess on how two trees must be shifted to
        match with each other when merging.  Instead, the specified path
        is prefixed (or stripped from the beginning) to make the shape of
        two trees to match.
</p>
</dd>
</dl></div>
</dd>
<dt class="hdlist1">
octopus
</dt>
<dd>
<p>
        This resolves cases with more than two heads, but refuses to do
        a complex merge that needs manual resolution.  It is
        primarily meant to be used for bundling topic branch
        heads together.  This is the default merge strategy when
        pulling or merging more than one branch.
</p>
</dd>
<dt class="hdlist1">
ours
</dt>
<dd>
<p>
        This resolves any number of heads, but the resulting tree of the
        merge is always that of the current branch head, effectively
        ignoring all changes from all other branches.  It is meant to
        be used to supersede old development history of side
        branches.  Note that this is different from the -Xours option to
        the <em>recursive</em> merge strategy.
</p>
</dd>
<dt class="hdlist1">
subtree
</dt>
<dd>
<p>
        This is a modified recursive strategy. When merging trees A and
        B, if B corresponds to a subtree of A, B is first adjusted to
        match the tree structure of A, instead of reading the trees at
        the same level. This adjustment is also done to the common
        ancestor tree.
</p>
</dd>
</dl></div>
<div class="paragraph"><p>With the strategies that use 3-way merge (including the default, <em>recursive</em>),
if a change is made on both branches, but later reverted on one of the
branches, that change will be present in the merged result; some people find
this behavior confusing.  It occurs because only the heads and the merge base
are considered when performing a merge, not the individual commits.  The merge
algorithm therefore considers the reverted change as no change at all, and
substitutes the changed version instead.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_default_behaviour">DEFAULT BEHAVIOUR</h2>
<div class="sectionbody">
<div class="paragraph"><p>Often people use <code>git pull</code> without giving any parameter.
Traditionally, this has been equivalent to saying <code>git pull
origin</code>.  However, when configuration <code>branch.&lt;name&gt;.remote</code> is
present while on branch <code>&lt;name&gt;</code>, that value is used instead of
<code>origin</code>.</p></div>
<div class="paragraph"><p>In order to determine what URL to use to fetch from, the value
of the configuration <code>remote.&lt;origin&gt;.url</code> is consulted
and if there is not any such variable, the value on <code>URL: ` line
in `$GIT_DIR/remotes/&lt;origin&gt;</code> file is used.</p></div>
<div class="paragraph"><p>In order to determine what remote branches to fetch (and
optionally store in the remote-tracking branches) when the command is
run without any refspec parameters on the command line, values
of the configuration variable <code>remote.&lt;origin&gt;.fetch</code> are
consulted, and if there aren&#8217;t any, <code>$GIT_DIR/remotes/&lt;origin&gt;</code>
file is consulted and its `Pull: ` lines are used.
In addition to the refspec formats described in the OPTIONS
section, you can have a globbing refspec that looks like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>refs/heads/*:refs/remotes/origin/*</code></pre>
</div></div>
<div class="paragraph"><p>A globbing refspec must have a non-empty RHS (i.e. must store
what were fetched in remote-tracking branches), and its LHS and RHS
must end with <code>/*</code>.  The above specifies that all remote
branches are tracked using remote-tracking branches in
<code>refs/remotes/origin/</code> hierarchy under the same name.</p></div>
<div class="paragraph"><p>The rule to determine which remote branch to merge after
fetching is a bit involved, in order not to break backward
compatibility.</p></div>
<div class="paragraph"><p>If explicit refspecs were given on the command
line of <code>git pull</code>, they are all merged.</p></div>
<div class="paragraph"><p>When no refspec was given on the command line, then <code>git pull</code>
uses the refspec from the configuration or
<code>$GIT_DIR/remotes/&lt;origin&gt;</code>.  In such cases, the following
rules apply:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
If <code>branch.&lt;name&gt;.merge</code> configuration for the current
  branch <code>&lt;name&gt;</code> exists, that is the name of the branch at the
  remote site that is merged.
</p>
</li>
<li>
<p>
If the refspec is a globbing one, nothing is merged.
</p>
</li>
<li>
<p>
Otherwise the remote branch of the first refspec is merged.
</p>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">EXAMPLES</h2>
<div class="sectionbody">
<div class="ulist"><ul>
<li>
<p>
Update the remote-tracking branches for the repository
  you cloned from, then merge one of them into your
  current branch:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git pull, git pull origin</code></pre>
</div></div>
<div class="paragraph"><p>Normally the branch merged in is the HEAD of the remote repository,
but the choice is determined by the branch.&lt;name&gt;.remote and
branch.&lt;name&gt;.merge options; see <a href="git-config.html">git-config(1)</a> for details.</p></div>
</li>
<li>
<p>
Merge into the current branch the remote branch <code>next</code>:
</p>
<div class="listingblock">
<div class="content">
<pre><code>$ git pull origin next</code></pre>
</div></div>
<div class="paragraph"><p>This leaves a copy of <code>next</code> temporarily in FETCH_HEAD, but
does not update any remote-tracking branches. Using remote-tracking
branches, the same can be done by invoking fetch and merge:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git fetch origin
$ git merge origin/next</code></pre>
</div></div>
</li>
</ul></div>
<div class="paragraph"><p>If you tried a pull which resulted in complex conflicts and
would want to start over, you can recover with <em>git reset</em>.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_security">SECURITY</h2>
<div class="sectionbody">
<div class="paragraph"><p>The fetch and push protocols are not designed to prevent one side from
stealing data from the other repository that was not intended to be
shared. If you have private data that you need to protect from a malicious
peer, your best option is to store it in another repository. This applies
to both clients and servers. In particular, namespaces on a server are not
effective for read access control; you should only grant read access to a
namespace to clients that you would trust with read access to the entire
repository.</p></div>
<div class="paragraph"><p>The known attack vectors are as follows:</p></div>
<div class="olist arabic"><ol class="arabic">
<li>
<p>
The victim sends "have" lines advertising the IDs of objects it has that
  are not explicitly intended to be shared but can be used to optimize the
  transfer if the peer also has them. The attacker chooses an object ID X
  to steal and sends a ref to X, but isn&#8217;t required to send the content of
  X because the victim already has it. Now the victim believes that the
  attacker has X, and it sends the content of X back to the attacker
  later. (This attack is most straightforward for a client to perform on a
  server, by creating a ref to X in the namespace the client has access
  to and then fetching it. The most likely way for a server to perform it
  on a client is to "merge" X into a public branch and hope that the user
  does additional work on this branch and pushes it back to the server
  without noticing the merge.)
</p>
</li>
<li>
<p>
As in #1, the attacker chooses an object ID X to steal. The victim sends
  an object Y that the attacker already has, and the attacker falsely
  claims to have X and not Y, so the victim sends Y as a delta against X.
  The delta reveals regions of X that are similar to Y to the attacker.
</p>
</li>
</ol></div>
</div>
</div>
<div class="sect1">
<h2 id="_bugs">BUGS</h2>
<div class="sectionbody">
<div class="paragraph"><p>Using --recurse-submodules can only fetch new commits in already checked
out submodules right now. When e.g. upstream added a new submodule in the
just fetched commits of the superproject the submodule itself can not be
fetched, making it impossible to check out that submodule later without
having to do a fetch again. This is expected to be fixed in a future Git
version.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph"><p><a href="git-fetch.html">git-fetch(1)</a>, <a href="git-merge.html">git-merge(1)</a>, <a href="git-config.html">git-config(1)</a></p></div>
</div>
</div>
<div class="sect1">
<h2 id="_git">GIT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated 2017-01-10 15:42:58 PST
</div>
</div>
</body>
</html>
