首頁 >系統教程 >Linux >詳細了解git fetch與git pull的差別

詳細了解git fetch與git pull的差別

王林
王林轉載
2024-04-27 21:34:33495瀏覽

详细了解git fetch与git pull的区别

git fetch和git pull都可以將遠端倉庫更新到本地那麼他們之間有何區別?想要弄清楚這個問題有有幾個概念不得不提。

FETCH_HEAD: 是一個版本鏈接,記錄在本地的一個檔案中,指向著目前已經從遠端倉庫取下來的分支的末端版本。
commit-id:在每次本地工作完成後,都會做一個git commit 操作來保存目前工作到本地的repo, 此時會產生一個commit-id,這是一個能唯一標識一個版本的序號。使用git push後,這個序號也會同步到遠端倉庫。

有了以上的概念再來談談git fetch
#git fetch:這將更新git remote 中所有的遠端倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD檔案中
git fetch更新遠端倉庫的方式如下:

git fetch origin master:tmp <span class="hljs-comment">
//在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支</span>
git diff tmp <span class="hljs-comment">
//来比较本地代码与刚刚从远程下载下来的代码的区别</span>
git <span class="hljs-built_in">merge</span> tmp<span class="hljs-comment">
//合并temp分支到本地的master分支</span>
git branch -d temp<span class="hljs-comment">
//如果不想保留temp分支 可以用这步删除</span>

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

  • 建立並更新本 地遠端分支。即建立並更新origin/xxx 分支,拉取程式碼到origin/xxx分支上。
  • 在FETCH_HEAD中設定目前分支-origin/目前分支對應,如直接到時候git merge就可以將origin/abc合併到abc分支上。

(2)git fetch origin
## 只是手動指定了要fetch的remote。在不指定分支時通常會預設為master

(3)git fetch origin dev

## 指定遠端remote和FETCH_HEAD,並且只拉取該分支的提交。

git pull
: 首先,基於本地的FETCH_HEAD記錄,比對本地的FETCH_HEAD記錄與遠端倉庫的版本號,然後git fetch 獲得當前指向的遠端分支的後續版本的數據,然後再利用git merge將其與本地的當前分支合併。所以可以認為git pull是git fetch和git merge兩個步驟的結合。

git pull的用法如下:

git pull <span class="hljs-tag">60c690392010ae04a4c92ce6c44e5cd2</span> <span class="hljs-tag">2e81c6e41cd53cc8483c7ee2820f9055</span>:<span class="hljs-tag">a70f6d52bffd2c4d7fbfb25461f834a0</span>
//取回远程主机某个分支的更新,再与本地的指定分支合并。
因此,與git pull相比git fetch相當於是從遠端取得最新版本到本地,但不會自動merge。如果需要有選擇的合併git fetch是更好的選擇。效果相同時git pull將更為快速。 ###

以上是詳細了解git fetch與git pull的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除