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