<?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 10.2.0" />
<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 overridden 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> [&lt;options&gt;] [&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.
If the current branch is behind the remote, then by default it will
fast-forward the current branch to match the remote.  If the current
branch and the remote have diverged, the user needs to specify how to
reconcile the divergent branches with <code>--rebase</code> or <code>--no-rebase</code> (or
the corresponding configuration option in <code>pull.rebase</code>).</p></div>
<div class="paragraph"><p>More precisely, <code>git pull</code> runs <code>git fetch</code> with the given parameters
and then depending on configuration options or command line flags,
will call either <code>git rebase</code> or <code>git merge</code> to reconcile diverging
branches.</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 canceled 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 populated submodules should
        be fetched, and if the working trees of active submodules should be
        updated, too (see <a href="git-fetch.html">git-fetch(1)</a>, <a href="git-config.html">git-config(1)</a> and
        <a href="gitmodules.html">gitmodules(5)</a>).
</p>
<div class="paragraph"><p>If the checkout is done via rebase, local submodule commits are rebased as well.</p></div>
<div class="paragraph"><p>If the update is done via merge, the submodule conflicts are resolved and checked out.</p></div>
</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.
        Only useful when merging.
</p>
<div class="paragraph"><p>With --no-commit perform the merge and stop just before creating
a merge commit, to give the user a chance to inspect and further
tweak the merge result before committing.</p></div>
<div class="paragraph"><p>Note that fast-forward updates do not create a merge commit and
therefore there is no way to stop those merges with --no-commit.
Thus, if you want to ensure your branch is not changed or updated
by the merge command, use --no-ff with --no-commit.</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">
--cleanup=&lt;mode&gt;
</dt>
<dd>
<p>
        This option determines how the merge message will be cleaned up before
        committing. See <a href="git-commit.html">git-commit(1)</a> for more details. In addition, if
        the <em>&lt;mode&gt;</em> is given a value of <code>scissors</code>, scissors will be appended
        to <code>MERGE_MSG</code> before being passed on to the commit machinery in the
        case of a merge conflict.
</p>
</dd>
<dt class="hdlist1">
--ff-only
</dt>
<dd>
<p>
        Only update to the new history if there is no divergent local
        history.  This is the default when no method for reconciling
        divergent histories is provided (via the --rebase=* flags).
</p>
</dd>
<dt class="hdlist1">
--ff
</dt>
<dt class="hdlist1">
--no-ff
</dt>
<dd>
<p>
        When merging rather than rebasing, specifies how a merge is
        handled when the merged-in history is already a descendant of
        the current history.  If merging is requested, <code>--ff</code> is the
        default unless merging an annotated (and possibly signed) tag
        that is not stored in its natural place in the <code>refs/tags/</code>
        hierarchy, in which case <code>--no-ff</code> is assumed.
</p>
<div class="paragraph"><p>With <code>--ff</code>, when possible resolve the merge as a fast-forward (only
update the branch pointer to match the merged branch; do not create a
merge commit).  When not possible (when the merged-in history is not a
descendant of the current history), create a merge commit.</p></div>
<div class="paragraph"><p>With <code>--no-ff</code>, create a merge commit in all cases, even when the merge
could instead be resolved as a fast-forward.</p></div>
</dd>
<dt class="hdlist1">
-S[&lt;keyid&gt;]
</dt>
<dt class="hdlist1">
--gpg-sign[=&lt;keyid&gt;]
</dt>
<dt class="hdlist1">
--no-gpg-sign
</dt>
<dd>
<p>
        GPG-sign the resulting merge commit. The <code>keyid</code> argument is
        optional and defaults to the committer identity; if specified,
        it must be stuck to the option without a space. <code>--no-gpg-sign</code>
        is useful to countermand both <code>commit.gpgSign</code> configuration variable,
        and earlier <code>--gpg-sign</code>.
</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>.
        Only useful when merging.
</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">
--signoff
</dt>
<dt class="hdlist1">
--no-signoff
</dt>
<dd>
<p>
        Add a <code>Signed-off-by</code> trailer by the committer at the end of the commit
        log message.  The meaning of a signoff depends on the project
        to which you&#8217;re committing.  For example, it may certify that
        the committer has the rights to submit the work under the
        project&#8217;s license or agrees to some contributor representation,
        such as a Developer Certificate of Origin.
        (See <a href="http://developercertificate.org">http://developercertificate.org</a> for the one used by the
        Linux kernel and Git projects.)  Consult the documentation or
        leadership of the project to which you&#8217;re contributing to
        understand how the signoffs are used in that project.
</p>
<div class="paragraph"><p>The --no-signoff option can be used to countermand an earlier --signoff
option on the command line.</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>
<div class="paragraph"><p>With --squash, --commit is not allowed, and will fail.</p></div>
<div class="paragraph"><p>Only useful when merging.</p></div>
</dd>
<dt class="hdlist1">
--[no-]verify
</dt>
<dd>
<p>
        By default, the pre-merge and commit-msg hooks are run.
        When <code>--no-verify</code> is given, these are bypassed.
        See also <a href="githooks.html">githooks(5)</a>.
        Only useful when merging.
</p>
</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 (<code>ort</code> when merging a single head,
        <code>octopus</code> 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>
<div class="paragraph"><p>Only useful when merging.</p></div>
</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">
--autostash
</dt>
<dt class="hdlist1">
--no-autostash
</dt>
<dd>
<p>
        Automatically create a temporary stash entry before the operation
        begins, record it in the special ref <code>MERGE_AUTOSTASH</code>
        and apply it after the operation ends.  This means
        that you can run the operation on a dirty worktree.  However, use
        with care: the final stash application after a successful
        merge might result in non-trivial conflicts.
</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>
<div class="paragraph"><p>Only useful when merging.</p></div>
</dd>
<dt class="hdlist1">
-r
</dt>
<dt class="hdlist1">
--rebase[=false|true|merges|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 <code>merges</code>, rebase using <code>git rebase --rebase-merges</code> so that
the local merge commits are included in the rebase (see
<a href="git-rebase.html">git-rebase(1)</a> for details).</p></div>
<div class="paragraph"><p>When false, merge the upstream branch into the current 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>
        This is shorthand for --rebase=false.
</p>
</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">
--atomic
</dt>
<dd>
<p>
        Use an atomic transaction to update local refs. Either all refs are
        updated, or on error, no refs are updated.
</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">
--negotiation-tip=&lt;commit|glob&gt;
</dt>
<dd>
<p>
        By default, Git will report, to the server, commits reachable
        from all local refs to find common commits in an attempt to
        reduce the size of the to-be-received packfile. If specified,
        Git will only report commits reachable from the given tips.
        This is useful to speed up fetches when the user knows which
        local ref is likely to have commits in common with the
        upstream ref being fetched.
</p>
<div class="paragraph"><p>This option may be specified more than once; if so, Git will report
commits reachable from any of the given commits.</p></div>
<div class="paragraph"><p>The argument to this option may be a glob on ref names, a ref, or the (possibly
abbreviated) SHA-1 of a commit. Specifying a glob is equivalent to specifying
this option multiple times, one for each matching ref name.</p></div>
<div class="paragraph"><p>See also the <code>fetch.negotiationAlgorithm</code> and <code>push.negotiate</code>
configuration variables documented in <a href="git-config.html">git-config(1)</a>, and the
<code>--negotiate-only</code> option below.</p></div>
</dd>
<dt class="hdlist1">
--negotiate-only
</dt>
<dd>
<p>
        Do not fetch anything from the server, and instead print the
        ancestors of the provided <code>--negotiation-tip=*</code> arguments,
        which we have in common with the server.
</p>
<div class="paragraph"><p>This is incompatible with <code>--recurse-submodules=[yes|on-demand]</code>.
Internally this is used to implement the <code>push.negotiate</code> option, see
<a href="git-config.html">git-config(1)</a>.</p></div>
</dd>
<dt class="hdlist1">
--dry-run
</dt>
<dd>
<p>
        Show what would be done, without making any changes.
</p>
</dd>
<dt class="hdlist1">
-f
</dt>
<dt class="hdlist1">
--force
</dt>
<dd>
<p>
        When <em>git fetch</em> is used with <code>&lt;src&gt;:&lt;dst&gt;</code> refspec it may
        refuse to update the local branch as discussed
        in the <code>&lt;refspec&gt;</code> part of the <a href="git-fetch.html">git-fetch(1)</a>
        documentation.
        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">
--prefetch
</dt>
<dd>
<p>
        Modify the configured refspec to place all refs into the
        <code>refs/prefetch/</code> namespace. See the <code>prefetch</code> task in
        <a href="git-maintenance.html">git-maintenance(1)</a>.
</p>
</dd>
<dt class="hdlist1">
-p
</dt>
<dt class="hdlist1">
--prune
</dt>
<dd>
<p>
        Before fetching, remove any remote-tracking references that no
        longer exist on the remote.  Tags are not subject to pruning
        if they are fetched only because of the default tag
        auto-following or due to a --tags option.  However, if tags
        are fetched due to an explicit refspec (either on the command
        line or in the remote configuration, for example if the remote
        was cloned with the --mirror option), then they are also
        subject to pruning. Supplying <code>--prune-tags</code> is a shorthand for
        providing the tag refspec.
</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">
--refmap=&lt;refspec&gt;
</dt>
<dd>
<p>
        When fetching refs listed on the command line, use the
        specified refspec (can be given more than once) to map the
        refs to remote-tracking branches, instead of the values of
        <code>remote.*.fetch</code> configuration variables for the remote
        repository.  Providing an empty <code>&lt;refspec&gt;</code> to the
        <code>--refmap</code> option causes Git to ignore the configured
        refspecs and rely entirely on the refspecs supplied as
        command-line arguments. See section on "Configured Remote-tracking
        Branches" for details.
</p>
</dd>
<dt class="hdlist1">
-t
</dt>
<dt class="hdlist1">
--tags
</dt>
<dd>
<p>
        Fetch all tags from the remote (i.e., fetch remote tags
        <code>refs/tags/*</code> into local tags with the same name), in addition
        to whatever else would otherwise be fetched.  Using this
        option alone does not subject tags to pruning, even if --prune
        is used (though tags may be pruned anyway if they are also the
        destination of an explicit refspec; see <code>--prune</code>).
</p>
</dd>
<dt class="hdlist1">
-j
</dt>
<dt class="hdlist1">
--jobs=&lt;n&gt;
</dt>
<dd>
<p>
        Number of parallel children to be used for all forms of fetching.
</p>
<div class="paragraph"><p>If the <code>--multiple</code> option was specified, the different remotes will be fetched
in parallel. If multiple submodules are fetched, they will be fetched in
parallel. To control them independently, use the config settings
<code>fetch.parallel</code> and <code>submodule.fetchJobs</code> (see <a href="git-config.html">git-config(1)</a>).</p></div>
<div class="paragraph"><p>Typically, parallel recursive and multi-remote fetches will be faster. By
default fetches are performed sequentially, not in parallel.</p></div>
</dd>
<dt class="hdlist1">
--set-upstream
</dt>
<dd>
<p>
        If the remote is fetched successfully, add upstream
        (tracking) reference, used by argument-less
        <a href="git-pull.html">git-pull(1)</a> and other commands. For more information,
        see <code>branch.&lt;name&gt;.merge</code> and <code>branch.&lt;name&gt;.remote</code> in
        <a href="git-config.html">git-config(1)</a>.
</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">
-o &lt;option&gt;
</dt>
<dt class="hdlist1">
--server-option=&lt;option&gt;
</dt>
<dd>
<p>
        Transmit the given string to the server when communicating using
        protocol version 2.  The given string must not contain a NUL or LF
        character.  The server&#8217;s handling of server options, including
        unknown ones, is server-specific.
        When multiple <code>--server-option=&lt;option&gt;</code> are given, they are all
        sent to the other side in the order listed on the command line.
</p>
</dd>
<dt class="hdlist1">
--show-forced-updates
</dt>
<dd>
<p>
        By default, git checks if a branch is force-updated during
        fetch. This can be disabled through fetch.showForcedUpdates, but
        the --show-forced-updates option guarantees this check occurs.
        See <a href="git-config.html">git-config(1)</a>.
</p>
</dd>
<dt class="hdlist1">
--no-show-forced-updates
</dt>
<dd>
<p>
        By default, git checks if a branch is force-updated during
        fetch. Pass --no-show-forced-updates or set fetch.showForcedUpdates
        to false to skip this check for performance reasons. If used during
        <em>git-pull</em> the --ff-only option will still check for forced updates
        before attempting a fast-forward update. See <a href="git-config.html">git-config(1)</a>.
</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 the section "CONFIGURED REMOTE-TRACKING BRANCHES"
        in <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 &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.  &lt;src&gt; is
typically a ref, but it can also be a fully spelled hex object
name.</p></div>
<div class="paragraph"><p>A &lt;refspec&gt; may contain a <code>*</code> in its &lt;src&gt; to indicate a simple pattern
match. Such a refspec functions like a glob that matches any ref with the
same prefix. A pattern &lt;refspec&gt; must have a <code>*</code> in both the &lt;src&gt; and
&lt;dst&gt;. It will map refs to the destination by replacing the <code>*</code> with the
contents matched from the source.</p></div>
<div class="paragraph"><p>If a refspec is prefixed by <code>^</code>, it will be interpreted as a negative
refspec. Rather than specifying which refs to fetch or which local refs to
update, such a refspec will instead specify refs to exclude. A ref will be
considered to match if it matches at least one positive refspec, and does
not match any negative refspec. Negative refspecs can be useful to restrict
the scope of a pattern refspec so that it will not include specific refs.
Negative refspecs can themselves be pattern refspecs. However, they may only
contain a &lt;src&gt; and do not specify a &lt;dst&gt;. Fully spelled out hex object
names are also not supported.</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 an empty string, an attempt
is made to update the local ref that matches it.</p></div>
<div class="paragraph"><p>Whether that update is allowed without <code>--force</code> depends on the ref
namespace it&#8217;s being fetched to, the type of object being fetched, and
whether the update is considered to be a fast-forward. Generally, the
same rules apply for fetching as when pushing, see the <code>&lt;refspec&gt;...</code>
section of <a href="git-push.html">git-push(1)</a> for what those are. Exceptions to those
rules particular to <em>git fetch</em> are noted below.</p></div>
<div class="paragraph"><p>Until Git version 2.20, and unlike when pushing with
<a href="git-push.html">git-push(1)</a>, any updates to <code>refs/tags/*</code> would be accepted
without <code>+</code> in the refspec (or <code>--force</code>). When fetching, we promiscuously
considered all tag updates from a remote to be forced fetches.  Since
Git version 2.20, fetching to update <code>refs/tags/*</code> works the same way
as when pushing. I.e. any updates will be rejected without <code>+</code> in the
refspec (or <code>--force</code>).</p></div>
<div class="paragraph"><p>Unlike when pushing with <a href="git-push.html">git-push(1)</a>, any updates outside of
<code>refs/{tags,heads}/*</code> will be accepted without <code>+</code> in the refspec (or
<code>--force</code>), whether that&#8217;s swapping e.g. a tree object for a blob, or
a commit for another commit that&#8217;s doesn&#8217;t have the previous commit as
an ancestor etc.</p></div>
<div class="paragraph"><p>Unlike when pushing with <a href="git-push.html">git-push(1)</a>, there is no
configuration which&#8217;ll amend these rules, and nothing like a
<code>pre-fetch</code> hook analogous to the <code>pre-receive</code> hook.</p></div>
<div class="paragraph"><p>As with pushing with <a href="git-push.html">git-push(1)</a>, all of the rules described
above about what&#8217;s not allowed as an update can be overridden by
adding an the optional leading <code>+</code> to a refspec (or using <code>--force</code>
command line option). The only exception to this is that no amount of
forcing will make the <code>refs/heads/*</code> namespace accept a non-commit
object.</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><em>git clone</em>, <em>git fetch</em> and <em>git pull</em>, but not <em>git push</em>, will also
accept a suitable bundle file. See <a href="git-bundle.html">git-bundle(1)</a>.</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(7)</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">
ort
</dt>
<dd>
<p>
        This is the default merge strategy when pulling or merging one
        branch.  This strategy 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 strategy can detect
        and handle merges involving renames.  It does not make use of
        detected copies.  The name for this algorithm is an acronym
        ("Ostensibly Recursive&#8217;s Twin") and came from the fact that it
        was written as a replacement for the previous default
        algorithm, <code>recursive</code>.
</p>
<div class="paragraph"><p>The <em>ort</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 in 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>; note that, unlike <em>ours</em>, there is
        no <em>theirs</em> merge strategy to confuse this merge option with.
</p>
</dd>
<dt class="hdlist1">
ignore-space-change
</dt>
<dt class="hdlist1">
ignore-all-space
</dt>
<dt class="hdlist1">
ignore-space-at-eol
</dt>
<dt class="hdlist1">
ignore-cr-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>,
        <code>--ignore-space-at-eol</code>, and <code>--ignore-cr-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">
find-renames[=&lt;n&gt;]
</dt>
<dd>
<p>
        Turn on rename detection, optionally setting the similarity
        threshold.  This is the default. This overrides the
        <em>merge.renames</em> configuration variable.
        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">
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.  It does not make use of detected copies.  This was
        the default strategy for resolving two heads from Git v0.99.9k
        until v2.33.0.
</p>
<div class="paragraph"><p>The <em>recursive</em> strategy takes the same options as <em>ort</em>.  However,
there are three additional options that <em>ort</em> ignores (not documented
above) that are potentially useful with the <em>recursive</em> strategy:</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
patience
</dt>
<dd>
<p>
        Deprecated synonym for <code>diff-algorithm=patience</code>.
</p>
</dd>
<dt class="hdlist1">
diff-algorithm=[patience|minimal|histogram|myers]
</dt>
<dd>
<p>
        Use a different diff algorithm while merging, 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>.  Note that <code>ort</code>
        specifically uses <code>diff-algorithm=histogram</code>, while <code>recursive</code>
        defaults to the <code>diff.algorithm</code> config setting.
</p>
</dd>
<dt class="hdlist1">
no-renames
</dt>
<dd>
<p>
        Turn off rename detection. This overrides the <code>merge.renames</code>
        configuration variable.
        See also <a href="git-diff.html">git-diff(1)</a> <code>--no-renames</code>.
</p>
</dd>
</dl></div>
</dd>
<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.  It does not handle renames.
</p>
</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 <code>ort</code> 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>ort</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 the <code>URL:</code> line
in <code>$GIT_DIR/remotes/&lt;origin&gt;</code> 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>
is consulted and its <code>Pull:</code> 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, and
updates the remote-tracking branch <code>origin/next</code>.
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 cannot 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
 2021-10-18 17:00:13 PDT
</div>
</div>
</body>
</html>
