<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.9" />
<title>git-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] [--push-option=&lt;string&gt;]
           [--[no-]signed|--sign=(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>The object referenced by &lt;src&gt; is used to update the &lt;dst&gt; reference
on the remote side.  By default this is only allowed if &lt;dst&gt; is not
a tag (annotated or lightweight), and then only if it can fast-forward
&lt;dst&gt;.  By having the optional leading <code>+</code>, you can tell Git to update
the &lt;dst&gt; ref even if it is not allowed by default (e.g., it is not a
fast-forward.)  This does <strong>not</strong> attempt to merge &lt;src&gt; into &lt;dst&gt;.  See
EXAMPLES below for details.</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>
<div class="paragraph"><p>Pushing an empty &lt;src&gt; allows you to delete the &lt;dst&gt; ref from
the remote repository.</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>
</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">
--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">
--sign=(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
</dt>
<dt class="hdlist1">
--push-option
</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.
</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>
</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
        --thin.
</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>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 2017-02-15 15:17:51 PST
</div>
</div>
</body>
</html>
