Git Fetch 和 Git Pull 的区别

本文将讨论 git pullgit fetch 命令的实际用途,以了解它们有何不同以及何时使用它们。

什么是 Git Fetch

在我们的远程仓库中,我们有如下所示的文件。

Git Fetch 和 Git Pull 的区别

请注意,我们的远程和本地仓库是同步的。让我们更改远程仓库中的 Sample.txt 文件。

在文件中随机写入一些内容并提交更改。

Git Fetch 和 Git Pull 的区别

此时,我们的远程仓库有两个提交,而我们的本地仓库有一个提交。这意味着我们的本地仓库需要更新。

在这一点上,git fetch 很方便。让我们运行一个 git log 命令来检查我们在本地仓库中的提交历史记录。

Git Fetch 和 Git Pull 的区别

我们的本地仓库没有 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 文件夹。 直接对你的本地仓库进行更改。
你可以在合并之前查看提交。 你将立即更新更改。
冲突很少出现。 可能会发生合并冲突。