Documentation / git-push.txton commit doc/fast-import: clarify how content states are built (e705288)
   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 | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
  13           [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
  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[[OPTIONS]]
  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 format of a <refspec> parameter is an optional plus
  37        `+`, followed by the source ref <src>, followed
  38        by a colon `:`, followed by the destination ref <dst>.
  39        It is used to specify with what <src> object the <dst> ref
  40        in the remote repository is to be updated.
  41+
  42The <src> is often the name of the branch you would want to push, but
  43it can be any arbitrary "SHA-1 expression", such as `master~4` or
  44`HEAD` (see linkgit:gitrevisions[7]).
  45+
  46The <dst> tells which ref on the remote side is updated with this
  47push. Arbitrary expressions cannot be used here, an actual ref must
  48be named. If `:`<dst> is omitted, the same ref as <src> will be
  49updated.
  50+
  51The object referenced by <src> is used to update the <dst> reference
  52on the remote side, but by default this is only allowed if the
  53update can fast-forward <dst>.  By having the optional leading `+`,
  54you can tell git to update the <dst> ref even when the update is not a
  55fast-forward.  This does *not* attempt to merge <src> into <dst>.  See
  56EXAMPLES below for details.
  57+
  58`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`.
  59+
  60Pushing an empty <src> allows you to delete the <dst> ref from
  61the remote repository.
  62+
  63The special refspec `:` (or `+:` to allow non-fast-forward updates)
  64directs git to push "matching" branches: for every branch that exists on
  65the local side, the remote side is updated if a branch of the same name
  66already exists on the remote side.  This is the default operation mode
  67if no explicit refspec is found (that is neither on the command line
  68nor in any Push line of the corresponding remotes file---see below).
  69
  70--all::
  71        Instead of naming each ref to push, specifies that all
  72        refs under `refs/heads/` be pushed.
  73
  74--prune::
  75        Remove remote branches that don't have a local counterpart. For example
  76        a remote branch `tmp` will be removed if a local branch with the same
  77        name doesn't exist any more. This also respects refspecs, e.g.
  78        `git push --prune remote refs/heads/*:refs/tmp/*` would
  79        make sure that remote `refs/tmp/foo` will be removed if `refs/heads/foo`
  80        doesn't exist.
  81
  82--mirror::
  83        Instead of naming each ref to push, specifies that all
  84        refs under `refs/` (which includes but is not
  85        limited to `refs/heads/`, `refs/remotes/`, and `refs/tags/`)
  86        be mirrored to the remote repository.  Newly created local
  87        refs will be pushed to the remote end, locally updated refs
  88        will be force updated on the remote end, and deleted refs
  89        will be removed from the remote end.  This is the default
  90        if the configuration option `remote.<remote>.mirror` is
  91        set.
  92
  93-n::
  94--dry-run::
  95        Do everything except actually send the updates.
  96
  97--porcelain::
  98        Produce machine-readable output.  The output status line for each ref
  99        will be tab-separated and sent to stdout instead of stderr.  The full
 100        symbolic names of the refs will be given.
 101
 102--delete::
 103        All listed refs are deleted from the remote repository. This is
 104        the same as prefixing all refs with a colon.
 105
 106--tags::
 107        All refs under `refs/tags` are pushed, in
 108        addition to refspecs explicitly listed on the command
 109        line.
 110
 111--receive-pack=<git-receive-pack>::
 112--exec=<git-receive-pack>::
 113        Path to the 'git-receive-pack' program on the remote
 114        end.  Sometimes useful when pushing to a remote
 115        repository over ssh, and you do not have the program in
 116        a directory on the default $PATH.
 117
 118-f::
 119--force::
 120        Usually, the command refuses to update a remote ref that is
 121        not an ancestor of the local ref used to overwrite it.
 122        This flag disables the check.  This can cause the
 123        remote repository to lose commits; use it with care.
 124
 125--repo=<repository>::
 126        This option is only relevant if no <repository> argument is
 127        passed in the invocation. In this case, 'git push' derives the
 128        remote name from the current branch: If it tracks a remote
 129        branch, then that remote repository is pushed to. Otherwise,
 130        the name "origin" is used. For this latter case, this option
 131        can be used to override the name "origin". In other words,
 132        the difference between these two commands
 133+
 134--------------------------
 135git push public         #1
 136git push --repo=public  #2
 137--------------------------
 138+
 139is that #1 always pushes to "public" whereas #2 pushes to "public"
 140only if the current branch does not track a remote branch. This is
 141useful if you write an alias or script around 'git push'.
 142
 143-u::
 144--set-upstream::
 145        For every branch that is up to date or successfully pushed, add
 146        upstream (tracking) reference, used by argument-less
 147        linkgit:git-pull[1] and other commands. For more information,
 148        see 'branch.<name>.merge' in linkgit:git-config[1].
 149
 150--thin::
 151--no-thin::
 152        These options are passed to linkgit:git-send-pack[1]. A thin transfer
 153        significantly reduces the amount of sent data when the sender and
 154        receiver share many of the same objects in common. The default is
 155        \--thin.
 156
 157-q::
 158--quiet::
 159        Suppress all output, including the listing of updated refs,
 160        unless an error occurs. Progress is not reported to the standard
 161        error stream.
 162
 163-v::
 164--verbose::
 165        Run verbosely.
 166
 167--progress::
 168        Progress status is reported on the standard error stream
 169        by default when it is attached to a terminal, unless -q
 170        is specified. This flag forces progress status even if the
 171        standard error stream is not directed to a terminal.
 172
 173--recurse-submodules=check|on-demand::
 174        Make sure all submodule commits used by the revisions to be
 175        pushed are available on a remote tracking branch. If 'check' is
 176        used git will verify that all submodule commits that changed in
 177        the revisions to be pushed are available on at least one remote
 178        of the submodule. If any commits are missing the push will be
 179        aborted and exit with non-zero status. If 'on-demand' is used
 180        all submodules that changed in the revisions to be pushed will
 181        be pushed. If on-demand was not able to push all necessary
 182        revisions it will also be aborted and exit with non-zero status.
 183
 184
 185include::urls-remotes.txt[]
 186
 187OUTPUT
 188------
 189
 190The output of "git push" depends on the transport method used; this
 191section describes the output when pushing over the git protocol (either
 192locally or via ssh).
 193
 194The status of the push is output in tabular form, with each line
 195representing the status of a single ref. Each line is of the form:
 196
 197-------------------------------
 198 <flag> <summary> <from> -> <to> (<reason>)
 199-------------------------------
 200
 201If --porcelain is used, then each line of the output is of the form:
 202
 203-------------------------------
 204 <flag> \t <from>:<to> \t <summary> (<reason>)
 205-------------------------------
 206
 207The status of up-to-date refs is shown only if --porcelain or --verbose
 208option is used.
 209
 210flag::
 211        A single character indicating the status of the ref:
 212(space);; for a successfully pushed fast-forward;
 213`+`;; for a successful forced update;
 214`-`;; for a successfully deleted ref;
 215`*`;; for a successfully pushed new ref;
 216`!`;; for a ref that was rejected or failed to push; and
 217`=`;; for a ref that was up to date and did not need pushing.
 218
 219summary::
 220        For a successfully pushed ref, the summary shows the old and new
 221        values of the ref in a form suitable for using as an argument to
 222        `git log` (this is `<old>..<new>` in most cases, and
 223        `<old>...<new>` for forced non-fast-forward updates).
 224+
 225For a failed update, more details are given:
 226+
 227--
 228rejected::
 229        Git did not try to send the ref at all, typically because it
 230        is not a fast-forward and you did not force the update.
 231
 232remote rejected::
 233        The remote end refused the update.  Usually caused by a hook
 234        on the remote side, or because the remote repository has one
 235        of the following safety options in effect:
 236        `receive.denyCurrentBranch` (for pushes to the checked out
 237        branch), `receive.denyNonFastForwards` (for forced
 238        non-fast-forward updates), `receive.denyDeletes` or
 239        `receive.denyDeleteCurrent`.  See linkgit:git-config[1].
 240
 241remote failure::
 242        The remote end did not report the successful update of the ref,
 243        perhaps because of a temporary error on the remote side, a
 244        break in the network connection, or other transient error.
 245--
 246
 247from::
 248        The name of the local ref being pushed, minus its
 249        `refs/<type>/` prefix. In the case of deletion, the
 250        name of the local ref is omitted.
 251
 252to::
 253        The name of the remote ref being updated, minus its
 254        `refs/<type>/` prefix.
 255
 256reason::
 257        A human-readable explanation. In the case of successfully pushed
 258        refs, no explanation is needed. For a failed ref, the reason for
 259        failure is described.
 260
 261Note about fast-forwards
 262------------------------
 263
 264When an update changes a branch (or more in general, a ref) that used to
 265point at commit A to point at another commit B, it is called a
 266fast-forward update if and only if B is a descendant of A.
 267
 268In a fast-forward update from A to B, the set of commits that the original
 269commit A built on top of is a subset of the commits the new commit B
 270builds on top of.  Hence, it does not lose any history.
 271
 272In contrast, a non-fast-forward update will lose history.  For example,
 273suppose you and somebody else started at the same commit X, and you built
 274a history leading to commit B while the other person built a history
 275leading to commit A.  The history looks like this:
 276
 277----------------
 278
 279      B
 280     /
 281 ---X---A
 282
 283----------------
 284
 285Further suppose that the other person already pushed changes leading to A
 286back to the original repository you two obtained the original commit X.
 287
 288The push done by the other person updated the branch that used to point at
 289commit X to point at commit A.  It is a fast-forward.
 290
 291But if you try to push, you will attempt to update the branch (that
 292now points at A) with commit B.  This does _not_ fast-forward.  If you did
 293so, the changes introduced by commit A will be lost, because everybody
 294will now start building on top of B.
 295
 296The command by default does not allow an update that is not a fast-forward
 297to prevent such loss of history.
 298
 299If you do not want to lose your work (history from X to B) nor the work by
 300the other person (history from X to A), you would need to first fetch the
 301history from the repository, create a history that contains changes done
 302by both parties, and push the result back.
 303
 304You can perform "git pull", resolve potential conflicts, and "git push"
 305the result.  A "git pull" will create a merge commit C between commits A
 306and B.
 307
 308----------------
 309
 310      B---C
 311     /   /
 312 ---X---A
 313
 314----------------
 315
 316Updating A with the resulting merge commit will fast-forward and your
 317push will be accepted.
 318
 319Alternatively, you can rebase your change between X and B on top of A,
 320with "git pull --rebase", and push the result back.  The rebase will
 321create a new commit D that builds the change between X and B on top of
 322A.
 323
 324----------------
 325
 326      B   D
 327     /   /
 328 ---X---A
 329
 330----------------
 331
 332Again, updating A with this commit will fast-forward and your push will be
 333accepted.
 334
 335There is another common situation where you may encounter non-fast-forward
 336rejection when you try to push, and it is possible even when you are
 337pushing into a repository nobody else pushes into. After you push commit
 338A yourself (in the first picture in this section), replace it with "git
 339commit --amend" to produce commit B, and you try to push it out, because
 340forgot that you have pushed A out already. In such a case, and only if
 341you are certain that nobody in the meantime fetched your earlier commit A
 342(and started building on top of it), you can run "git push --force" to
 343overwrite it. In other words, "git push --force" is a method reserved for
 344a case where you do mean to lose history.
 345
 346
 347Examples
 348--------
 349
 350`git push`::
 351        Works like `git push <remote>`, where <remote> is the
 352        current branch's remote (or `origin`, if no remote is
 353        configured for the current branch).
 354
 355`git push origin`::
 356        Without additional configuration, works like
 357        `git push origin :`.
 358+
 359The default behavior of this command when no <refspec> is given can be
 360configured by setting the `push` option of the remote.
 361+
 362For example, to default to pushing only the current branch to `origin`
 363use `git config remote.origin.push HEAD`.  Any valid <refspec> (like
 364the ones in the examples below) can be configured as the default for
 365`git push origin`.
 366
 367`git push origin :`::
 368        Push "matching" branches to `origin`. See
 369        <refspec> in the <<OPTIONS,OPTIONS>> section above for a
 370        description of "matching" branches.
 371
 372`git push origin master`::
 373        Find a ref that matches `master` in the source repository
 374        (most likely, it would find `refs/heads/master`), and update
 375        the same ref (e.g. `refs/heads/master`) in `origin` repository
 376        with it.  If `master` did not exist remotely, it would be
 377        created.
 378
 379`git push origin HEAD`::
 380        A handy way to push the current branch to the same name on the
 381        remote.
 382
 383`git push origin master:satellite/master dev:satellite/dev`::
 384        Use the source ref that matches `master` (e.g. `refs/heads/master`)
 385        to update the ref that matches `satellite/master` (most probably
 386        `refs/remotes/satellite/master`) in the `origin` repository, then
 387        do the same for `dev` and `satellite/dev`.
 388
 389`git push origin HEAD:master`::
 390        Push the current branch to the remote ref matching `master` in the
 391        `origin` repository. This form is convenient to push the current
 392        branch without thinking about its local name.
 393
 394`git push origin master:refs/heads/experimental`::
 395        Create the branch `experimental` in the `origin` repository
 396        by copying the current `master` branch.  This form is only
 397        needed to create a new branch or tag in the remote repository when
 398        the local name and the remote name are different; otherwise,
 399        the ref name on its own will work.
 400
 401`git push origin :experimental`::
 402        Find a ref that matches `experimental` in the `origin` repository
 403        (e.g. `refs/heads/experimental`), and delete it.
 404
 405`git push origin +dev:master`::
 406        Update the origin repository's master branch with the dev branch,
 407        allowing non-fast-forward updates.  *This can leave unreferenced
 408        commits dangling in the origin repository.*  Consider the
 409        following situation, where a fast-forward is not possible:
 410+
 411----
 412            o---o---o---A---B  origin/master
 413                     \
 414                      X---Y---Z  dev
 415----
 416+
 417The above command would change the origin repository to
 418+
 419----
 420                      A---B  (unnamed branch)
 421                     /
 422            o---o---o---X---Y---Z  master
 423----
 424+
 425Commits A and B would no longer belong to a branch with a symbolic name,
 426and so would be unreachable.  As such, these commits would be removed by
 427a `git gc` command on the origin repository.
 428
 429GIT
 430---
 431Part of the linkgit:git[1] suite