<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>git-push(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-push(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-push -
   Update remote refs along with associated objects
</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 push</em> [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=&lt;git-receive-pack&gt;]
           [--repo=&lt;repository&gt;] [-f | --force] [-d | --delete] [--prune] [-v | --verbose]
           [-u | --set-upstream] [-o &lt;string&gt; | --push-option=&lt;string&gt;]
           [--[no-]signed|--signed=(true|false|if-asked)]
           [--force-with-lease[=&lt;refname&gt;[:&lt;expect&gt;]]]
           [--no-verify] [&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>Updates remote refs using local refs, while sending objects
necessary to complete the given refs.</p></div>
<div class="paragraph"><p>You can make interesting things happen to a repository
every time you push into it, by setting up <em>hooks</em> there.  See
documentation for <a href="git-receive-pack.html">git-receive-pack(1)</a>.</p></div>
<div class="paragraph"><p>When the command line does not specify where to push with the
<code>&lt;repository&gt;</code> argument, <code>branch.*.remote</code> configuration for the
current branch is consulted to determine where to push.  If the
configuration is missing, it defaults to <em>origin</em>.</p></div>
<div class="paragraph"><p>When the command line does not specify what to push with <code>&lt;refspec&gt;...</code>
arguments or <code>--all</code>, <code>--mirror</code>, <code>--tags</code> options, the command finds
the default <code>&lt;refspec&gt;</code> by consulting <code>remote.*.push</code> configuration,
and if it is not found, honors <code>push.default</code> configuration to decide
what to push (See <a href="git-config.html">git-config(1)</a> for the meaning of <code>push.default</code>).</p></div>
<div class="paragraph"><p>When neither the command-line nor the configuration specify what to
push, the default behavior is used, which corresponds to the <code>simple</code>
value for <code>push.default</code>: the current branch is pushed to the
corresponding upstream branch, but as a safety measure, the push is
aborted if the upstream branch does not have the same name as the
local one.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_options_a_id_options_a">OPTIONS<a id="OPTIONS"></a></h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
&lt;repository&gt;
</dt>
<dd>
<p>
        The "remote" repository that is destination of a push
        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;&#8230;
</dt>
<dd>
<p>
        Specify what destination ref to update with what source object.
        The format of a &lt;refspec&gt; parameter is an optional plus
        <code>+</code>, followed by the source object &lt;src&gt;, followed
        by a colon <code>:</code>, followed by the destination ref &lt;dst&gt;.
</p>
<div class="paragraph"><p>The &lt;src&gt; is often the name of the branch you would want to push, but
it can be any arbitrary "SHA-1 expression", such as <code>master~4</code> or
<code>HEAD</code> (see <a href="gitrevisions.html">gitrevisions(7)</a>).</p></div>
<div class="paragraph"><p>The &lt;dst&gt; tells which ref on the remote side is updated with this
push. Arbitrary expressions cannot be used here, an actual ref must
be named.
If <code>git push [&lt;repository&gt;]</code> without any <code>&lt;refspec&gt;</code> argument is set to
update some ref at the destination with <code>&lt;src&gt;</code> with
<code>remote.&lt;repository&gt;.push</code> configuration variable, <code>:&lt;dst&gt;</code> part can
be omitted&#8212;such a push will update a ref that <code>&lt;src&gt;</code> normally updates
without any <code>&lt;refspec&gt;</code> on the command line.  Otherwise, missing
<code>:&lt;dst&gt;</code> means to update the same ref as the <code>&lt;src&gt;</code>.</p></div>
<div class="paragraph"><p>If &lt;dst&gt; doesn&#8217;t start with <code>refs/</code> (e.g. <code>refs/heads/master</code>) we will
try to infer where in <code>refs/*</code> on the destination &lt;repository&gt; it
belongs based on the the type of &lt;src&gt; being pushed and whether &lt;dst&gt;
is ambiguous.</p></div>
<div class="openblock">
<div class="content">
<div class="ulist"><ul>
<li>
<p>
If &lt;dst&gt; unambiguously refers to a ref on the &lt;repository&gt; remote,
  then push to that ref.
</p>
</li>
<li>
<p>
If &lt;src&gt; resolves to a ref starting with refs/heads/ or refs/tags/,
  then prepend that to &lt;dst&gt;.
</p>
</li>
<li>
<p>
Other ambiguity resolutions might be added in the future, but for
  now any other cases will error out with an error indicating what we
  tried, and depending on the <code>advice.pushUnqualifiedRefname</code>
  configuration (see <a href="git-config.html">git-config(1)</a>) suggest what refs/
  namespace you may have wanted to push to.
</p>
</li>
</ul></div>
</div></div>
<div class="paragraph"><p>The object referenced by &lt;src&gt; is used to update the &lt;dst&gt; reference
on the remote side. Whether this is allowed depends on where in
<code>refs/*</code> the &lt;dst&gt; reference lives as described in detail below, in
those sections "update" means any modifications except deletes, which
as noted after the next few sections are treated differently.</p></div>
<div class="paragraph"><p>The <code>refs/heads/*</code> namespace will only accept commit objects, and
updates only if they can be fast-forwarded.</p></div>
<div class="paragraph"><p>The <code>refs/tags/*</code> namespace will accept any kind of object (as
commits, trees and blobs can be tagged), and any updates to them will
be rejected.</p></div>
<div class="paragraph"><p>It&#8217;s possible to push any type of object to any namespace outside of
<code>refs/{tags,heads}/*</code>. In the case of tags and commits, these will be
treated as if they were the commits inside <code>refs/heads/*</code> for the
purposes of whether the update is allowed.</p></div>
<div class="paragraph"><p>I.e. a fast-forward of commits and tags outside <code>refs/{tags,heads}/*</code>
is allowed, even in cases where what&#8217;s being fast-forwarded is not a
commit, but a tag object which happens to point to a new commit which
is a fast-forward of the commit the last tag (or commit) it&#8217;s
replacing. Replacing a tag with an entirely different tag is also
allowed, if it points to the same commit, as well as pushing a peeled
tag, i.e. pushing the commit that existing tag object points to, or a
new tag object which an existing commit points to.</p></div>
<div class="paragraph"><p>Tree and blob objects outside of <code>refs/{tags,heads}/*</code> will be treated
the same way as if they were inside <code>refs/tags/*</code>, any update of them
will be rejected.</p></div>
<div class="paragraph"><p>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. Hooks and configuration can also override
or amend these rules, see e.g. <code>receive.denyNonFastForwards</code> in
<a href="git-config.html">git-config(1)</a> and <code>pre-receive</code> and <code>update</code> in
<a href="githooks.html">githooks(5)</a>.</p></div>
<div class="paragraph"><p>Pushing an empty &lt;src&gt; allows you to delete the &lt;dst&gt; ref from the
remote repository. Deletions are always accepted without a leading <code>+</code>
in the refspec (or <code>--force</code>), except when forbidden by configuration
or hooks. See <code>receive.denyDeletes</code> in <a href="git-config.html">git-config(1)</a> and
<code>pre-receive</code> and <code>update</code> in <a href="githooks.html">githooks(5)</a>.</p></div>
<div class="paragraph"><p>The special refspec <code>:</code> (or <code>+:</code> to allow non-fast-forward updates)
directs Git to push "matching" branches: for every branch that exists on
the local side, the remote side is updated if a branch of the same name
already exists on the remote side.</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>.</p></div>
</dd>
<dt class="hdlist1">
--all
</dt>
<dd>
<p>
        Push all branches (i.e. refs under <code>refs/heads/</code>); cannot be
        used with other &lt;refspec&gt;.
</p>
</dd>
<dt class="hdlist1">
--prune
</dt>
<dd>
<p>
        Remove remote branches that don&#8217;t have a local counterpart. For example
        a remote branch <code>tmp</code> will be removed if a local branch with the same
        name doesn&#8217;t exist any more. This also respects refspecs, e.g.
        <code>git push --prune remote refs/heads/*:refs/tmp/*</code> would
        make sure that remote <code>refs/tmp/foo</code> will be removed if <code>refs/heads/foo</code>
        doesn&#8217;t exist.
</p>
</dd>
<dt class="hdlist1">
--mirror
</dt>
<dd>
<p>
        Instead of naming each ref to push, specifies that all
        refs under <code>refs/</code> (which includes but is not
        limited to <code>refs/heads/</code>, <code>refs/remotes/</code>, and <code>refs/tags/</code>)
        be mirrored to the remote repository.  Newly created local
        refs will be pushed to the remote end, locally updated refs
        will be force updated on the remote end, and deleted refs
        will be removed from the remote end.  This is the default
        if the configuration option <code>remote.&lt;remote&gt;.mirror</code> is
        set.
</p>
</dd>
<dt class="hdlist1">
-n
</dt>
<dt class="hdlist1">
--dry-run
</dt>
<dd>
<p>
        Do everything except actually send the updates.
</p>
</dd>
<dt class="hdlist1">
--porcelain
</dt>
<dd>
<p>
        Produce machine-readable output.  The output status line for each ref
        will be tab-separated and sent to stdout instead of stderr.  The full
        symbolic names of the refs will be given.
</p>
</dd>
<dt class="hdlist1">
-d
</dt>
<dt class="hdlist1">
--delete
</dt>
<dd>
<p>
        All listed refs are deleted from the remote repository. This is
        the same as prefixing all refs with a colon.
</p>
</dd>
<dt class="hdlist1">
--tags
</dt>
<dd>
<p>
        All refs under <code>refs/tags</code> are pushed, in
        addition to refspecs explicitly listed on the command
        line.
</p>
</dd>
<dt class="hdlist1">
--follow-tags
</dt>
<dd>
<p>
        Push all the refs that would be pushed without this option,
        and also push annotated tags in <code>refs/tags</code> that are missing
        from the remote but are pointing at commit-ish that are
        reachable from the refs being pushed.  This can also be specified
        with configuration variable <code>push.followTags</code>.  For more
        information, see <code>push.followTags</code> in <a href="git-config.html">git-config(1)</a>.
</p>
</dd>
<dt class="hdlist1">
--[no-]signed
</dt>
<dt class="hdlist1">
--signed=(true|false|if-asked)
</dt>
<dd>
<p>
        GPG-sign the push request to update refs on the receiving
        side, to allow it to be checked by the hooks and/or be
        logged.  If <code>false</code> or <code>--no-signed</code>, no signing will be
        attempted.  If <code>true</code> or <code>--signed</code>, the push will fail if the
        server does not support signed pushes.  If set to <code>if-asked</code>,
        sign if and only if the server supports signed pushes.  The push
        will also fail if the actual call to <code>gpg --sign</code> fails.  See
        <a href="git-receive-pack.html">git-receive-pack(1)</a> for the details on the receiving end.
</p>
</dd>
<dt class="hdlist1">
--[no-]atomic
</dt>
<dd>
<p>
        Use an atomic transaction on the remote side if available.
        Either all refs are updated, or on error, no refs are updated.
        If the server does not support atomic pushes the push will fail.
</p>
</dd>
<dt class="hdlist1">
-o &lt;option&gt;
</dt>
<dt class="hdlist1">
--push-option=&lt;option&gt;
</dt>
<dd>
<p>
        Transmit the given string to the server, which passes them to
        the pre-receive as well as the post-receive hook. The given string
        must not contain a NUL or LF character.
        When multiple <code>--push-option=&lt;option&gt;</code> are given, they are
        all sent to the other side in the order listed on the
        command line.
        When no <code>--push-option=&lt;option&gt;</code> is given from the command
        line, the values of configuration variable <code>push.pushOption</code>
        are used instead.
</p>
</dd>
<dt class="hdlist1">
--receive-pack=&lt;git-receive-pack&gt;
</dt>
<dt class="hdlist1">
--exec=&lt;git-receive-pack&gt;
</dt>
<dd>
<p>
        Path to the <em>git-receive-pack</em> program on the remote
        end.  Sometimes useful when pushing to a remote
        repository over ssh, and you do not have the program in
        a directory on the default $PATH.
</p>
</dd>
<dt class="hdlist1">
--[no-]force-with-lease
</dt>
<dt class="hdlist1">
--force-with-lease=&lt;refname&gt;
</dt>
<dt class="hdlist1">
--force-with-lease=&lt;refname&gt;:&lt;expect&gt;
</dt>
<dd>
<p>
        Usually, "git push" refuses to update a remote ref that is
        not an ancestor of the local ref used to overwrite it.
</p>
<div class="paragraph"><p>This option overrides this restriction if the current value of the
remote ref is the expected value.  "git push" fails otherwise.</p></div>
<div class="paragraph"><p>Imagine that you have to rebase what you have already published.
You will have to bypass the "must fast-forward" rule in order to
replace the history you originally published with the rebased history.
If somebody else built on top of your original history while you are
rebasing, the tip of the branch at the remote may advance with her
commit, and blindly pushing with <code>--force</code> will lose her work.</p></div>
<div class="paragraph"><p>This option allows you to say that you expect the history you are
updating is what you rebased and want to replace. If the remote ref
still points at the commit you specified, you can be sure that no
other people did anything to the ref. It is like taking a "lease" on
the ref without explicitly locking it, and the remote ref is updated
only if the "lease" is still valid.</p></div>
<div class="paragraph"><p><code>--force-with-lease</code> alone, without specifying the details, will protect
all remote refs that are going to be updated by requiring their
current value to be the same as the remote-tracking branch we have
for them.</p></div>
<div class="paragraph"><p><code>--force-with-lease=&lt;refname&gt;</code>, without specifying the expected value, will
protect the named ref (alone), if it is going to be updated, by
requiring its current value to be the same as the remote-tracking
branch we have for it.</p></div>
<div class="paragraph"><p><code>--force-with-lease=&lt;refname&gt;:&lt;expect&gt;</code> will protect the named ref (alone),
if it is going to be updated, by requiring its current value to be
the same as the specified value <code>&lt;expect&gt;</code> (which is allowed to be
different from the remote-tracking branch we have for the refname,
or we do not even have to have such a remote-tracking branch when
this form is used).  If <code>&lt;expect&gt;</code> is the empty string, then the named ref
must not already exist.</p></div>
<div class="paragraph"><p>Note that all forms other than <code>--force-with-lease=&lt;refname&gt;:&lt;expect&gt;</code>
that specifies the expected current value of the ref explicitly are
still experimental and their semantics may change as we gain experience
with this feature.</p></div>
<div class="paragraph"><p>"--no-force-with-lease" will cancel all the previous --force-with-lease on the
command line.</p></div>
<div class="paragraph"><p>A general note on safety: supplying this option without an expected
value, i.e. as <code>--force-with-lease</code> or <code>--force-with-lease=&lt;refname&gt;</code>
interacts very badly with anything that implicitly runs <code>git fetch</code> on
the remote to be pushed to in the background, e.g. <code>git fetch origin</code>
on your repository in a cronjob.</p></div>
<div class="paragraph"><p>The protection it offers over <code>--force</code> is ensuring that subsequent
changes your work wasn&#8217;t based on aren&#8217;t clobbered, but this is
trivially defeated if some background process is updating refs in the
background. We don&#8217;t have anything except the remote tracking info to
go by as a heuristic for refs you&#8217;re expected to have seen &amp; are
willing to clobber.</p></div>
<div class="paragraph"><p>If your editor or some other system is running <code>git fetch</code> in the
background for you a way to mitigate this is to simply set up another
remote:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>git remote add origin-push $(git config remote.origin.url)
git fetch origin-push</code></pre>
</div></div>
<div class="paragraph"><p>Now when the background process runs <code>git fetch origin</code> the references
on <code>origin-push</code> won&#8217;t be updated, and thus commands like:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>git push --force-with-lease origin-push</code></pre>
</div></div>
<div class="paragraph"><p>Will fail unless you manually run <code>git fetch origin-push</code>. This method
is of course entirely defeated by something that runs <code>git fetch
--all</code>, in that case you&#8217;d need to either disable it or do something
more tedious like:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>git fetch              # update 'master' from remote
git tag base master    # mark our base point
git rebase -i master   # rewrite some commits
git push --force-with-lease=master:base master:master</code></pre>
</div></div>
<div class="paragraph"><p>I.e. create a <code>base</code> tag for versions of the upstream code that you&#8217;ve
seen and are willing to overwrite, then rewrite history, and finally
force push changes to <code>master</code> if the remote version is still at
<code>base</code>, regardless of what your local <code>remotes/origin/master</code> has been
updated to in the background.</p></div>
</dd>
<dt class="hdlist1">
-f
</dt>
<dt class="hdlist1">
--force
</dt>
<dd>
<p>
        Usually, the command refuses to update a remote ref that is
        not an ancestor of the local ref used to overwrite it.
        Also, when <code>--force-with-lease</code> option is used, the command refuses
        to update a remote ref whose current value does not match
        what is expected.
</p>
<div class="paragraph"><p>This flag disables these checks, and can cause the remote repository
to lose commits; use it with care.</p></div>
<div class="paragraph"><p>Note that <code>--force</code> applies to all the refs that are pushed, hence
using it with <code>push.default</code> set to <code>matching</code> or with multiple push
destinations configured with <code>remote.*.push</code> may overwrite refs
other than the current branch (including local refs that are
strictly behind their remote counterpart).  To force a push to only
one branch, use a <code>+</code> in front of the refspec to push (e.g <code>git push
origin +master</code> to force a push to the <code>master</code> branch). See the
<code>&lt;refspec&gt;...</code> section above for details.</p></div>
</dd>
<dt class="hdlist1">
--repo=&lt;repository&gt;
</dt>
<dd>
<p>
        This option is equivalent to the &lt;repository&gt; argument. If both
        are specified, the command-line argument takes precedence.
</p>
</dd>
<dt class="hdlist1">
-u
</dt>
<dt class="hdlist1">
--set-upstream
</dt>
<dd>
<p>
        For every branch that is up to date or successfully pushed, 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> in <a href="git-config.html">git-config(1)</a>.
</p>
</dd>
<dt class="hdlist1">
--[no-]thin
</dt>
<dd>
<p>
        These options are passed to <a href="git-send-pack.html">git-send-pack(1)</a>. A thin transfer
        significantly reduces the amount of sent data when the sender and
        receiver share many of the same objects in common. The default is
        <code>--thin</code>.
</p>
</dd>
<dt class="hdlist1">
-q
</dt>
<dt class="hdlist1">
--quiet
</dt>
<dd>
<p>
        Suppress all output, including the listing of updated refs,
        unless an error occurs. Progress is not reported to the standard
        error stream.
</p>
</dd>
<dt class="hdlist1">
-v
</dt>
<dt class="hdlist1">
--verbose
</dt>
<dd>
<p>
        Run verbosely.
</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">
--no-recurse-submodules
</dt>
<dt class="hdlist1">
--recurse-submodules=check|on-demand|only|no
</dt>
<dd>
<p>
        May be used to make sure all submodule commits used by the
        revisions to be pushed are available on a remote-tracking branch.
        If <em>check</em> is used Git will verify that all submodule commits that
        changed in the revisions to be pushed are available on at least one
        remote of the submodule. If any commits are missing the push will
        be aborted and exit with non-zero status. If <em>on-demand</em> is used
        all submodules that changed in the revisions to be pushed will be
        pushed. If on-demand was not able to push all necessary revisions it will
        also be aborted and exit with non-zero status. If <em>only</em> is used all
        submodules will be recursively pushed while the superproject is left
        unpushed. A value of <em>no</em> or using <code>--no-recurse-submodules</code> can be used
        to override the push.recurseSubmodules configuration variable when no
        submodule recursion is required.
</p>
</dd>
<dt class="hdlist1">
--[no-]verify
</dt>
<dd>
<p>
        Toggle the pre-push hook (see <a href="githooks.html">githooks(5)</a>).  The
        default is --verify, giving the hook a chance to prevent the
        push.  With --no-verify, the hook is bypassed completely.
</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>
</dl></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="_output">OUTPUT</h2>
<div class="sectionbody">
<div class="paragraph"><p>The output of "git push" depends on the transport method used; this
section describes the output when pushing over the Git protocol (either
locally or via ssh).</p></div>
<div class="paragraph"><p>The status of the push is output in tabular form, with each line
representing the status of a single ref. Each line is of the form:</p></div>
<div class="listingblock">
<div class="content">
<pre><code> &lt;flag&gt; &lt;summary&gt; &lt;from&gt; -&gt; &lt;to&gt; (&lt;reason&gt;)</code></pre>
</div></div>
<div class="paragraph"><p>If --porcelain is used, then each line of the output is of the form:</p></div>
<div class="listingblock">
<div class="content">
<pre><code> &lt;flag&gt; \t &lt;from&gt;:&lt;to&gt; \t &lt;summary&gt; (&lt;reason&gt;)</code></pre>
</div></div>
<div class="paragraph"><p>The status of up-to-date refs is shown only if --porcelain or --verbose
option is used.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
flag
</dt>
<dd>
<p>
        A single character indicating the status of the ref:
</p>
<div class="dlist"><dl>
<dt class="hdlist1">
(space)
</dt>
<dd>
<p>
for a successfully pushed fast-forward;
</p>
</dd>
<dt class="hdlist1">
<code>+</code>
</dt>
<dd>
<p>
for a successful forced update;
</p>
</dd>
<dt class="hdlist1">
<code>-</code>
</dt>
<dd>
<p>
for a successfully deleted ref;
</p>
</dd>
<dt class="hdlist1">
<code>*</code>
</dt>
<dd>
<p>
for a successfully pushed new ref;
</p>
</dd>
<dt class="hdlist1">
<code>!</code>
</dt>
<dd>
<p>
for a ref that was rejected or failed to push; and
</p>
</dd>
<dt class="hdlist1">
<code>=</code>
</dt>
<dd>
<p>
for a ref that was up to date and did not need pushing.
</p>
</dd>
</dl></div>
</dd>
<dt class="hdlist1">
summary
</dt>
<dd>
<p>
        For a successfully pushed ref, the summary shows the old and new
        values of the ref in a form suitable for using as an argument to
        <code>git log</code> (this is <code>&lt;old&gt;..&lt;new&gt;</code> in most cases, and
        <code>&lt;old&gt;...&lt;new&gt;</code> for forced non-fast-forward updates).
</p>
<div class="paragraph"><p>For a failed update, more details are given:</p></div>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
rejected
</dt>
<dd>
<p>
        Git did not try to send the ref at all, typically because it
        is not a fast-forward and you did not force the update.
</p>
</dd>
<dt class="hdlist1">
remote rejected
</dt>
<dd>
<p>
        The remote end refused the update.  Usually caused by a hook
        on the remote side, or because the remote repository has one
        of the following safety options in effect:
        <code>receive.denyCurrentBranch</code> (for pushes to the checked out
        branch), <code>receive.denyNonFastForwards</code> (for forced
        non-fast-forward updates), <code>receive.denyDeletes</code> or
        <code>receive.denyDeleteCurrent</code>.  See <a href="git-config.html">git-config(1)</a>.
</p>
</dd>
<dt class="hdlist1">
remote failure
</dt>
<dd>
<p>
        The remote end did not report the successful update of the ref,
        perhaps because of a temporary error on the remote side, a
        break in the network connection, or other transient error.
</p>
</dd>
</dl></div>
</div></div>
</dd>
<dt class="hdlist1">
from
</dt>
<dd>
<p>
        The name of the local ref being pushed, minus its
        <code>refs/&lt;type&gt;/</code> prefix. In the case of deletion, the
        name of the local ref is omitted.
</p>
</dd>
<dt class="hdlist1">
to
</dt>
<dd>
<p>
        The name of the remote ref being updated, minus its
        <code>refs/&lt;type&gt;/</code> prefix.
</p>
</dd>
<dt class="hdlist1">
reason
</dt>
<dd>
<p>
        A human-readable explanation. In the case of successfully pushed
        refs, no explanation is needed. For a failed ref, the reason for
        failure is described.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_note_about_fast_forwards">NOTE ABOUT FAST-FORWARDS</h2>
<div class="sectionbody">
<div class="paragraph"><p>When an update changes a branch (or more in general, a ref) that used to
point at commit A to point at another commit B, it is called a
fast-forward update if and only if B is a descendant of A.</p></div>
<div class="paragraph"><p>In a fast-forward update from A to B, the set of commits that the original
commit A built on top of is a subset of the commits the new commit B
builds on top of.  Hence, it does not lose any history.</p></div>
<div class="paragraph"><p>In contrast, a non-fast-forward update will lose history.  For example,
suppose you and somebody else started at the same commit X, and you built
a history leading to commit B while the other person built a history
leading to commit A.  The history looks like this:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>      B
     /
 ---X---A</code></pre>
</div></div>
<div class="paragraph"><p>Further suppose that the other person already pushed changes leading to A
back to the original repository from which you two obtained the original
commit X.</p></div>
<div class="paragraph"><p>The push done by the other person updated the branch that used to point at
commit X to point at commit A.  It is a fast-forward.</p></div>
<div class="paragraph"><p>But if you try to push, you will attempt to update the branch (that
now points at A) with commit B.  This does <em>not</em> fast-forward.  If you did
so, the changes introduced by commit A will be lost, because everybody
will now start building on top of B.</p></div>
<div class="paragraph"><p>The command by default does not allow an update that is not a fast-forward
to prevent such loss of history.</p></div>
<div class="paragraph"><p>If you do not want to lose your work (history from X to B) or the work by
the other person (history from X to A), you would need to first fetch the
history from the repository, create a history that contains changes done
by both parties, and push the result back.</p></div>
<div class="paragraph"><p>You can perform "git pull", resolve potential conflicts, and "git push"
the result.  A "git pull" will create a merge commit C between commits A
and B.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>      B---C
     /   /
 ---X---A</code></pre>
</div></div>
<div class="paragraph"><p>Updating A with the resulting merge commit will fast-forward and your
push will be accepted.</p></div>
<div class="paragraph"><p>Alternatively, you can rebase your change between X and B on top of A,
with "git pull --rebase", and push the result back.  The rebase will
create a new commit D that builds the change between X and B on top of
A.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>      B   D
     /   /
 ---X---A</code></pre>
</div></div>
<div class="paragraph"><p>Again, updating A with this commit will fast-forward and your push will be
accepted.</p></div>
<div class="paragraph"><p>There is another common situation where you may encounter non-fast-forward
rejection when you try to push, and it is possible even when you are
pushing into a repository nobody else pushes into. After you push commit
A yourself (in the first picture in this section), replace it with "git
commit --amend" to produce commit B, and you try to push it out, because
forgot that you have pushed A out already. In such a case, and only if
you are certain that nobody in the meantime fetched your earlier commit A
(and started building on top of it), you can run "git push --force" to
overwrite it. In other words, "git push --force" is a method reserved for
a case where you do mean to lose history.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">EXAMPLES</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
<code>git push</code>
</dt>
<dd>
<p>
        Works like <code>git push &lt;remote&gt;</code>, where &lt;remote&gt; is the
        current branch&#8217;s remote (or <code>origin</code>, if no remote is
        configured for the current branch).
</p>
</dd>
<dt class="hdlist1">
<code>git push origin</code>
</dt>
<dd>
<p>
        Without additional configuration, pushes the current branch to
        the configured upstream (<code>remote.origin.merge</code> configuration
        variable) if it has the same name as the current branch, and
        errors out without pushing otherwise.
</p>
<div class="paragraph"><p>The default behavior of this command when no &lt;refspec&gt; is given can be
configured by setting the <code>push</code> option of the remote, or the <code>push.default</code>
configuration variable.</p></div>
<div class="paragraph"><p>For example, to default to pushing only the current branch to <code>origin</code>
use <code>git config remote.origin.push HEAD</code>.  Any valid &lt;refspec&gt; (like
the ones in the examples below) can be configured as the default for
<code>git push origin</code>.</p></div>
</dd>
<dt class="hdlist1">
<code>git push origin :</code>
</dt>
<dd>
<p>
        Push "matching" branches to <code>origin</code>. See
        &lt;refspec&gt; in the <a href="#OPTIONS">OPTIONS</a> section above for a
        description of "matching" branches.
</p>
</dd>
<dt class="hdlist1">
<code>git push origin master</code>
</dt>
<dd>
<p>
        Find a ref that matches <code>master</code> in the source repository
        (most likely, it would find <code>refs/heads/master</code>), and update
        the same ref (e.g. <code>refs/heads/master</code>) in <code>origin</code> repository
        with it.  If <code>master</code> did not exist remotely, it would be
        created.
</p>
</dd>
<dt class="hdlist1">
<code>git push origin HEAD</code>
</dt>
<dd>
<p>
        A handy way to push the current branch to the same name on the
        remote.
</p>
</dd>
<dt class="hdlist1">
<code>git push mothership master:satellite/master dev:satellite/dev</code>
</dt>
<dd>
<p>
        Use the source ref that matches <code>master</code> (e.g. <code>refs/heads/master</code>)
        to update the ref that matches <code>satellite/master</code> (most probably
        <code>refs/remotes/satellite/master</code>) in the <code>mothership</code> repository;
        do the same for <code>dev</code> and <code>satellite/dev</code>.
</p>
<div class="paragraph"><p>See the section describing <code>&lt;refspec&gt;...</code> above for a discussion of
the matching semantics.</p></div>
<div class="paragraph"><p>This is to emulate <code>git fetch</code> run on the <code>mothership</code> using <code>git
push</code> that is run in the opposite direction in order to integrate
the work done on <code>satellite</code>, and is often necessary when you can
only make connection in one way (i.e. satellite can ssh into
mothership but mothership cannot initiate connection to satellite
because the latter is behind a firewall or does not run sshd).</p></div>
<div class="paragraph"><p>After running this <code>git push</code> on the <code>satellite</code> machine, you would
ssh into the <code>mothership</code> and run <code>git merge</code> there to complete the
emulation of <code>git pull</code> that were run on <code>mothership</code> to pull changes
made on <code>satellite</code>.</p></div>
</dd>
<dt class="hdlist1">
<code>git push origin HEAD:master</code>
</dt>
<dd>
<p>
        Push the current branch to the remote ref matching <code>master</code> in the
        <code>origin</code> repository. This form is convenient to push the current
        branch without thinking about its local name.
</p>
</dd>
<dt class="hdlist1">
<code>git push origin master:refs/heads/experimental</code>
</dt>
<dd>
<p>
        Create the branch <code>experimental</code> in the <code>origin</code> repository
        by copying the current <code>master</code> branch.  This form is only
        needed to create a new branch or tag in the remote repository when
        the local name and the remote name are different; otherwise,
        the ref name on its own will work.
</p>
</dd>
<dt class="hdlist1">
<code>git push origin :experimental</code>
</dt>
<dd>
<p>
        Find a ref that matches <code>experimental</code> in the <code>origin</code> repository
        (e.g. <code>refs/heads/experimental</code>), and delete it.
</p>
</dd>
<dt class="hdlist1">
<code>git push origin +dev:master</code>
</dt>
<dd>
<p>
        Update the origin repository&#8217;s master branch with the dev branch,
        allowing non-fast-forward updates.  <strong>This can leave unreferenced
        commits dangling in the origin repository.</strong>  Consider the
        following situation, where a fast-forward is not possible:
</p>
<div class="listingblock">
<div class="content">
<pre><code>            o---o---o---A---B  origin/master
                     \
                      X---Y---Z  dev</code></pre>
</div></div>
<div class="paragraph"><p>The above command would change the origin repository to</p></div>
<div class="listingblock">
<div class="content">
<pre><code>                      A---B  (unnamed branch)
                     /
            o---o---o---X---Y---Z  master</code></pre>
</div></div>
<div class="paragraph"><p>Commits A and B would no longer belong to a branch with a symbolic name,
and so would be unreachable.  As such, these commits would be removed by
a <code>git gc</code> command on the origin repository.</p></div>
</dd>
</dl></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="_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
 2019-01-04 14:31:36 PST
</div>
</div>
</body>
</html>
