Documentation / git-push.txton commit Update draft release notes for 1.6.0 (0e047bd)
   1git-push(1)
   2===========
   3
   4NAME
   5----
   6git-push - Update remote refs along with associated objects
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git-push' [--all] [--dry-run] [--tags] [--receive-pack=<git-receive-pack>]
  13           [--repo=all] [-f | --force] [-v | --verbose] [<repository> <refspec>...]
  14
  15DESCRIPTION
  16-----------
  17
  18Updates remote refs using local refs, while sending objects
  19necessary to complete the given refs.
  20
  21You can make interesting things happen to a repository
  22every time you push into it, by setting up 'hooks' there.  See
  23documentation for linkgit:git-receive-pack[1].
  24
  25
  26OPTIONS
  27-------
  28<repository>::
  29        The "remote" repository that is destination of a push
  30        operation.  See the section <<URLS,GIT URLS>> below.
  31
  32<refspec>::
  33        The canonical format of a <refspec> parameter is
  34        `+?<src>:<dst>`; that is, an optional plus `+`, followed
  35        by the source ref, followed by a colon `:`, followed by
  36        the destination ref.
  37+
  38The <src> side represents the source branch (or arbitrary
  39"SHA1 expression", such as `master~4` (four parents before the
  40tip of `master` branch); see linkgit:git-rev-parse[1]) that you
  41want to push.  The <dst> side represents the destination location.
  42+
  43The local ref that matches <src> is used
  44to fast forward the remote ref that matches <dst> (or, if no <dst> was
  45specified, the same ref that <src> referred to locally).  If
  46the optional leading plus `+` is used, the remote ref is updated
  47even if it does not result in a fast forward update.
  48+
  49`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`.
  50+
  51A parameter <ref> without a colon pushes the <ref> from the source
  52repository to the destination repository under the same name.
  53+
  54Pushing an empty <src> allows you to delete the <dst> ref from
  55the remote repository.
  56+
  57The special refspec `:` (or `+:` to allow non-fast forward updates)
  58directs git to push "matching" heads: for every head that exists on
  59the local side, the remote side is updated if a head of the same name
  60already exists on the remote side.  This is the default operation mode
  61if no explicit refspec is found (that is neither on the command line
  62nor in any Push line of the corresponding remotes file---see below).
  63
  64--all::
  65        Instead of naming each ref to push, specifies that all
  66        refs under `$GIT_DIR/refs/heads/` be pushed.
  67
  68--mirror::
  69        Instead of naming each ref to push, specifies that all
  70        refs under `$GIT_DIR/refs/` (which includes but is not
  71        limited to `refs/heads/`, `refs/remotes/`, and `refs/tags/`)
  72        be mirrored to the remote repository.  Newly created local
  73        refs will be pushed to the remote end, locally updated refs
  74        will be force updated on the remote end, and deleted refs
  75        will be removed from the remote end.  This is the default
  76        if the configuration option `remote.<remote>.mirror` is
  77        set.
  78
  79--dry-run::
  80        Do everything except actually send the updates.
  81
  82--tags::
  83        All refs under `$GIT_DIR/refs/tags` are pushed, in
  84        addition to refspecs explicitly listed on the command
  85        line.
  86
  87--receive-pack=<git-receive-pack>::
  88        Path to the 'git-receive-pack' program on the remote
  89        end.  Sometimes useful when pushing to a remote
  90        repository over ssh, and you do not have the program in
  91        a directory on the default $PATH.
  92
  93--exec=<git-receive-pack>::
  94        Same as \--receive-pack=<git-receive-pack>.
  95
  96-f::
  97--force::
  98        Usually, the command refuses to update a remote ref that is
  99        not an ancestor of the local ref used to overwrite it.
 100        This flag disables the check.  This can cause the
 101        remote repository to lose commits; use it with care.
 102
 103--repo=<repo>::
 104        When no repository is specified the command defaults to
 105        "origin"; this overrides it.
 106
 107--thin::
 108--no-thin::
 109        These options are passed to `git-send-pack`.  Thin
 110        transfer spends extra cycles to minimize the number of
 111        objects to be sent and meant to be used on slower connection.
 112
 113-v::
 114--verbose::
 115        Run verbosely.
 116
 117include::urls-remotes.txt[]
 118
 119OUTPUT
 120------
 121
 122The output of "git push" depends on the transport method used; this
 123section describes the output when pushing over the git protocol (either
 124locally or via ssh).
 125
 126The status of the push is output in tabular form, with each line
 127representing the status of a single ref. Each line is of the form:
 128
 129-------------------------------
 130 <flag> <summary> <from> -> <to> (<reason>)
 131-------------------------------
 132
 133flag::
 134        A single character indicating the status of the ref. This is
 135        blank for a successfully pushed ref, `!` for a ref that was
 136        rejected or failed to push, and '=' for a ref that was up to
 137        date and did not need pushing (note that the status of up to
 138        date refs is shown only when `git push` is running verbosely).
 139
 140summary::
 141        For a successfully pushed ref, the summary shows the old and new
 142        values of the ref in a form suitable for using as an argument to
 143        `git log` (this is `<old>..<new>` in most cases, and
 144        `<old>...<new>` for forced non-fast forward updates). For a
 145        failed update, more details are given for the failure.
 146        The string `rejected` indicates that git did not try to send the
 147        ref at all (typically because it is not a fast forward). The
 148        string `remote rejected` indicates that the remote end refused
 149        the update; this rejection is typically caused by a hook on the
 150        remote side. The string `remote failure` indicates that the
 151        remote end did not report the successful update of the ref
 152        (perhaps because of a temporary error on the remote side, a
 153        break in the network connection, or other transient error).
 154
 155from::
 156        The name of the local ref being pushed, minus its
 157        `refs/<type>/` prefix. In the case of deletion, the
 158        name of the local ref is omitted.
 159
 160to::
 161        The name of the remote ref being updated, minus its
 162        `refs/<type>/` prefix.
 163
 164reason::
 165        A human-readable explanation. In the case of successfully pushed
 166        refs, no explanation is needed. For a failed ref, the reason for
 167        failure is described.
 168
 169Examples
 170--------
 171
 172git push origin master::
 173        Find a ref that matches `master` in the source repository
 174        (most likely, it would find `refs/heads/master`), and update
 175        the same ref (e.g. `refs/heads/master`) in `origin` repository
 176        with it.  If `master` did not exist remotely, it would be
 177        created.
 178
 179git push origin :experimental::
 180        Find a ref that matches `experimental` in the `origin` repository
 181        (e.g. `refs/heads/experimental`), and delete it.
 182
 183git push origin master:satellite/master::
 184        Find a ref that matches `master` in the source repository
 185        (most likely, it would find `refs/heads/master`), and update
 186        the ref that matches `satellite/master` (most likely, it would
 187        be `refs/remotes/satellite/master`) in `origin` repository with it.
 188
 189git push origin master:refs/heads/experimental::
 190        Create the branch `experimental` in the `origin` repository
 191        by copying the current `master` branch.  This form is only
 192        needed to create a new branch or tag in the remote repository when
 193        the local name and the remote name are different; otherwise,
 194        the ref name on its own will work.
 195
 196Author
 197------
 198Written by Junio C Hamano <junkio@cox.net>, later rewritten in C
 199by Linus Torvalds <torvalds@osdl.org>
 200
 201Documentation
 202--------------
 203Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 204
 205GIT
 206---
 207Part of the linkgit:git[1] suite