[TOC] #### 1. 介绍 --- **git 官网介绍:** git push 用于更新远程引用以及关联对象,使用本地 refs 更新远程 refs,同时发送完成给定 refs 所需的对象 **通俗来讲:** git push 用于将本地分支或标签的更新推送到到远程主机,也可以用于删除远程分支和标签 #### 2. 语法 --- 语法格式 ``` git push <远程主机名> <本地分支名>:<远程分支名> ``` 远程主机名指的是 git 仓库地址,也可以使用 `git remote add` 设置的 url 别名替代仓库地址 ``` # 将本地的 master 分支推送到远程 dev 分支 git push https://gitee.com/holyking/test.git master:dev # 添加远程库别名配置 git remote add origin https://gitee.com/holyking/test.git git push origin master:dev ``` 如果本地分支名和远程分支名相同,则可以省略远程分支名 ``` # 下面两个命令等价,将本地 master 分支推送到远程 master 分支 git push origin master:master git push origin master ``` #### 3. 推送分支到远程库 --- 众所周知,本地分支推送到远程库可以使用 ``` git push origin master ``` 每次推送代码都要写 `origin master` 会很麻烦,那么有没有办法可以省略掉它呢 ?当然是有的 先来试一下省略掉它去执行命令,会是什么结果 ? ``` $ git push fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin master ``` 执行下面命令,你会看到这样的一段输出【没有 [origin/master]】 ``` $ git branch -vv * master 2c0a0cd first commit ``` 解决方案: 推送代码时使用 `-u, --set-upstream` 参数将本次推送的远程分支设置为本地分支的上游分支即可 ``` # --set-upstream 可简写为 -u git push --set-upstream origin master ``` 加了 `-u` 参数推送成功后,再执行下面命令会发现多了一项内容: `[origin/master]` 推送代码时 `-u` 参数给本地分支设置了上游分支。当再次推送代码时,如果没有指定推送到哪里,自动推送到上游分支 ``` $ git branch -vv * master 2c0a0cd [origin/master] first commit ``` 有时需要将本地分支强制推送到远程分支,比如:本地分支和远程分支代码不一致且无法合并,但已确认本地是最新的代码 ``` # -f, --force 强制将本地分支推送到远程分支,俗称: 强推 git push --force origin <branch> ``` 将所有分支推送到远程仓库 ``` # 命令格式 git push [-u] <remote> --all # 将本地所有分支推送到远程库 git push origin --all # 将本地所有分支推送到远程库,并且设置上游分支 git push -u origin --all ``` #### 4. 删除远程库内容 --- 删除远程分支 ``` # --delete 参数可简写为 -d git push origin --delete <branch> # 我更喜欢将参数放在 origin 的前面 git push -d origin <branch> # 也可以这样执行,作用是一样的 git push origin :<branch> ``` 删除远程分支后一般也需要删除本地分支 ``` git branch -d <branch> ``` 删除远程主机中的标签 ``` git push -d origin <tagname> ``` #### 5. 推送到多个远程库 --- 以 gitee、github 为例,很多开源项目会同时推送到这两个代码托管平台 第一步:添加两个远程源 ``` git remote add gitee git@gitee.com:u1s1it/summary.git git remote add github git@github.com:u1s1it/summary.git ``` 第二步:将本地仓库推送到两个远程库 ``` git push gitee master && git push github master ``` 命令太长了,不方便使用,推荐定义命令别名 Zsh 终端配置 ``` alias geh="git push gitee \$(git_current_branch) && git push github \$(git_current_branch)" ``` #### 6. git push 用法总结 --- ``` # 将分支或标签推送到远程库 git push [remote] [branch]/[tabname] # 将分支推送到远程库,并设置为上游分支 git push -u [remote] [branch] # 将分支强制推送到远程库 git push -f [remote] [branch] # 将所有分支推送到远程库, -u 是可选的 git push -u [remote] --all # 删除远程库的分支或标签 git push [remote] :[branch]/[tabname] ```