push
将本地分支推送到远程并合并
语法
- git push <远程主机名> <本地分支名>:<远程分支名>
实例
将本地的 master 分支推送到 origin 主机的 master 分支
- git push origin master
上传本地指定分支到远程仓库
- git push [remote] [branch]
强行推送当前分支到远程仓库,即使有冲突
- git push [remote] --force
推送所有分支到远程仓库
- git push [remote] --all
删除远程分支
- git push origin --delete [branch-name]
提交指定tag
- git push [remote] [tag]
提交所有tag
- git push [remote] --tags
查看tag信息
- git push origin :refs/tags/[tagName]
删除远程tag
- git push origin :refs/tags/[tagName]
选项
- <repository>
-
作为推送操作目标的“远程”存储库
- <refspec>
-
指定要使用哪个源对象更新的目标引用
- --all
-
推送所有分支(即
refs/heads/
下的refs,不能与其他一起使用。 - --prune
-
删除没有本地对应的远程分支
- --mirror
-
而不是命名每个ref推送,而是指定
refs/
下的所有ref (包括但不限于refs/heads/
,refs/remotes/
和refs/tags/
)都镜像到远程存储库。新创建的本地裁判将被推送到远程端,本地更新的裁判将在远程端强制更新,而已删除的裁判将从远程端删除。如果设置了配置选项remote.<remote>.mirror
则这是默认设置。 - -n
--dry-run -
除了实际发送更新外,其他的都要做。
- --porcelain
-
生成机器可读的输出。每个 refs 的输出状态行将以 tab 分隔,并发送至 stdout 而不是 stderr。参考文献的完整符号名称将被给出。
- -d
--delete -
所有列出的参考文献都会从远程仓库中删除。这和在所有参考文献前加上冒号是一样的。
- --tags
-
除了在命令行上明确列出的refspecs之外,还会推送
refs/tags
下的所有refs 。 - --follow-tags
-
推送所有不带此选项将被推送的ref,并推送带注释的标签到远程丢失的
refs/tags
,但指向被推送的ref可以到达的commit-ish。也可以使用配置变量 push.followTags
进行指定。 - --[no-]signed
--signed=(true|false|if-asked) -
GPG对推送请求进行签名,以更新接收方的ref,以使其可以通过挂钩进行检查和/或记录。如果为
false
或--no-signed
,则不会尝试签名。如果为true
或--signed
,则如果服务器不支持签名的推送,则推送将失败。如果设置为if-asked
,则仅在服务器支持签名推送时签名。如果对gpg --sign
的实际调用失败,则推送也将失败。 - --[no-]atomic
-
如果有的话,在远程端使用原子事务。要么更新所有refs,要么出错时不更新refs。如果服务器不支持原子推送,推送将失败。
- -o <option>
--push-option=<option> -
将给定的字符串发送到服务器,服务器将它们传递到接收前和接收后钩子。给定的字符串不得包含NUL或LF字符。当给出多个
--push-option=<option>
时,它们都将按照命令行中列出的顺序发送到另一端。如果在命令行中未提供--push-option=<option>
,push.pushOption
使用配置变量push.pushOption的值。 - --receive-pack=<git-receive-pack>
--exec=<git-receive-pack> -
远端
git-receive-pack
程序的路径。通过ssh推送到远程存储库时,有时会很有用,并且您的程序没有位于默认$PATH
的目录中。 - --[no-]force-with-lease
--force-with-lease=<refname>
--force-with-lease=<refname>:<expect> -
通常,"git push "会拒绝更新不是本地 ref 祖先的远程 ref。
-
如果远程ref的当前值是预期值,这个选项会覆盖这个限制。否则 "git push "会失败。
-
想象一下,您必须重新调整已经发布的内容。您将不得不绕过“必须快进”规则,以便用重新设置的历史记录替换您最初发布的历史记录。如果其他人在您重新建立基础时建立在您的原始历史之上,则远程分支的尖端可能会随着他们的提交而前进,而盲目地使用 --force 将失去他们的工作。
-
这个选项允许你说你希望更新的历史记录是你重写的,并且要替换。如果远程 ref 仍然指向你指定的提交,你可以确定没有其他人对 ref 做过任何事情。这就像在没有明确锁定的情况下对 ref 进行了 “租赁”,只有在 "租赁 "仍然有效的情况下,远程 ref 才会被更新。
-
--force-with-lease
单独使用–force-with-lease(不指定详细信息),将通过要求它们的当前值与我们为它们提供的远程跟踪分支相同,来保护所有将要更新的远程引用。 -
--force-with-lease=<refname>
,如果不指定期望值,将通过要求其当前值与远程跟踪分支相同来保护命名的ref(单独)(如果要更新)。我们有。 -
--force-with-lease=<refname>:<expect>
将保护命名的ref(单独)(如果要更新),方法是要求其当前值与指定的值相同(允许与refname的远程跟踪分支不同,或者使用此格式时甚至不必具有这样的远程跟踪分支)。如果 是空字符串,则命名引用必须不存在。 -
请注意,除了
--force-with-lease=<refname>:<expect>
以外,所有其他形式都明确指定了ref的当前预期值,这些形式仍处于实验阶段,随着我们对该功能的经验积累,它们的语义可能会发生变化。 - -f
--force -
通常,该命令拒绝更新不是用于覆盖它的本地引用的祖先的远程引用。另外,当使用
--force-with-lease
选项时,该命令将拒绝更新其当前值与预期值不匹配的远程引用。 -
这个标志会禁用这些检查,并可能导致远程仓库丢失提交,请谨慎使用。
-
请注意
--force
适用于所有推送的ref,因此将 push.default 设置为 matching 或将其与配置了remote.*.push
多个推送目标一起使用。push可能会覆盖当前分支以外的其他ref(包括本地ref严格落后于他们的远程对象)。要强制只推送到一个分支,请在refspec前面使用+
进行推送(例如git push origin +master
强制推送到master
分支)。 - --[no-]force-if-includes
-
只有当远程跟踪参考的提示已经整合到本地时,才会强制更新。
-
这个选项启用了一个检查,以验证远程跟踪 ref 的顶端是否可以从本地分支的 "reflog "条目中的一个条目到达,以便进行重写。如果不是这样的话,该检查可以通过拒绝强制更新来确保来自远程的任何更新都已经被纳入本地。
-
如果在未指定
--force-with-lease
的情况下传递了该选项,或者未与--force-with-lease=<refname>:<expect>
一起指定,则该选项为“无操作”。 -
指定
--no-force-if-includes
将禁用此行为。 - --repo=<repository>
-
此选项等效于<repository>参数。如果两者都指定,则命令行参数优先。
- -u
--set-upstream -
对于每个最新的或成功推送的分支,请添加上游(跟踪)引用
- --[no-]thin
-
这些选项被传递给
git send-pack
。当发送方和接收方共享许多相同的对象时,精简传输会大大减少发送的数据量。默认值为--thin
。 - -q
--quiet -
除非发生错误,否则抑制所有输出,包括更新的参考文献列表。进度不会报告给标准错误流。
- -v
--verbose -
Run verbosely.
- --progress
-
除非指定了 -q,否则当标准错误流连接到终端时,默认情况下会在标准错误流上报告进度状态。即使标准错误流没有指向终端,该标志也会强制报告进度状态。
- --no-recurse-submodules
--recurse-submodules=check|on-demand|only|no -
可用于确保要推送的修订所使用的所有子模块提交在远程跟踪分支上均可用。如果使用
check
,则Git将验证至少要在该子模块的一个远程上可用的所有要在修订版本中进行更改的子模块提交都可用。如果缺少任何提交,则推送将被中止并以非零状态退出。如果on-demand
使用,则将推送要推送的修订中已更改的所有子模块。如果按需无法推送所有必要的修订,它将也被中止并以非零状态退出。如果only
使用该选项,则在不按下超级项目的情况下将递归推送所有子模块。值为no
或使用--no-recurse-submodules
当不需要子模块递归时,可用于覆盖push.recurseSubmodules配置变量。 - --[no-]verify
-
切换预推钩。默认值为
--verify
,为挂钩提供了阻止推送的机会。使用--no-verify
,挂钩将被完全绕过。 - -4
--ipv4 -
只使用IPv4地址,忽略IPv6地址。
- -6
--ipv6 -
只使用IPv6地址,忽略IPv4地址。