diff --git a/h - Update remote refs along with associated objects b/h - Update remote refs along with associated objects new file mode 100644 index 0000000..7e2e734 --- /dev/null +++ b/h - Update remote refs along with associated objects @@ -0,0 +1,615 @@ +GIT-PUSH(1) Git Manual GIT-PUSH(1) + +NNAAMMEE + git-push - Update remote refs along with associated objects + +SSYYNNOOPPSSIISS + _g_i_t _p_u_s_h [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=] + [--repo=] [-f | --force] [-d | --delete] [--prune] [-v | --verbose] + [-u | --set-upstream] [-o | --push-option=] + [--[no-]signed|--signed=(true|false|if-asked)] + [--force-with-lease[=[:]]] + [--no-verify] [ [...]] + +DDEESSCCRRIIPPTTIIOONN + Updates remote refs using local refs, while sending objects necessary to complete the given refs. + + You can make interesting things happen to a repository every time you push into it, by setting up _h_o_o_k_s there. See documentation + for ggiitt--rreecceeiivvee--ppaacckk(1). + + When the command line does not specify where to push with the <> argument, bbrraanncchh..**..rreemmoottee configuration for the + current branch is consulted to determine where to push. If the configuration is missing, it defaults to _o_r_i_g_i_n. + + When the command line does not specify what to push with <>...... arguments or ----aallll, ----mmiirrrroorr, ----ttaaggss options, the command + finds the default <> by consulting rreemmoottee..**..ppuusshh configuration, and if it is not found, honors ppuusshh..ddeeffaauulltt configuration + to decide what to push (See ggiitt--ccoonnffiigg(1) for the meaning of ppuusshh..ddeeffaauulltt). + + When neither the command-line nor the configuration specify what to push, the default behavior is used, which corresponds to the + ssiimmppllee value for ppuusshh..ddeeffaauulltt: the current branch is pushed to the corresponding upstream branch, but as a safety measure, the + push is aborted if the upstream branch does not have the same name as the local one. + +OOPPTTIIOONNSS + + 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). + + ... + Specify what destination ref to update with what source object. The format of a parameter is an optional plus ++, + followed by the source object , followed by a colon ::, followed by the destination ref . + + The is often the name of the branch you would want to push, but it can be any arbitrary "SHA-1 expression", such as + mmaasstteerr~~44 or HHEEAADD (see ggiittrreevviissiioonnss(7)). + + The 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 ggiitt ppuusshh [[<>]] without any <> argument is set to update some ref at the destination + with <> with rreemmoottee..<>..ppuusshh configuration variable, ::<> part can be omitted—such a push will update a ref + that <> normally updates without any <> on the command line. Otherwise, missing ::<> means to update the same + ref as the <>. + + If doesn’t start with rreeffss// (e.g. rreeffss//hheeaaddss//mmaasstteerr) we will try to infer where in rreeffss//** on the destination + it belongs based on the type of being pushed and whether is ambiguous. + + • If unambiguously refers to a ref on the remote, then push to that ref. + + • If resolves to a ref starting with refs/heads/ or refs/tags/, then prepend that to . + + • Other ambiguity resolutions might be added in the future, but for now any other cases will error out with an error + indicating what we tried, and depending on the aaddvviiccee..ppuusshhUUnnqquuaalliiffiieeddRReeffnnaammee configuration (see ggiitt--ccoonnffiigg(1)) suggest + what refs/ namespace you may have wanted to push to. + + The object referenced by is used to update the reference on the remote side. Whether this is allowed depends on + where in rreeffss//** the reference lives as described in detail below, in those sections "update" means any modifications + except deletes, which as noted after the next few sections are treated differently. + + The rreeffss//hheeaaddss//** namespace will only accept commit objects, and updates only if they can be fast-forwarded. + + The rreeffss//ttaaggss//** namespace will accept any kind of object (as commits, trees and blobs can be tagged), and any updates to + them will be rejected. + + It’s possible to push any type of object to any namespace outside of rreeffss//{{ttaaggss,,hheeaaddss}}//**. In the case of tags and commits, + these will be treated as if they were the commits inside rreeffss//hheeaaddss//** for the purposes of whether the update is allowed. + + I.e. a fast-forward of commits and tags outside rreeffss//{{ttaaggss,,hheeaaddss}}//** is allowed, even in cases where what’s being + fast-forwarded is not a commit, but a tag object which happens to point to a new commit which is a fast-forward of the + commit the last tag (or commit) it’s replacing. Replacing a tag with an entirely different tag is also allowed, if it points + to the same commit, as well as pushing a peeled tag, i.e. pushing the commit that existing tag object points to, or a new + tag object which an existing commit points to. + + Tree and blob objects outside of rreeffss//{{ttaaggss,,hheeaaddss}}//** will be treated the same way as if they were inside rreeffss//ttaaggss//**, any + update of them will be rejected. + + All of the rules described above about what’s not allowed as an update can be overridden by adding an the optional leading ++ + to a refspec (or using ----ffoorrccee command line option). The only exception to this is that no amount of forcing will make the + rreeffss//hheeaaddss//** namespace accept a non-commit object. Hooks and configuration can also override or amend these rules, see e.g. + rreecceeiivvee..ddeennyyNNoonnFFaassttFFoorrwwaarrddss in ggiitt--ccoonnffiigg(1) and pprree--rreecceeiivvee and uuppddaattee in ggiitthhooookkss(5). + + Pushing an empty allows you to delete the ref from the remote repository. Deletions are always accepted without + a leading ++ in the refspec (or ----ffoorrccee), except when forbidden by configuration or hooks. See rreecceeiivvee..ddeennyyDDeelleetteess in ggiitt-- + ccoonnffiigg(1) and pprree--rreecceeiivvee and uuppddaattee in ggiitthhooookkss(5). + + 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. + + ttaagg <> means the same as rreeffss//ttaaggss//<>::rreeffss//ttaaggss//<>. + + --all + Push all branches (i.e. refs under rreeffss//hheeaaddss//); cannot be used with other . + + --prune + Remove remote branches that don’t have a local counterpart. For example a remote branch ttmmpp will be removed if a local + branch with the same name doesn’t exist any more. This also respects refspecs, e.g. ggiitt ppuusshh ----pprruunnee rreemmoottee + rreeffss//hheeaaddss//**::rreeffss//ttmmpp//** would make sure that remote rreeffss//ttmmpp//ffoooo will be removed if rreeffss//hheeaaddss//ffoooo doesn’t exist. + + --mirror + Instead of naming each ref to push, specifies that all refs under rreeffss// (which includes but is not limited to rreeffss//hheeaaddss//, + rreeffss//rreemmootteess//, and rreeffss//ttaaggss//) 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 rreemmoottee..<>..mmiirrrroorr 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 rreeffss//ttaaggss 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 rreeffss//ttaaggss 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 ppuusshh..ffoolllloowwTTaaggss. For more information, see ppuusshh..ffoolllloowwTTaaggss in ggiitt--ccoonnffiigg(1). + + --[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. If + ffaallssee or ----nnoo--ssiiggnneedd, no signing will be attempted. If ttrruuee or ----ssiiggnneedd, the push will fail if the server does not support + signed pushes. If set to iiff--aasskkeedd, sign if and only if the server supports signed pushes. The push will also fail if the + actual call to ggppgg ----ssiiggnn fails. See ggiitt--rreecceeiivvee--ppaacckk(1) for the details on the receiving end. + + --[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