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