HOWTO · Git

Git Fetch 和 Git Pull 的區別

在本文中,我們將討論 git pull 和 git fetch 命令的實際用途,以瞭解兩者有何不同以及何時適合使用它們。

本頁內容

本文將討論 git pull 和 git fetch 命令的實際用途,以瞭解它們有何不同以及何時使用它們。

什麼是 Git Fetch

在我們的遠端倉庫中,我們有如下所示的檔案。

遠端倉庫

請注意,我們的遠端和本地倉庫是同步的。讓我們更改遠端倉庫中的 Sample.txt 檔案。

在檔案中隨機寫入一些內容並提交更改。

更新後的檔案

此時,我們的遠端倉庫有兩個提交,而我們的本地倉庫有一個提交。這意味著我們的本地倉庫需要更新。

在這一點上,git fetch 很方便。讓我們執行一個 git log 命令來檢查我們在本地倉庫中的提交歷史記錄。

提交歷史

我們的本地倉庫沒有 Updated Sample.txt 提交。我們使用 git fetch 檢查更改。

pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 709 bytes | 2.00 KiB/s, done.
From https://github.com/Wachira11ke/Delftscopetech
   c43169e..2445daf  main       -> origin/main

從上面的命令中,我們可以看到遠端倉庫對主分支的更改。我們可以使用 git merge 命令將這些更改應用到我們的本地倉庫。

pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git merge origin main
Updating c43169e..2445daf
Fast-forward
 Sample.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

讓我們執行 git log 命令來檢查我們的提交歷史。

$ git log
commit 2445dafc118748a5cb53c5262b393ab0e1a9e235 (HEAD -> main, origin/main, origin/HEAD)
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date:   Tue Mar 15 22:07:11 2022 +0300
    Update Sample.txt
    First Update
commit c43169e587ab7ab996087ff460e54032e83030f0
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date:   Tue Mar 15 21:45:50 2022 +0300
    Second commit
commit b2f77108396c9ae867d8e9d69c575eda99dd1436
Author: Wachira11ke <100116527+Wachira11ke@users.noreply.github.com>
Date:   Mon Feb 21 10:00:23 2022 +0300
    Initial commit

此時,我們的本地和遠端倉庫都是同步的。讓我們看一下 git pull 命令。

什麼是 Git 拉取

讓我們回到我們的遠端倉庫並對我們的檔案進行更多更改。寫一個隨機數字並提交更改。

現在,我們的遠端倉庫比本地倉庫多了一個提交。我們可以執行 git pull 命令來更新我們的本地倉庫。

pc@JOHN MINGW64 ~/Git/Delftscopetech (main)
$ git pull origin main
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 730 bytes | 3.00 KiB/s, done.
From https://github.com/Wachira11ke/Delftscopetech
 * branch            main       -> FETCH_HEAD
   2445daf..8089f2b  main       -> origin/main
Updating 2445daf..8089f2b
Fast-forward
 Sample.txt | 1 +
 1 file changed, 1 insertion(+)

我們的本地倉庫現在與我們的遠端倉庫保持同步。我們可以得出結論,git pull 是一個複合命令 (git fetch + git merge)。

它直接獲取併合並更改。

Git Fetch 和 Git Pull 的區別

git fetch git pull
檢查對遠端倉庫所做的更改。 直接將遠端倉庫中的更改與本地倉庫合併。
獲取的更改將更新到 .git 資料夾。 直接對你的本地倉庫進行更改。
你可以在合併之前檢視提交。 你將立即更新更改。
衝突很少出現。 可能會發生合併衝突。