STANNIX Solutions for the Real World


Manual: git-push

GIT-PUSH(1)					 Git Manual					 GIT-PUSH(1)

NAME
       git-push - Update remote refs along with associated objects

SYNOPSIS
       git push [--all | --branches | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=]
		[--repo=] [-f | --force] [-d | --delete] [--prune] [-q | --quiet] [-v | --verbose]
		[-u | --set-upstream] [-o  | --push-option=]
		[--[no-]signed | --signed=(true|false|if-asked)]
		[--force-with-lease[=[:]] [--force-if-includes]]
		[--no-verify] [ [...]]

DESCRIPTION
       Updates one or more branches, tags, or other references in a remote repository from your local
       repository, and sends all necessary data that isn’t already on the remote.

       The simplest way to push is git push  . git push origin main will push the local main
       branch to the main branch on the remote named origin.

       The  argument defaults to the upstream for the current branch, or origin if there’s no
       configured upstream.

       To decide which branches, tags, or other refs to push, Git uses (in order of precedence):

	1. The  argument(s) (for example main in git push origin main) or the --all, --mirror, or
	   --tags options

	2. The remote..push configuration for the repository being pushed to

	3. The push.default configuration. The default is push.default=simple, which will push to a branch
	   with the same name as the current branch. See the CONFIGURATION section below for more on
	   push.default.

       git push may fail if you haven’t set an upstream for the current branch, depending on what
       push.default is set to. See the UPSTREAM BRANCHES section below for more on how to set and use
       upstreams.

       You can make interesting things happen to a repository every time you push into it, by setting up
       hooks there. See documentation for git-receive-pack(1).

OPTIONS
       
	   The "remote" repository that is the destination of a push operation. This parameter can be either
	   a URL (see the section GIT URLS below) or the name of a remote (see the section REMOTES below).

       ...
	   Specify what destination ref to update with what source object.

	   The format for a refspec is [+][:], for example main, main:other, or
	   HEAD^:refs/heads/main.

	   The  is often the name of the local branch to push, but it can be any arbitrary "SHA-1
	   expression" (see gitrevisions(7)).

	   The  determines what ref to update on the remote side. It must be the name of a branch, tag,
	   or other ref, not an arbitrary expression.

	   The + is optional and does the same thing as --force.

	   You can write a refspec using the fully expanded form (for example
	   refs/heads/main:refs/heads/main) which specifies the exact source and destination, or with a
	   shorter form (for example main or main:other). Here are the rules for how refspecs are expanded,
	   as well as various other special refspec forms:

	   •    without a : means to update the same ref as the , unless the
	       remote..push configuration specifies a different . For example, if main is a
	       branch, then the refspec main expands to main:refs/heads/main.

	   •   If  unambiguously refers to a ref on the  remote, then expand it to that
	       ref. For example, if v1.0 is a tag on the remote, then HEAD:v1.0 expands to
	       HEAD:refs/tags/v1.0.

	   •   If  resolves to a ref starting with refs/heads/ or refs/tags/, then prepend that to
	       . For example, if main is a branch, then main:other expands to main:refs/heads/other

	   •   The special refspec : (or +: 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.

	   •    may contain a * to indicate a simple pattern match. This works like a glob that matches
	       any ref matching the pattern. There must be only one * in both the  and . It will
	       map refs to the destination by replacing the * with the contents matched from the source. For
	       example, refs/heads/*:refs/heads/* will push all branches.

	   •   A refspec starting with ^ is a negative refspec. This specifies refs to exclude. A ref will
	       be considered to match if it matches at least one positive refspec, and does not match any
	       negative refspec. Negative refspecs can be pattern refspecs. They must only contain a .
	       Fully spelled out hex object names are also not supported. For example, git push origin
	       'refs/heads/*' '^refs/heads/dev-*' will push all branches except for those starting with dev-

	   •   If  is empty, it deletes the  ref from the remote repository. For example, git push
	       origin :dev will delete the dev branch.

	   •   tag  expands to refs/tags/:refs/tags/. This is technically a special syntax
	       for git push and not a refspec, since in git push origin tag v1.0 the arguments tag and v1.0
	       are separate.

	   •   If the refspec can’t be expanded unambiguously, error out with an error indicating what was
	       tried, and depending on the advice.pushUnqualifiedRefname configuration (see git-config(1))
	       suggest what refs/ namespace you may have wanted to push to.

       Not all updates are allowed: see PUSH RULES below for the details.

       --all, --branches
	   Push all branches (i.e. refs under refs/heads/); cannot be used with other .

       --prune
	   Remove remote branches that don’t have a local counterpart. For example a remote branch tmp will
	   be removed if a local branch with the same name doesn’t exist any more. This also respects
	   refspecs, e.g.  git push --prune remote refs/heads/*:refs/tmp/* would make sure that remote
	   refs/tmp/foo will be removed if refs/heads/foo doesn’t exist.

       --mirror
	   Instead of naming each ref to push, specifies that all refs under refs/ (which includes but is
	   not limited to refs/heads/, refs/remotes/, and refs/tags/) 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 remote..mirror is set.

       -n, --dry-run
	   Do everything except actually send the updates.

       --porcelain
	   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.

       -d, --delete
	   All listed refs are deleted from the remote repository. This is the same as prefixing all refs
	   with a colon.

       --tags
	   All refs under refs/tags are pushed, in addition to refspecs explicitly listed on the command
	   line.

       --follow-tags
	   Push all the refs that would be pushed without this option, and also push annotated tags in
	   refs/tags 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 push.followTags.
	   For more information, see push.followTags in git-config(1).

       --signed, --no-signed, --signed=(true|false|if-asked)
	   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. Possible values are:

	   false, --no-signed
	       no signing will be attempted.

	   true, --signed
	       the push will fail if the server does not support signed pushes.

	   if-asked
	       sign if and only if the server supports signed pushes. The push will also fail if the actual
	       call to gpg --sign fails. See git-receive-pack(1) for the details on the receiving end.

       --atomic, --no-atomic
	   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.

       -o