Git的使用—git push的默認行為


寫於: 2016/2/19
前記:有些時候在推送分支到遠程倉庫的時候,可以只打git push ,而有些時候則需要git push <repository> <本地分支>

那么到底這個命令在什么時候簡寫,什么時候需要寫全呢?

參考文章:https://segmentfault.com/a/1190000002783245
首先要知道的是:
git push 的完整命令是: git push [<options>] [<repository> [<refspec>...]] 注:帶有[]表示是可選項

    其實git 對於push操作有個default行為,但是根據git版本不同,push的默認行為是不同的;

    那么首先得確定自己的git版本是多少:

  > git --version  

(如果忘記命令是什么,則先打git -help ,它會提示你的;只要會英語的,看見version,應該就明白該怎么做了)

  > git version 2.6.4.window.1 

(筆者的版本是這個,就以這個為例)

  在Git的2.0之前,push.default屬性默認被設為'matching',2.0之后被改成為'simple'。

 (當然這個屬性也是可以指定的,具體方法見下)


 push.default的可選值:nothing , current , upstream , simple , matching

 注:push.default默認值的意思是只執行git push以后發生的操作

 各自的意義:

  •  nothing : 無默認操作,需要顯示地指定遠程分支;eg : git push origin branchname
  •  current :  push當前分支到遠程同名分支,如果遠程同名分支不存在則自動創建同名分支
  •  upstream : push當前分支到它的upstream分支上
  •  simple : 與upstream類似,但有一點不同,就是simple必須保證本地分支和它的遠程分支upstream分支同名,否則會拒絕push操作。
  •  matching : push所有本地和遠程兩端都存在的同名分支

  查看分支的upstream命令: get config --get branch.<分支名>.remote

  例如:查看本地master分支的upstream

   > git config --get branch.master.remote

      origin

再來解釋一下upstream , 其實upstream和downstream是一對的,它的意思如下:

假設有兩個倉庫A和B,當我們把倉庫A中x分支的代碼push到倉庫B中的y分支上,則B中的y分支是A中的x分支的upstream;A中x分支是B中y分支的downstream。

 


 

介紹完理論,介紹一下實際應用的情況:

一般情況下,在實際的工作中,我們往往是從遠程倉庫中clone代碼到自己的本地倉庫。

情況一:

在本地的master上進行代碼開發,此時本地分支與遠程upstream分支是同名的。

 注:clone以后的本地master分支的upstream是origin 

在master分支上進行n(n>0)次commit操作以后,執行git push命令以后,不管git的版本是什么,都可以push上去

情況二:

 clone代碼以后,在本地創建新的分支,在新分支上進行開發,同時push的時候也push新分支

 (關於新分支在push前要進行的fetch , merge等操作,來維持與遠程倉庫中的master保持一致,在以后的篇章中再細講)

 創建新分支命令:

 >git branch new

 切換到新的分支

 > git checkout new 

 這兩條命令也可以合並為一個命令:

 > git checkout -b new

在new分支上進行n(n>0)次commit操作以后,執行git push命令以后,由於是第一次提交,遠程上並不存在同名分支,也沒有upstream,所以會報錯(如下圖):(其實git在提示錯誤的同時,已經提示你該怎么做了,真的好友好呀!)

   如果new分支在很長時間內都需要push,則可以在首次push的時候,加上-u(或者是 --set-upstream);

  > git push  -u origin 20160125-app-bc-pro  

  選項: -u / --set-upstream :是設置該分支(20160125-app-bc-pro)的upstream。

  要設置分支的upstream,也可以顯示的設置:

  > git branch -u origin/20160125-app-bc-pro  (將當前的本地分支,追蹤遠程分支origin/20160125-app-bc-pro,即為當前分支設置upstream)

  也可以使用命令:

 > git branch --set-upstream-to=origin/20160125-app-bc-pro 20160125-app-bc-pro

 為本地20160125-app-bc-pro分支設置upstream。

 設置完以后,在以后的push操作中就可以直接執行git push操作啦!(前提是在20160125-app-bc-pro分支上提交,並且沒有修改push.default默認值)

 

 如果想要刪除分支的upstream信息,可以使用命令:

 > git branch --unset-upstream (刪除當前分支的upstream信息) 


當然如果你對git設置的push.default默認值有意見,或者不喜歡,或。。。想要改變它,也必須是可以的,命令是:

 例如要修改成nothing : 

 > git config --global push.default nothing

(其實,這個命令git在剛才的報錯提示中也已經顯示給你啦!so智能,再贊一個!)

 


免責聲明!

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



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