Git Push
最后更新
git push 把本地分支上的提交上传到对应的远程分支(例如 GitHub 上的分支)。分支设置好上游之后,直接运行 git push 就够了;新分支第一次推送时要加 -u,它会创建远程分支并建立跟踪关系,以后的 push 和 pull 都不用再写参数。
在终端在线编辑器中试试这些命令:浏览器里就是真正的 shell,无需安装。
语法
| 命令 | 作用 |
|---|---|
git push | 把当前分支推送到它的上游 |
git push -u origin feature | 推送新分支并设置上游 |
git push origin main | 推送到指定的远程仓库和分支 |
git push --tags | 推送所有本地标签 |
git push --force-with-lease | 变基后安全地强制推送 |
常见用法
| 目标 | 命令 |
|---|---|
| 推送一个全新的分支 | git push -u origin feature |
| 已设置上游后推送 | git push |
| 推送单个标签 | git push origin v1.0.0 |
| 删除远程分支 | git push origin --delete feature |
完整示例
| 步骤 | 命令 | 结果 |
|---|---|---|
| 1 | git remote add origin <url> | 以 origin 为名把本地仓库连接到远程仓库 |
| 2 | git push -u origin main | 在远程创建 main,并把它设为本地 main 的上游 |
| 3 | git push | 之后在 main 上推送都不需要参数 |
git push 常见问题
git push 是做什么的?
它把本地分支有而远程分支没有的提交发送过去,然后把远程分支移动到相同的位置。它只上传提交:未提交的改动仍然留在你的电脑上,所以要先 commit。如果远程有你本地没有的提交,推送会被拒绝,需要先 pull 或变基。
怎么把新分支推送到远程仓库?
运行
git push -u origin <branch>。-u(--set-upstream 的简写)会在远程创建这个分支,并把你的本地分支和它关联起来,之后直接 git push 和 git pull 就不用写参数了。在第一次推送之前,远程分支是不存在的。为什么 git push 提示“no upstream branch”?
你的本地分支还没有关联任何远程分支。用
git push -u origin <branch> 推送,就会创建远程分支并设置上游。之后单独运行 git push,Git 就知道该把提交发到哪里。怎么推送标签?
标签默认不会被推送。用
git push origin <tagname> 推送单个标签,或用 git push --tags 一次推送全部标签。这是一个常见的坑:在本地创建的标签,只有显式推送后才会出现在远程仓库。怎么安全地强制推送?
改写历史之后(例如变基或 amend),用
git push --force-with-lease 代替 --force。只有在你上次 fetch 之后没有其他人推送过,它才会覆盖远程分支,从而保护队友的工作。完整说明请看 git 强制推送页面。git push -u origin main 是什么意思?
origin 是远程仓库(见 git remote),main 是分支,-u 把这个远程分支设为本地 main 的上游。这正是 GitHub 在新仓库页面上给出的命令:运行一次之后,在 main 上执行 git push 和 git pull 都不需要参数。git push 和 git pull 有什么区别?
它们移动提交的方向相反。
git push 把你的本地提交上传到远程仓库;git pull 下载远程的新提交并合并到你的分支。如果推送因为 non-fast-forward 被拒绝,通常说明你需要先 pull。pull 在底层做了什么,请看 git fetch 与 pull 对比。可以在线练习吗?
可以。打开终端在线编辑器,就能在浏览器里的真实 shell 中运行
git push,无需安装。Coddy 的免费互动 Git 课程也会一步步教你使用远程仓库。