git push 把本地提交上传到远端并更新远端引用。它是少数会影响所有人的命令,所以参数里有一半是在做安全约束:推哪里、推哪些、要不要允许覆盖历史。

本文列出 git push 的常用参数,重点讲清 -u、refspec、--force-with-lease 与 --force 的区别。

ℹ️
关于本系列
本文是《Git 使用教程》按命令拆分的第 26 / 28 篇,全部收录在 Git 栏目。参数表列的是日常高频项,并非穷举;想看某个命令的完整参数,用 git push -h 看精简列表、git help push 看完整手册。示例以 Git 2.56.0 为准。

一、命令语法

先看语法骨架,再对照下一节的参数表。<占位> 表示必填值,实际输入时不要带尖括号;[...] 表示可选项,-- 用来分隔选项与路径。

bash语法
git push [<options>] [<repository> [<refspec>...]]

二、参数逐项详解

下表按用途列出 git push 的常用参数,每项都注明了「它到底改变了什么」。

参数作用
-u / --set-upstream首次推送时建立本地分支与远端分支的跟踪关系,之后可直接 git push / git pull
<remote> <refspec>显式指定推到哪里,如 origin main:main;本地:远端 可不同名
--force-with-lease[=<ref>[:<期望值>]]推荐的强推方式:仅当远端仍是自己上次看到的状态才允许覆盖
-f / --force无条件强推,会覆盖远端历史,团队协作中尽量不用
--all / --branches推送所有本地分支
--tags / --follow-tags推送全部标签 / 只推随本次提交可达的附注标签
-d / --delete删除远端引用,如 git push origin --delete old-branch
--prune删掉远端那些本地 refspec 已不再覆盖的引用
-n / --dry-run只演练,打印将要推送的内容;这里的 -n 是 dry-run
--atomic原子推送:多个引用要么全成功要么全不推,需服务端支持
--no-verify跳过 pre-push 钩子
-o <串> / --push-option向服务端传选项,触发平台行为(如自动创建 MR/PR)
--mirror镜像推送所有 refs,用于仓库搬迁
--porcelain / -q / -v机器可读输出 / 静默 / 详细
--force-if-includes配合 lease 再校验远端提交是否已包含在本地 reflog 中,更严格

refspec 常见写法

写法含义
git push origin main把本地 main 推到远端同名分支
git push origin main:release本地 main 推到远端 release
git push origin :old-branch删除远端 old-branch(空源)
git push origin HEAD把当前分支推到远端同名分支,脚本里常用

三、常用示例

首次推送与日常推送

bash首次推送与日常推送
git push -u origin feature/login
git status -sb                      # ## feature/login...origin/feature/login
git push
git push -n origin main             # 先预演

改写自己分支的历史

bash改写自己分支的历史
git commit --amend --no-edit
git push --force-with-lease origin feature/login
# 若被拒绝,先 fetch 再检查,别直接换 --force

删除与标签

bash删除与标签
git push origin --delete feature/old
git push origin v1.2.0
git push --follow-tags

四、注意事项

⚠️
强推一律用 --force-with-lease
--force 不检查远端当前状态,别人刚推上去的提交会被你的历史直接盖掉。--force-with-lease 会比对远端引用是否仍等于本地记录的 origin/分支,不一致就拒绝。注意:改写已公开分支的历史仍需团队同步,参数不能替代沟通。
push 不会自动带标签: 打完 tag 记得 git push origin v1.2.0;git push --tags 会把所有本地标签(含临时标签)一起推出去。推荐配 push.followTags=true 只自动带附注标签。

五、小结

git push 的参数分三类:推什么(refspec、--all、--tags、-d)、怎么推(-u、--atomic、-o)、允不允许覆盖(--force-with-lease)。把最后一项记牢,能避免绝大多数协作事故。

本系列共 28 篇,一个命令一篇,完整目录见 Git 栏目。下一篇:git stash 命令参数详解。