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