四、git pullgit pull命令的作用是,取回遠(yuǎn)程主機(jī)某個分支的更新,再與本地的指定分支合并。它的完整格式稍稍有點復(fù)雜。
$ git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
比如,取回origin主機(jī)的next分支,與本地的master分支合并,需要寫成下面這樣。
$ git pull origin next:master
如果遠(yuǎn)程分支是與當(dāng)前分支合并,則冒號后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再與當(dāng)前分支合并。實質(zhì)上,這等同于先做git fetch,再做git merge。
$ git fetch origin
$ git merge origin/next
在某些場合,Git會自動在本地分支與遠(yuǎn)程分支之間,建立一種追蹤關(guān)系(tracking)。比如,在git clone的時候,所有本地分支默認(rèn)與遠(yuǎn)程主機(jī)的同名分支,建立追蹤關(guān)系,也就是說,本地的master分支自動"追蹤"origin/master分支。
Git也允許手動建立追蹤關(guān)系。
五、git pushgit push命令用于將本地分支的更新,推送到遠(yuǎn)程主機(jī)。它的格式與git pull命令相仿。
$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
注意,分支推送順序的寫法是<來源地>:<目的地>,所以git pull是<遠(yuǎn)程分支>:<本地分支>,而git push是<本地分支>:<遠(yuǎn)程分支>。
如果省略遠(yuǎn)程分支名,則表示將本地分支推送與之存在"追蹤關(guān)系"的遠(yuǎn)程分支(通常兩者同名),如果該遠(yuǎn)程分支不存在,則會被新建。
$ git push origin master
上面命令表示,將本地的master分支推送到origin主機(jī)的master分支。如果后者不存在,則會被新建。
如果省略本地分支名,則表示刪除指定的遠(yuǎn)程分支,因為這等同于推送一個空的本地分支到遠(yuǎn)程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示刪除origin主機(jī)的master分支。
如果當(dāng)前分支與遠(yuǎn)程分支之間存在追蹤關(guān)系,則本地分支和遠(yuǎn)程分支都可以省略。
$ git push origin
上面命令表示,將當(dāng)前分支推送到origin主機(jī)的對應(yīng)分支。
如果當(dāng)前分支只有一個追蹤分支,那么主機(jī)名都可以省略。
$ git push
如果當(dāng)前分支與多個主機(jī)存在追蹤關(guān)系,則可以使用-u選項指定一個默認(rèn)主機(jī),這樣后面就可以不加任何參數(shù)使用git push。
$ git push -u origin master
上面命令將本地的master分支推送到origin主機(jī),同時指定origin為默認(rèn)主機(jī),后面就可以不加任何參數(shù)使用git push了。
不帶任何參數(shù)的git push,默認(rèn)只推送當(dāng)前分支,這叫做simple方式。此外,還有一種matching方式,會推送所有有對應(yīng)的遠(yuǎn)程分支的本地分支。Git 2.0版本之前,默認(rèn)采用matching方法,現(xiàn)在改為默認(rèn)采用simple方式。如果要修改這個設(shè)置,可以采用git config命令。
$ git config --global push.default matching
# 或者
$ git config --global push.default simple
還有一種情況,就是不管是否存在對應(yīng)的遠(yuǎn)程分支,將本地的所有分支都推送到遠(yuǎn)程主機(jī),這時需要使用--all選項。
$ git push --all origin
上面命令表示,將所有本地分支都推送到origin主機(jī)。
如果遠(yuǎn)程主機(jī)的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull合并差異,然后再推送到遠(yuǎn)程主機(jī)。這時,如果你一定要推送,可以使用--force選項。
$ git push --force origin
上面命令使用--force選項,結(jié)果導(dǎo)致遠(yuǎn)程主機(jī)上更新的版本被覆蓋。除非你很確定要這樣做,否則應(yīng)該盡量避免使用--force選項。
最后,git push不會推送標(biāo)簽(tag),除非使用--tags選項。
$ git push origin --tags
本文版權(quán)歸黑馬程序員Python培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員Python培訓(xùn)學(xué)院
首發(fā):http://m.409rqu1.cn/news/python.html