[TOC] #### 1. 介紹 --- **git 官網(wǎng)介紹:** git push 用于更新遠(yuǎn)程引用以及關(guān)聯(lián)對(duì)象,使用本地 refs 更新遠(yuǎn)程 refs,同時(shí)發(fā)送完成給定 refs 所需的對(duì)象 **通俗來(lái)講:** git push 用于將本地分支或標(biāo)簽的更新推送到到遠(yuǎn)程主機(jī),也可以用于刪除遠(yuǎn)程分支和標(biāo)簽 #### 2. 語(yǔ)法 --- 語(yǔ)法格式 ``` git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名> ``` 遠(yuǎn)程主機(jī)名指的是 git 倉(cāng)庫(kù)地址,也可以使用 `git remote add` 設(shè)置的 url 別名替代倉(cāng)庫(kù)地址 ``` # 將本地的 master 分支推送到遠(yuǎn)程 dev 分支 git push https://gitee.com/holyking/test.git master:dev # 添加遠(yuǎn)程庫(kù)別名配置 git remote add origin https://gitee.com/holyking/test.git git push origin master:dev ``` 如果本地分支名和遠(yuǎn)程分支名相同,則可以省略遠(yuǎn)程分支名 ``` # 下面兩個(gè)命令等價(jià),將本地 master 分支推送到遠(yuǎn)程 master 分支 git push origin master:master git push origin master ``` #### 3. 推送分支到遠(yuǎn)程庫(kù) --- 眾所周知,本地分支推送到遠(yuǎn)程庫(kù)可以使用 ``` git push origin master ``` 每次推送代碼都要寫(xiě) `origin master` 會(huì)很麻煩,那么有沒(méi)有辦法可以省略掉它呢 ?當(dāng)然是有的 先來(lái)試一下省略掉它去執(zhí)行命令,會(huì)是什么結(jié)果 ? ``` $ 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 ``` 執(zhí)行下面命令,你會(huì)看到這樣的一段輸出【沒(méi)有 [origin/master]】 ``` $ git branch -vv * master 2c0a0cd first commit ``` 解決方案: 推送代碼時(shí)使用 `-u, --set-upstream` 參數(shù)將本次推送的遠(yuǎn)程分支設(shè)置為本地分支的上游分支即可 ``` # --set-upstream 可簡(jiǎn)寫(xiě)為 -u git push --set-upstream origin master ``` 加了 `-u` 參數(shù)推送成功后,再執(zhí)行下面命令會(huì)發(fā)現(xiàn)多了一項(xiàng)內(nèi)容: `[origin/master]` 推送代碼時(shí) `-u` 參數(shù)給本地分支設(shè)置了上游分支。當(dāng)再次推送代碼時(shí),如果沒(méi)有指定推送到哪里,自動(dòng)推送到上游分支 ``` $ git branch -vv * master 2c0a0cd [origin/master] first commit ``` 有時(shí)需要將本地分支強(qiáng)制推送到遠(yuǎn)程分支,比如:本地分支和遠(yuǎn)程分支代碼不一致且無(wú)法合并,但已確認(rèn)本地是最新的代碼 ``` # -f, --force 強(qiáng)制將本地分支推送到遠(yuǎn)程分支,俗稱(chēng): 強(qiáng)推 git push --force origin <branch> ``` 將所有分支推送到遠(yuǎn)程倉(cāng)庫(kù) ``` # 命令格式 git push [-u] <remote> --all # 將本地所有分支推送到遠(yuǎn)程庫(kù) git push origin --all # 將本地所有分支推送到遠(yuǎn)程庫(kù),并且設(shè)置上游分支 git push -u origin --all ``` #### 4. 刪除遠(yuǎn)程庫(kù)內(nèi)容 --- 刪除遠(yuǎn)程分支 ``` # --delete 參數(shù)可簡(jiǎn)寫(xiě)為 -d git push origin --delete <branch> # 我更喜歡將參數(shù)放在 origin 的前面 git push -d origin <branch> # 也可以這樣執(zhí)行,作用是一樣的 git push origin :<branch> ``` 刪除遠(yuǎn)程分支后一般也需要?jiǎng)h除本地分支 ``` git branch -d <branch> ``` 刪除遠(yuǎn)程主機(jī)中的標(biāo)簽 ``` git push -d origin <tagname> ``` #### 5. 推送到多個(gè)遠(yuǎn)程庫(kù) --- 以 gitee、github 為例,很多開(kāi)源項(xiàng)目會(huì)同時(shí)推送到這兩個(gè)代碼托管平臺(tái) 第一步:添加兩個(gè)遠(yuǎn)程源 ``` git remote add gitee git@gitee.com:u1s1it/summary.git git remote add github git@github.com:u1s1it/summary.git ``` 第二步:將本地倉(cāng)庫(kù)推送到兩個(gè)遠(yuǎn)程庫(kù) ``` git push gitee master && git push github master ``` 命令太長(zhǎng)了,不方便使用,推薦定義命令別名 Zsh 終端配置 ``` alias geh="git push gitee \$(git_current_branch) && git push github \$(git_current_branch)" ``` #### 6. git push 用法總結(jié) --- ``` # 將分支或標(biāo)簽推送到遠(yuǎn)程庫(kù) git push [remote] [branch]/[tabname] # 將分支推送到遠(yuǎn)程庫(kù),并設(shè)置為上游分支 git push -u [remote] [branch] # 將分支強(qiáng)制推送到遠(yuǎn)程庫(kù) git push -f [remote] [branch] # 將所有分支推送到遠(yuǎn)程庫(kù), -u 是可選的 git push -u [remote] --all # 刪除遠(yuǎn)程庫(kù)的分支或標(biāo)簽 git push [remote] :[branch]/[tabname] ```