溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

git中“git fetch”與“git pull”有什么區(qū)別

發(fā)布時間:2021-01-19 09:57:46 來源:億速云 閱讀:230 作者:小新 欄目:軟件技術(shù)

這篇文章給大家分享的是有關(guān)git中“git fetch”與“git pull”有什么區(qū)別的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

git fetch和git pull都可以將遠(yuǎn)端倉庫更新至本地那么他們之間有何區(qū)別?想要弄清楚這個問題有有幾個概念不得不提。

FETCH_HEAD: 是一個版本鏈接,記錄在本地的一個文件中,指向著目前已經(jīng)從遠(yuǎn)程倉庫取下來的分支的末端版本。

commit-id:在每次本地工作完成后,都會做一個git commit 操作來保存當(dāng)前工作到本地的repo, 此時會產(chǎn)生一個commit-id,這是一個能唯一標(biāo)識一個版本的序列號。 在使用git push后,這個序列號還會同步到遠(yuǎn)程倉庫。

有了以上的概念再來說說git fetch

git fetch:這將更新git remote 中所有的遠(yuǎn)程倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中
git fetch更新遠(yuǎn)程倉庫的方式如下:

git fetch origin master:tmp 
//在本地新建一個temp分支,并將遠(yuǎn)程origin倉庫的master分支代碼下載到本地temp分支
git diff tmp 
//來比較本地代碼與剛剛從遠(yuǎn)程下載下來的代碼的區(qū)別
git merge tmp
//合并temp分支到本地的master分支
git branch -d temp
//如果不想保留temp分支 可以用這步刪除

(1)如果直接使用git fetch,則步驟如下:

  • 創(chuàng)建并更新本 地遠(yuǎn)程分支。即創(chuàng)建并更新origin/xxx 分支,拉取代碼到origin/xxx分支上。

  • 在FETCH_HEAD中設(shè)定當(dāng)前分支-origin/當(dāng)前分支對應(yīng),如直接到時候git merge就可以將origin/abc合并到abc分支上。

(2)git fetch origin
只是手動指定了要fetch的remote。在不指定分支時通常默認(rèn)為master

(3)git fetch origin dev
指定遠(yuǎn)程remote和FETCH_HEAD,并且只拉取該分支的提交。

這個命令會訪問遠(yuǎn)程倉庫,從中拉取所有你還沒有的數(shù)據(jù)。 執(zhí)行完成后,你將會擁有那個遠(yuǎn)程倉庫中所有分支的引用,可以隨時合并或查看。

如果你使用git clone 命令克隆了一個倉庫,命令會自動將其添加為遠(yuǎn)程倉庫(git remote -v)并默認(rèn)以 “origin” 為簡寫。 所以,git fetch origin 會抓取克?。ɑ蛏弦淮巫ト。┖笮峦扑偷乃泄ぷ?。 必須注意 git fetch 命令會將數(shù)據(jù)拉取到你的本地倉庫 - 它并不會自動合并或修改你當(dāng)前的工作。 當(dāng)準(zhǔn)備好時你必須手動將其合并入你的工作。

如果你有一個分支設(shè)置為跟蹤一個遠(yuǎn)程分支,可以使用 git pull命令來自動的抓取然后合并遠(yuǎn)程分支到當(dāng)前分支。 這對你來說可能是一個更簡單或更舒服的工作流程;默認(rèn)情況下,git clone 命令會自動設(shè)置本地 master 分支跟蹤克隆的遠(yuǎn)程倉庫的 master 分支(或不管是什么名字的默認(rèn)分支)。 運(yùn)行 git pull 通常會從最初克隆的服務(wù)器上抓取數(shù)據(jù)并自動嘗試合并到當(dāng)前所在的分支。

git pull : 首先,基于本地的FETCH_HEAD記錄,比對本地的FETCH_HEAD記錄與遠(yuǎn)程倉庫的版本號,然后git fetch 獲得當(dāng)前指向的遠(yuǎn)程分支的后續(xù)版本的數(shù)據(jù),然后再利用git merge將其與本地的當(dāng)前分支合并。所以可以認(rèn)為git pull是git fetch和git merge兩個步驟的結(jié)合。

git pull的用法如下:

git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
//取回遠(yuǎn)程主機(jī)某個分支的更新,再與本地的指定分支合并。

因此,與git pull相比git fetch相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地,但不會自動merge。如果需要有選擇的合并git fetch是更好的選擇。效果相同時git pull將更為快捷。

注:用git pull更新代碼的話就比較簡單暴力了但是根據(jù)commit ID來看的話,他們實際的實現(xiàn)原理是不一樣的,所以不要用git pull,用git fetch和git merge更加安全。

感謝各位的閱讀!關(guān)于“git中“git fetch”與“git pull”有什么區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

git
AI