上一次咱們詳細講解了git pull
的三種使用方式,也介紹了什麼是upstream(關聯分支),此次咱們來看看git push
的使用;
在使用push時,咱們要特別注意分支的名稱和」關聯分支"對於操做的影響;git
1.git push
2.git push origin <remote_branch>
3.git push origin <local_branch>:<remote_branch>安全
測試起始環境: 遠程倉庫有兩個分支:master和dev 本地倉庫由一個分支:master 注:本次只使用dev分支進行演示 zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (master) $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/dev remotes/origin/master
場景:當前分支已經有關聯分支,而且關聯分支與當前分支同名;
做用:將當前分支代碼同步到遠程同名分支;測試
什麼是關聯分支:點擊我
首先從遠程dev分支檢出一個不一樣名的分支dev_zhangcz:spa
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (master) $ git checkout -b dev_zhangcz origin/dev Switched to a new branch 'dev_zhangcz' Branch dev_zhangcz set up to track remote branch dev from origin. zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch * dev_zhangcz master
這樣咱們本地就有了一個和遠程"dev"相關聯的分支"dev_zhangcz",此時咱們執行git push會怎麼樣呢?code
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git push fatal: The upstream branch of your current branch does not match the name of your current branch. To push to the upstream branch on the remote, use git push origin HEAD:dev To push to the branch of the same name on the remote, use git push origin dev_zhangcz To choose either option permanently, see push.default in 'git help config'.
報錯的大意思就是:你當前分支的關聯分支(upstream branch)與你分支的名字不匹配(not match);
咱們在使用git branch -vv
查看一下dev_zhangcz分支的關聯分支:rem
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch -vv * dev_zhangcz 3b7001a [origin/dev] cm master 941758f [origin/master] master new
確實dev_zhangcz關聯的分支(dev)名字和它不同;git給出的解決方案
1.push到HEAD分支;
2.push到遠程同名的分支(新建);
一般狀況下,咱們選擇方案2,但若是你就是想要push到origin/dev分支,也能夠選擇重命名當前分支,而後從新執行git push
;或者使用git push origin dev
get
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev_zhangcz) $ git branch -m dev_zhangcz dev zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push Everything up-to-date
結論:當使用
git push
執行默認推送時,本地分支需與"關聯分支"同名才能夠;同步
在git的全局配置中,有一個push.default屬性,其決定了git push
操做的默認行爲。
push.default 有如下幾個可選值: nothing, current, upstream, simple, matchingworkflow
- nothing: 直接push會出錯,須要顯式的指出推送的遠程分支,例如:git push origin <remote_branch>;
- current: 推送時只會推送當前所在的分支到遠程同名分支,若是遠程分支不存在相應的同名分支,則建立該分支;
- upstream: 推送當前分支到它的upstream分支上,這個模式只適用於推送到與拉取數據相同的倉庫(好比central workflow);
- simple(默認): simple和upstream是類似的,只有一點不一樣,simple必須保證本地分支和它的遠程 upstream分支同名,不然會拒絕push操做。
- matching:推送本地和遠程都存在的同名分支。
什麼是upstream:點擊我
在git 2.0中,simple是push.default的默認值配置項(2.0之前的默認配置項是matching),由於該選項對於新手來講是最安全的。it
場景:同步指定分支(非當前分支)到遠程分支,若是是當前分支則<local_branch>能夠省略
做用:"同步"指定的本地分支到遠程關聯同名分支;
介紹git push
時,對這種狀況做了說明,當你想要把非當前分支推送到其關聯的遠程分支,可使用這種方法。
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push origin dev_zcz
上述示例,把本地的dev_zcz分支,同步到遠端的dev_zcz分支;
特別注意:
1.若是本地dev_zcz的關聯分支與dev_zcz名稱不同,則會在遠程新建一個dev_zcz分支;
2.新建的遠程dev_zcz分支並不會與本地的dev_zcz分支創建關聯關係;(本地的dev_zcz還關聯的是其檢出時的那個分支)
3.若是想在檢出時創建分支,須要使用git push -u dev_zcz
這樣同步時就會關聯新建立的遠程分支;
場景:將本地分支推送到遠程不一樣名的分支;
做用:將指定的本地分支推送到指定的遠程分支;(這兩個分支並無創建關聯關係,且能夠不一樣名)
不管是 git push
仍是git push local_branch
,都須要本地分支與遠程分支同名,當須要將本地分支推送到遠程不一樣名分支,則須要使用這種方式;
zhangchangzhi@ZB-PF0SB6DQ MINGW64 /e/02.Workspace-test/gitTest (dev) $ git push origin dev:dev_zcz
同步本地的dev和遠端的master分支,這樣同步後本地的master分支可能會「落後」遠程的分支;