git fetch 和 git pull 的區(qū)別

前言

在我們使用git的時(shí)候用的更新代碼是git fetch作彤,git pull這兩條指令紊遵。
但是有沒(méi)有小伙伴去思考過(guò)這兩者的區(qū)別呢刻伊?
有經(jīng)驗(yàn)的人總是說(shuō)最好用git fetch+git merge怀愧,不建議用git pull册舞。
也有人說(shuō)git pull=git fetch+git merge恭应,真的是這樣嗎并徘?為什么呢暗赶?
既然如此為什么git還要提供這兩種方式呢够委?

1. 相同點(diǎn)

  • 首先在作用上他們的功能是大致相同的荐类,都是起到了更新代碼的作用。

2. 不同點(diǎn)

先補(bǔ)充一些git里面相關(guān)的一些知識(shí):

  • 首先我們要說(shuō)簡(jiǎn)單說(shuō)git的運(yùn)行機(jī)制茁帽。git分為本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)玉罐,我們一般情況都是寫(xiě)完代碼,commit到本地倉(cāng)庫(kù)(生成本地倉(cāng)的commit ID潘拨,代表當(dāng)前提交代碼的版本號(hào))吊输,然后push到遠(yuǎn)程倉(cāng)庫(kù)(記錄這個(gè)版本號(hào)),這個(gè)流程大家都熟悉铁追。
  • 我們本地的git文件夾里面對(duì)應(yīng)也存儲(chǔ)了git本地倉(cāng)庫(kù)master分支的commit ID 和 跟蹤的遠(yuǎn)程分支orign/master的commit ID(可以有多個(gè)遠(yuǎn)程倉(cāng)庫(kù))季蚂。那什么是跟蹤的遠(yuǎn)程分支呢,打開(kāi)git文件夾可以看到如下文件:
  • .git/refs/head/[本地分支]
  • .git/refs/remotes/[正在跟蹤的分支]
  • 其中head就是本地分支琅束,remotes是跟蹤的遠(yuǎn)程分支扭屁,這個(gè)類(lèi)型的分支在某種類(lèi)型上是十分相似的,他們都是表示提交的SHA1校驗(yàn)和(就是commitID)涩禀。
  • 但是料滥,不管他們是如何的相似,他們還是有一個(gè)重大的區(qū)別:
  • 更改遠(yuǎn)端跟蹤分支只能用git fetch艾船,或者是git push后作為副產(chǎn)品(side-effect)來(lái)改變葵腹。我們無(wú)法直接對(duì)遠(yuǎn)程跟蹤分支操作,我們必須先切回本地分支然后創(chuàng)建一個(gè)新的commit提交屿岂。
    在這里插入圖片描述

  • 首先假設(shè)我們本地倉(cāng)庫(kù)的 master 分支上 commit ID =1 践宴,orign/mastter中的commit ID =1 ;這時(shí)候遠(yuǎn)程倉(cāng)庫(kù)有人更新了github ogirn庫(kù)中master分支上的代碼,新的代碼版本號(hào)commit ID =2 ,那么在github上 orign/master的commitID=2爷怀,然后我們要更新代碼阻肩。


    在這里插入圖片描述

1. git fetch

  • 使用git fetch更新代碼,本地的庫(kù)中master的commitID不變霉撵,還是等于1磺浙。但是與git上面關(guān)聯(lián)的那個(gè)orign/master的commit ID變成了2。這時(shí)候我們本地相當(dāng)于存儲(chǔ)了兩個(gè)代碼的版本號(hào)徒坡,我們還要通過(guò)merge去合并這兩個(gè)不同的代碼版本撕氧,如果這兩個(gè)版本都修改了同一處的代碼,這時(shí)候merge就會(huì)出現(xiàn)沖突喇完,然后我們解決沖突之后就生成了一個(gè)新的代碼版本伦泥。

  • 這時(shí)候本地的代碼版本可能就變成了commit ID=3,即生成了一個(gè)新的代碼版本锦溪。

    在這里插入圖片描述

  • 相當(dāng)于fetch的時(shí)候本地的master沒(méi)有變化不脯,但是與遠(yuǎn)程倉(cāng)關(guān)聯(lián)的那個(gè)版本號(hào)被更新了,我們接下來(lái)就是在本地合并這兩個(gè)版本號(hào)的代碼刻诊。

