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