Git Fetch 和 Git Pull 的區別

John Wachira 2023年1月30日 2022年4月22日
  1. 什麼是 Git Fetch
  2. 什麼是 Git 拉取
  3. Git Fetch 和 Git Pull 的區別
Git Fetch 和 Git Pull 的區別

本文將討論 git pullgit 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 資料夾。 直接對你的本地倉庫進行更改。
你可以在合併之前檢視提交。 你將立即更新更改。
衝突很少出現。 可能會發生合併衝突。
Author: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

相關文章 - Git Pull