git push(1) origin main
Update remote refs along with associated objects
<repository>
    The "remote" repository that is 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).

<refspec>...
    The format of a <refspec> parameter is an optional plus +, followed by the source ref <src>, followed
    by a colon :, followed by the destination ref <dst>. It is used to specify with what <src> object the
    <dst> ref in the remote repository is to be updated.

    The <src> is often the name of the branch you would want to push, but it can be any arbitrary "SHA-1
    expression", such as master~4 or HEAD (see gitrevisions(7)).

    The <dst> tells which ref on the remote side is updated with this push. Arbitrary expressions cannot
    be used here, an actual ref must be named. If :<dst> is omitted, the same ref as <src> will be
    updated.

    The object referenced by <src> is used to update the <dst> reference on the remote side, but by
    default this is only allowed if the update can fast-forward <dst>. By having the optional leading +,
    you can tell git to update the <dst> ref even when the update is not a fast-forward. This does not
    attempt to merge <src> into <dst>. See EXAMPLES below for details.

    tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

    Pushing an empty <src> allows you to delete the <dst> ref from the remote repository.

    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. This is the default operation mode if no explicit
    refspec is found (that is neither on the command line nor in any Push line of the corresponding
    remotes file---see below).
source manpages: git-push