[TOC] #### 1. 介紹 --- **git 官網(wǎng)介紹:** git push 用于更新遠程引用以及關(guān)聯(lián)對象,使用本地 refs 更新遠程 refs,同時發(fā)送完成給定 refs 所需的對象 **通俗來講:** git push 用于將本地分支或標簽的更新推送到到遠程主機,也可以用于刪除遠程分支和標簽 #### 2. 語法 --- 語法格式 ``` git push <遠程主機名> <本地分支名>:<遠程分支名> ``` 遠程主機名指的是 git 倉庫地址,也可以使用 `git remote add` 設(shè)置的 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` 會很麻煩,那么有沒有辦法可以省略掉它呢 ?當然是有的 先來試一下省略掉它去執(zhí)行命令,會是什么結(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í)行下面命令,你會看到這樣的一段輸出【沒有 [origin/master]】 ``` $ git branch -vv * master 2c0a0cd first commit ``` 解決方案: 推送代碼時使用 `-u, --set-upstream` 參數(shù)將本次推送的遠程分支設(shè)置為本地分支的上游分支即可 ``` # --set-upstream 可簡寫為 -u git push --set-upstream origin master ``` 加了 `-u` 參數(shù)推送成功后,再執(zhí)行下面命令會發(fā)現(xiàn)多了一項內(nèi)容: `[origin/master]` 推送代碼時 `-u` 參數(shù)給本地分支設(shè)置了上游分支。當再次推送代碼時,如果沒有指定推送到哪里,自動推送到上游分支 ``` $ 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 # 將本地所有分支推送到遠程庫,并且設(shè)置上游分支 git push -u origin --all ``` #### 4. 刪除遠程庫內(nèi)容 --- 刪除遠程分支 ``` # --delete 參數(shù)可簡寫為 -d git push origin --delete <branch> # 我更喜歡將參數(shù)放在 origin 的前面 git push -d origin <branch> # 也可以這樣執(zhí)行,作用是一樣的 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 用法總結(jié) --- ``` # 將分支或標簽推送到遠程庫 git push [remote] [branch]/[tabname] # 將分支推送到遠程庫,并設(shè)置為上游分支 git push -u [remote] [branch] # 將分支強制推送到遠程庫 git push -f [remote] [branch] # 將所有分支推送到遠程庫, -u 是可選的 git push -u [remote] --all # 刪除遠程庫的分支或標簽 git push [remote] :[branch]/[tabname] ```