Documentation / git-push.txton commit smart-http: support shallow fetch/clone (1609488)
   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] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
  13           [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
  14           [--force-with-lease[=<refname>[:<expect>]]]
  15           [--no-verify] [<repository> [<refspec>...]]
  16
  17DESCRIPTION
  18-----------
  19
  20Updates remote refs using local refs, while sending objects
  21necessary to complete the given refs.
  22
  23You can make interesting things happen to a repository
  24every time you push into it, by setting up 'hooks' there.  See
  25documentation for linkgit:git-receive-pack[1].
  26
  27When the command line does not specify where to push with the
  28`<repository>` argument, `branch.*.remote` configuration for the
  29current branch is consulted to determine where to push.  If the
  30configuration is missing, it defaults to 'origin'.
  31
  32When the command line does not specify what to push with `<refspec>...`
  33arguments or `--all`, `--mirror`, `--tags` options, the command finds
  34the default `<refspec>` by consulting `remote.*.push` configuration,
  35and if it is not found, honors `push.default` configuration to decide
  36what to push (See gitlink:git-config[1] for the meaning of `push.default`).
  37
  38
  39OPTIONS[[OPTIONS]]
  40------------------
  41<repository>::
  42        The "remote" repository that is destination of a push
  43        operation.  This parameter can be either a URL
  44        (see the section <<URLS,GIT URLS>> below) or the name
  45        of a remote (see the section <<REMOTES,REMOTES>> below).
  46
  47<refspec>...::
  48        Specify what destination ref to update with what source object.
  49        The format of a <refspec> parameter is an optional plus
  50        `+`, followed by the source object <src>, followed
  51        by a colon `:`, followed by the destination ref <dst>.
  52+
  53The <src> is often the name of the branch you would want to push, but
  54it can be any arbitrary "SHA-1 expression", such as `master~4` or
  55`HEAD` (see linkgit:gitrevisions[7]).
  56+
  57The <dst> tells which ref on the remote side is updated with this
  58push. Arbitrary expressions cannot be used here, an actual ref must
  59be named. If `:`<dst> is omitted, the same ref as <src> will be
  60updated.
  61+
  62The object referenced by <src> is used to update the <dst> reference
  63on the remote side.  By default this is only allowed if <dst> is not
  64a tag (annotated or lightweight), and then only if it can fast-forward
  65<dst>.  By having the optional leading `+`, you can tell Git to update
  66the <dst> ref even if it is not allowed by default (e.g., it is not a
  67fast-forward.)  This does *not* attempt to merge <src> into <dst>.  See
  68EXAMPLES below for details.
  69+
  70`tag <tag>` means the same as `refs/tags/<tag>:refs/tags/<tag>`.
  71+
  72Pushing an empty <src> allows you to delete the <dst> ref from
  73the remote repository.
  74+
  75The special refspec `:` (or `+:` to allow non-fast-forward updates)
  76directs Git to push "matching" branches: for every branch that exists on
  77the local side, the remote side is updated if a branch of the same name
  78already exists on the remote side.
  79
  80--all::
  81        Instead of naming each ref to push, specifies that all
  82        refs under `refs/heads/` be pushed.
  83
  84--prune::
  85        Remove remote branches that don't have a local counterpart. For example
  86        a remote branch `tmp` will be removed if a local branch with the same
  87        name doesn't exist any more. This also respects refspecs, e.g.
  88        `git push --prune remote refs/heads/*:refs/tmp/*` would
  89        make sure that remote `refs/tmp/foo` will be removed if `refs/heads/foo`
  90        doesn't exist.
  91
  92--mirror::
  93        Instead of naming each ref to push, specifies that all
  94        refs under `refs/` (which includes but is not
  95        limited to `refs/heads/`, `refs/remotes/`, and `refs/tags/`)
  96        be mirrored to the remote repository.  Newly created local
  97        refs will be pushed to the remote end, locally updated refs
  98        will be force updated on the remote end, and deleted refs
  99        will be removed from the remote end.  This is the default
 100        if the configuration option `remote.<remote>.mirror` is
 101        set.
 102
 103-n::
 104--dry-run::
 105        Do everything except actually send the updates.
 106
 107--porcelain::
 108        Produce machine-readable output.  The output status line for each ref
 109        will be tab-separated and sent to stdout instead of stderr.  The full
 110        symbolic names of the refs will be given.
 111
 112--delete::
 113        All listed refs are deleted from the remote repository. This is
 114        the same as prefixing all refs with a colon.
 115
 116--tags::
 117        All refs under `refs/tags` are pushed, in
 118        addition to refspecs explicitly listed on the command
 119        line.
 120
 121--follow-tags::
 122        Push all the refs that would be pushed without this option,
 123        and also push annotated tags in `refs/tags` that are missing
 124        from the remote but are pointing at commit-ish that are
 125        reachable from the refs being pushed.
 126
 127--receive-pack=<git-receive-pack>::
 128--exec=<git-receive-pack>::
 129        Path to the 'git-receive-pack' program on the remote
 130        end.  Sometimes useful when pushing to a remote
 131        repository over ssh, and you do not have the program in
 132        a directory on the default $PATH.
 133
 134--[no-]force-with-lease::
 135--force-with-lease=<refname>::
 136--force-with-lease=<refname>:<expect>::
 137        Usually, "git push" refuses to update a remote ref that is
 138        not an ancestor of the local ref used to overwrite it.
 139+
 140This option bypasses the check, but instead requires that the
 141current value of the ref to be the expected value.  "git push"
 142fails otherwise.
 143+
 144Imagine that you have to rebase what you have already published.
 145You will have to bypass the "must fast-forward" rule in order to
 146replace the history you originally published with the rebased history.
 147If somebody else built on top of your original history while you are
 148rebasing, the tip of the branch at the remote may advance with her
 149commit, and blindly pushing with `--force` will lose her work.
 150+
 151This option allows you to say that you expect the history you are
 152updating is what you rebased and want to replace. If the remote ref
 153still points at the commit you specified, you can be sure that no
 154other people did anything to the ref (it is like taking a "lease" on
 155the ref without explicitly locking it, and you update the ref while
 156making sure that your earlier "lease" is still valid).
 157+
 158`--force-with-lease` alone, without specifying the details, will protect
 159all remote refs that are going to be updated by requiring their
 160current value to be the same as the remote-tracking branch we have
 161for them, unless specified with a `--force-with-lease=<refname>:<expect>`
 162option that explicitly states what the expected value is.
 163+
 164`--force-with-lease=<refname>`, without specifying the expected value, will
 165protect the named ref (alone), if it is going to be updated, by
 166requiring its current value to be the same as the remote-tracking
 167branch we have for it.
 168+
 169`--force-with-lease=<refname>:<expect>` will protect the named ref (alone),
 170if it is going to be updated, by requiring its current value to be
 171the same as the specified value <expect> (which is allowed to be
 172different from the remote-tracking branch we have for the refname,
 173or we do not even have to have such a remote-tracking branch when
 174this form is used).
 175+
 176Note that all forms other than `--force-with-lease=<refname>:<expect>`
 177that specifies the expected current value of the ref explicitly are
 178still experimental and their semantics may change as we gain experience
 179with this feature.
 180+
 181"--no-force-with-lease" will cancel all the previous --force-with-lease on the
 182command line.
 183
 184-f::
 185--force::
 186        Usually, the command refuses to update a remote ref that is
 187        not an ancestor of the local ref used to overwrite it.
 188        Also, when `--force-with-lease` option is used, the command refuses
 189        to update a remote ref whose current value does not match
 190        what is expected.
 191+
 192This flag disables these checks, and can cause the remote repository
 193to lose commits; use it with care.
 194+
 195Note that `--force` applies to all the refs that are pushed, hence
 196using it with `push.default` set to `matching` or with multiple push
 197destinations configured with `remote.*.push` may overwrite refs
 198other than the current branch (including local refs that are
 199strictly behind their remote counterpart).  To force a push to only
 200one branch, use a `+` in front of the refspec to push (e.g `git push
 201origin +master` to force a push to the `master` branch). See the
 202`<refspec>...` section above for details.
 203
 204--repo=<repository>::
 205        This option is only relevant if no <repository> argument is
 206        passed in the invocation. In this case, 'git push' derives the
 207        remote name from the current branch: If it tracks a remote
 208        branch, then that remote repository is pushed to. Otherwise,
 209        the name "origin" is used. For this latter case, this option
 210        can be used to override the name "origin". In other words,
 211        the difference between these two commands
 212+
 213--------------------------
 214git push public         #1
 215git push --repo=public  #2
 216--------------------------
 217+
 218is that #1 always pushes to "public" whereas #2 pushes to "public"
 219only if the current branch does not track a remote branch. This is
 220useful if you write an alias or script around 'git push'.
 221
 222-u::
 223--set-upstream::
 224        For every branch that is up to date or successfully pushed, add
 225        upstream (tracking) reference, used by argument-less
 226        linkgit:git-pull[1] and other commands. For more information,
 227        see 'branch.<name>.merge' in linkgit:git-config[1].
 228
 229--[no-]thin::
 230        These options are passed to linkgit:git-send-pack[1]. A thin transfer
 231        significantly reduces the amount of sent data when the sender and
 232        receiver share many of the same objects in common. The default is
 233        \--thin.
 234
 235-q::
 236--quiet::
 237        Suppress all output, including the listing of updated refs,
 238        unless an error occurs. Progress is not reported to the standard
 239        error stream.
 240
 241-v::
 242--verbose::
 243        Run verbosely.
 244
 245--progress::
 246        Progress status is reported on the standard error stream
 247        by default when it is attached to a terminal, unless -q
 248        is specified. This flag forces progress status even if the
 249        standard error stream is not directed to a terminal.
 250
 251--recurse-submodules=check|on-demand::
 252        Make sure all submodule commits used by the revisions to be
 253        pushed are available on a remote-tracking branch. If 'check' is
 254        used Git will verify that all submodule commits that changed in
 255        the revisions to be pushed are available on at least one remote
 256        of the submodule. If any commits are missing the push will be
 257        aborted and exit with non-zero status. If 'on-demand' is used
 258        all submodules that changed in the revisions to be pushed will
 259        be pushed. If on-demand was not able to push all necessary
 260        revisions it will also be aborted and exit with non-zero status.
 261
 262--[no-]verify::
 263        Toggle the pre-push hook (see linkgit:githooks[5]).  The
 264        default is \--verify, giving the hook a chance to prevent the
 265        push.  With \--no-verify, the hook is bypassed completely.
 266
 267
 268include::urls-remotes.txt[]
 269
 270OUTPUT
 271------
 272
 273The output of "git push" depends on the transport method used; this
 274section describes the output when pushing over the Git protocol (either
 275locally or via ssh).
 276
 277The status of the push is output in tabular form, with each line
 278representing the status of a single ref. Each line is of the form:
 279
 280-------------------------------
 281 <flag> <summary> <from> -> <to> (<reason>)
 282-------------------------------
 283
 284If --porcelain is used, then each line of the output is of the form:
 285
 286-------------------------------
 287 <flag> \t <from>:<to> \t <summary> (<reason>)
 288-------------------------------
 289
 290The status of up-to-date refs is shown only if --porcelain or --verbose
 291option is used.
 292
 293flag::
 294        A single character indicating the status of the ref:
 295(space);; for a successfully pushed fast-forward;
 296`+`;; for a successful forced update;
 297`-`;; for a successfully deleted ref;
 298`*`;; for a successfully pushed new ref;
 299`!`;; for a ref that was rejected or failed to push; and
 300`=`;; for a ref that was up to date and did not need pushing.
 301
 302summary::
 303        For a successfully pushed ref, the summary shows the old and new
 304        values of the ref in a form suitable for using as an argument to
 305        `git log` (this is `<old>..<new>` in most cases, and
 306        `<old>...<new>` for forced non-fast-forward updates).
 307+
 308For a failed update, more details are given:
 309+
 310--
 311rejected::
 312        Git did not try to send the ref at all, typically because it
 313        is not a fast-forward and you did not force the update.
 314
 315remote rejected::
 316        The remote end refused the update.  Usually caused by a hook
 317        on the remote side, or because the remote repository has one
 318        of the following safety options in effect:
 319        `receive.denyCurrentBranch` (for pushes to the checked out
 320        branch), `receive.denyNonFastForwards` (for forced
 321        non-fast-forward updates), `receive.denyDeletes` or
 322        `receive.denyDeleteCurrent`.  See linkgit:git-config[1].
 323
 324remote failure::
 325        The remote end did not report the successful update of the ref,
 326        perhaps because of a temporary error on the remote side, a
 327        break in the network connection, or other transient error.
 328--
 329
 330from::
 331        The name of the local ref being pushed, minus its
 332        `refs/<type>/` prefix. In the case of deletion, the
 333        name of the local ref is omitted.
 334
 335to::
 336        The name of the remote ref being updated, minus its
 337        `refs/<type>/` prefix.
 338
 339reason::
 340        A human-readable explanation. In the case of successfully pushed
 341        refs, no explanation is needed. For a failed ref, the reason for
 342        failure is described.
 343
 344Note about fast-forwards
 345------------------------
 346
 347When an update changes a branch (or more in general, a ref) that used to
 348point at commit A to point at another commit B, it is called a
 349fast-forward update if and only if B is a descendant of A.
 350
 351In a fast-forward update from A to B, the set of commits that the original
 352commit A built on top of is a subset of the commits the new commit B
 353builds on top of.  Hence, it does not lose any history.
 354
 355In contrast, a non-fast-forward update will lose history.  For example,
 356suppose you and somebody else started at the same commit X, and you built
 357a history leading to commit B while the other person built a history
 358leading to commit A.  The history looks like this:
 359
 360----------------
 361
 362      B
 363     /
 364 ---X---A
 365
 366----------------
 367
 368Further suppose that the other person already pushed changes leading to A
 369back to the original repository from which you two obtained the original
 370commit X.
 371
 372The push done by the other person updated the branch that used to point at
 373commit X to point at commit A.  It is a fast-forward.
 374
 375But if you try to push, you will attempt to update the branch (that
 376now points at A) with commit B.  This does _not_ fast-forward.  If you did
 377so, the changes introduced by commit A will be lost, because everybody
 378will now start building on top of B.
 379
 380The command by default does not allow an update that is not a fast-forward
 381to prevent such loss of history.
 382
 383If you do not want to lose your work (history from X to B) nor the work by
 384the other person (history from X to A), you would need to first fetch the
 385history from the repository, create a history that contains changes done
 386by both parties, and push the result back.
 387
 388You can perform "git pull", resolve potential conflicts, and "git push"
 389the result.  A "git pull" will create a merge commit C between commits A
 390and B.
 391
 392----------------
 393
 394      B---C
 395     /   /
 396 ---X---A
 397
 398----------------
 399
 400Updating A with the resulting merge commit will fast-forward and your
 401push will be accepted.
 402
 403Alternatively, you can rebase your change between X and B on top of A,
 404with "git pull --rebase", and push the result back.  The rebase will
 405create a new commit D that builds the change between X and B on top of
 406A.
 407
 408----------------
 409
 410      B   D
 411     /   /
 412 ---X---A
 413
 414----------------
 415
 416Again, updating A with this commit will fast-forward and your push will be
 417accepted.
 418
 419There is another common situation where you may encounter non-fast-forward
 420rejection when you try to push, and it is possible even when you are
 421pushing into a repository nobody else pushes into. After you push commit
 422A yourself (in the first picture in this section), replace it with "git
 423commit --amend" to produce commit B, and you try to push it out, because
 424forgot that you have pushed A out already. In such a case, and only if
 425you are certain that nobody in the meantime fetched your earlier commit A
 426(and started building on top of it), you can run "git push --force" to
 427overwrite it. In other words, "git push --force" is a method reserved for
 428a case where you do mean to lose history.
 429
 430
 431Examples
 432--------
 433
 434`git push`::
 435        Works like `git push <remote>`, where <remote> is the
 436        current branch's remote (or `origin`, if no remote is
 437        configured for the current branch).
 438
 439`git push origin`::
 440        Without additional configuration, works like
 441        `git push origin :`.
 442+
 443The default behavior of this command when no <refspec> is given can be
 444configured by setting the `push` option of the remote, or the `push.default`
 445configuration variable.
 446+
 447For example, to default to pushing only the current branch to `origin`
 448use `git config remote.origin.push HEAD`.  Any valid <refspec> (like
 449the ones in the examples below) can be configured as the default for
 450`git push origin`.
 451
 452`git push origin :`::
 453        Push "matching" branches to `origin`. See
 454        <refspec> in the <<OPTIONS,OPTIONS>> section above for a
 455        description of "matching" branches.
 456
 457`git push origin master`::
 458        Find a ref that matches `master` in the source repository
 459        (most likely, it would find `refs/heads/master`), and update
 460        the same ref (e.g. `refs/heads/master`) in `origin` repository
 461        with it.  If `master` did not exist remotely, it would be
 462        created.
 463
 464`git push origin HEAD`::
 465        A handy way to push the current branch to the same name on the
 466        remote.
 467
 468`git push mothership master:satellite/master dev:satellite/dev`::
 469        Use the source ref that matches `master` (e.g. `refs/heads/master`)
 470        to update the ref that matches `satellite/master` (most probably
 471        `refs/remotes/satellite/master`) in the `mothership` repository;
 472        do the same for `dev` and `satellite/dev`.
 473+
 474This is to emulate `git fetch` run on the `mothership` using `git
 475push` that is run in the opposite direction in order to integrate
 476the work done on `satellite`, and is often necessary when you can
 477only make connection in one way (i.e. satellite can ssh into
 478mothership but mothership cannot initiate connection to satellite
 479because the latter is behind a firewall or does not run sshd).
 480+
 481After running this `git push` on the `satellite` machine, you would
 482ssh into the `mothership` and run `git merge` there to complete the
 483emulation of `git pull` that were run on `mothership` to pull changes
 484made on `satellite`.
 485
 486`git push origin HEAD:master`::
 487        Push the current branch to the remote ref matching `master` in the
 488        `origin` repository. This form is convenient to push the current
 489        branch without thinking about its local name.
 490
 491`git push origin master:refs/heads/experimental`::
 492        Create the branch `experimental` in the `origin` repository
 493        by copying the current `master` branch.  This form is only
 494        needed to create a new branch or tag in the remote repository when
 495        the local name and the remote name are different; otherwise,
 496        the ref name on its own will work.
 497
 498`git push origin :experimental`::
 499        Find a ref that matches `experimental` in the `origin` repository
 500        (e.g. `refs/heads/experimental`), and delete it.
 501
 502`git push origin +dev:master`::
 503        Update the origin repository's master branch with the dev branch,
 504        allowing non-fast-forward updates.  *This can leave unreferenced
 505        commits dangling in the origin repository.*  Consider the
 506        following situation, where a fast-forward is not possible:
 507+
 508----
 509            o---o---o---A---B  origin/master
 510                     \
 511                      X---Y---Z  dev
 512----
 513+
 514The above command would change the origin repository to
 515+
 516----
 517                      A---B  (unnamed branch)
 518                     /
 519            o---o---o---X---Y---Z  master
 520----
 521+
 522Commits A and B would no longer belong to a branch with a symbolic name,
 523and so would be unreachable.  As such, these commits would be removed by
 524a `git gc` command on the origin repository.
 525
 526GIT
 527---
 528Part of the linkgit:git[1] suite