git push的使用


在使用push時,我們要特別注意分支的名稱和”關聯分支"對於操作的影響;

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

1.git push origin <local_branch>:<remote_branch>

場景:將本地分支推送到遠程不同名的分支;
作用:將指定的本地分支推送到指定的遠程分支;(這兩個分支並沒有建立關聯關系,且可以不同名)

無論是 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分支可能會“落后”遠程的分支;  

2.git push origin <local_branch>

場景:同步指定分支(非當前分支)到遠程分支,如果是當前分支則<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這樣同步時就會關聯新創建的遠程分支;

3.git push

場景:當前分支已經有關聯分支,並且關聯分支與當前分支同名;
作用:將當前分支代碼同步到遠程同名分支;

首先從遠程dev分支檢出一個不同名的分支dev_zhangcz:

 

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

git checkout -b dev_zhangcz origin/dev   #在本地創建一個 dev_zhangcz 分支,並拉去遠端的origin/dev

 這樣我們本地就有了一個和遠程"dev"相關聯的分支"dev_zhangcz",此時我們執行git push會怎么樣呢?

 

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分支的關聯分支:

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
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執行默認推送時,本地分支需與"關聯分支"同名才可以

深入push.default

在git的全局配置中,有一個push.default屬性,其決定了git push操作的默認行為。
push.default 有以下幾個可選值: nothing, current, upstream, simple, matching

nothing: 直接push會出錯,需要顯式的指出推送的遠程分支,例如:git push origin <remote_branch>;
current: 推送時只會推送當前所在的分支到遠程同名分支,如果遠程分支不存在相應的同名分支,則創建該分支;
upstream: 推送當前分支到它的upstream分支上,這個模式只適用於推送到與拉取數據相同的倉庫(比如central workflow);
simple(默認): simple和upstream是相似的,只有一點不同,simple必須保證本地分支和它的遠程 upstream分支同名,否則會拒絕push操作。
matching:推送本地和遠程都存在的同名分支。

  


鏈接:https://www.jianshu.com/p/1abad73f8161
來源:簡書

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM