Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
-
2.55.0
2026-06-29
- 2.54.0 no changes
-
2.53.0
2026-02-02
-
2.52.0
2025-11-17
- 2.48.1 → 2.51.2 no changes
-
2.48.0
2025-01-10
- 2.45.1 → 2.47.3 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 no changes
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 no changes
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 no changes
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 no changes
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 no changes
-
2.38.0
2022-10-02
- 2.35.1 → 2.37.7 no changes
-
2.35.0
2022-01-24
- 2.33.1 → 2.34.8 no changes
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 no changes
-
2.32.0
2021-06-06
- 2.30.1 → 2.31.8 no changes
-
2.30.0
2020-12-27
- 2.25.1 → 2.29.3 no changes
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 no changes
-
2.23.0
2019-08-16
- 2.22.1 → 2.22.5 no changes
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.18.1 → 2.19.6 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
- 2.14.6 no changes
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
- 2.5.6 no changes
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
- 2.1.4 no changes
-
2.0.5
2014-12-17
SYNOPSIS
gitpush[--all|--branches|--mirror|--tags] [--follow-tags] [--atomic] [-n|--dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f|--force] [-d|--delete] [--prune] [-q|--quiet] [-v|--verbose] [-u|--set-upstream] [-o<string> |--push-option=<string>] [--[no-]signed|--signed=(true|false|if-asked)] [--force-with-lease[=<refname>[:<expect>]] [--force-if-includes]] [--no-verify] [<repository> [<refspec>…]]
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 <remote> <branch>.
git push origin main will push the local main branch to the main
branch on the remote named origin.
The <repository> 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):
-
The <refspec> argument(s) (for example
mainingitpushoriginmain) or the--all,--mirror, or--tagsoptions -
The
remote.<name>.pushconfiguration for the repository being pushed to -
The
push.defaultconfiguration. The default ispush.default=simple, which will push to a branch with the same name as the current branch. See the CONFIGURATION section below for more onpush.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
- <repository>
-
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).
- <refspec>...
-
Specify what destination ref to update with what source object.
The format for a refspec is [
+]<src>[:<dst>], for examplemain,main:other, orHEAD^:refs/heads/main.The <src> is often the name of the local branch to push, but it can be any arbitrary "SHA-1 expression" (see gitrevisions[7]).
The <dst> 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 examplemainormain:other). Here are the rules for how refspecs are expanded, as well as various other special refspec forms:-
<src> without a
:<dst> means to update the same ref as the <src>, unless theremote.<repository>.pushconfiguration specifies a different <dst>. For example, ifmainis a branch, then the refspecmainexpands tomain:refs/heads/main. -
If <dst> unambiguously refers to a ref on the <repository> remote, then expand it to that ref. For example, if
v1.0is a tag on the remote, thenHEAD:v1.0expands toHEAD:refs/tags/v1.0. -
If <src> resolves to a ref starting with
refs/heads/orrefs/tags/, then prepend that to <dst>. For example, ifmainis a branch, then
-