2. git pull

  • 是用git pull更新代碼的話(huà)就比較簡(jiǎn)單暴力了防楷,看下圖。


    在這里插入圖片描述

    使用git pull的會(huì)將本地的代碼更新至遠(yuǎn)程倉(cāng)庫(kù)里面最新的代碼版本

3. 總結(jié)

  • 由此可見(jiàn)则涯,git pull看起來(lái)像git fetch+git merge复局,但是根據(jù)commit ID來(lái)看的話(huà),他們實(shí)際的實(shí)現(xiàn)原理是不一樣的粟判。
  • 這里借用之前文獻(xiàn)看到的一句話(huà):
不要用git pull亿昏,用git fetch和git merge代替它
git pull的問(wèn)題是它把過(guò)程的細(xì)節(jié)都隱藏了起來(lái)档礁,以至于你不用去了解git中各種類(lèi)型分支的區(qū)別和使用方法角钩。當(dāng)然,多數(shù)時(shí)候這是沒(méi)問(wèn)題的呻澜,但一旦代碼有問(wèn)題递礼,你很難找到出錯(cuò)的地方∫准#看起來(lái)git pull的用法會(huì)使你吃驚宰衙,簡(jiǎn)單看一下git的使用文檔應(yīng)該就能說(shuō)服你
**將下載(fetch)和合并(merge)放到一個(gè)命令里的另外一個(gè)弊端是睹欲,你的本地工作目錄在未經(jīng)確認(rèn)的情況下就會(huì)被遠(yuǎn)程分支更新供炼。當(dāng)然,除非你關(guān)閉所有的安全選項(xiàng)窘疮,否則git pull在你本地工作目錄還不至于造成不可挽回的損失袋哼,但很多時(shí)候我們寧愿做的慢一些,也不愿意返工重來(lái) **
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闸衫,一起剝皮案震驚了整個(gè)濱河市涛贯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔚出,老刑警劉巖弟翘,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虫腋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡稀余,警方通過(guò)查閱死者的電腦和手機(jī)悦冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睛琳,“玉大人盒蟆,你說(shuō)我怎么就攤上這事∈ζ” “怎么了历等?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)辟癌。 經(jīng)常有香客問(wèn)我寒屯,道長(zhǎng),這世上最難降的妖魔是什么黍少? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任浩螺,我火速辦了婚禮,結(jié)果婚禮上仍侥,老公的妹妹穿的比我還像新娘要出。我一直安慰自己,他們只是感情好农渊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布患蹂。 她就那樣靜靜地躺著,像睡著了一般砸紊。 火紅的嫁衣襯著肌膚如雪传于。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天醉顽,我揣著相機(jī)與錄音沼溜,去河邊找鬼。 笑死游添,一個(gè)胖子當(dāng)著我的面吹牛系草,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唆涝,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼找都,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了廊酣?” 一聲冷哼從身側(cè)響起能耻,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晓猛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饿幅,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年戒职,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了诫睬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帕涌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出续徽,到底是詐尸還是另有隱情蚓曼,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布钦扭,位于F島的核電站纫版,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏客情。R本人自食惡果不足惜其弊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膀斋。 院中可真熱鬧梭伐,春花似錦、人聲如沸仰担。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摔蓝。三九已至赂苗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贮尉,已是汗流浹背拌滋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜谚,地道東北人败砂。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像魏铅,于是被迫代替她去往敵國(guó)和親吠卷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容