Git fetch从另一个仓库下载提交、对象和引用。它从一个或多个仓库获取分支和标签。它持有仓库以及完成其历史所需的对象,以保持更新的远程跟踪分支。
git fetch 命令
git fetch命令被用来从远程跟踪的分支中提取更新。此外,我们还可以把已经推送到远程分支的更新拿到我们的本地机器上。正如我们所知,一个分支是我们仓库主代码的一个变体,所以远程跟踪分支是被设置为从远程仓库拉取和推送的分支。
如何获取Git仓库
我们可以使用带有许多参数的fetch命令来获取特定的数据。请看下面的场景来理解fetch命令的用途。
场景1:获取远程仓库
我们可以像pull命令那样用fetch命令从版本库的URL中获取完整的版本库。请看下面的输出。
语法:
$ git fetch< repository Url>
输出:
在上面的输出中,完整的版本库已经从一个远程URL中获取。
场景2:获取一个特定的分支
我们可以从存储库中获取一个特定的分支。它将只访问特定分支的元素。请看下面的输出。
语法:
$ git fetch <branch URL><branch name>
输出:
在给定的输出中,特定的分支测试已经从一个远程URL中获取。
场景3:同时获取所有分支
git fetch 命令允许从一个远程仓库同时获取所有分支。请看下面的例子。
语法:
$ git fetch -all
输出:
在上述输出中,所有的分支都是从仓库Git-Example中获取的。
场景4:同步本地仓库
假设,你的团队成员给你的远程仓库增加了一些新功能。所以,要把这些更新添加到你的本地仓库,使用git fetch命令。它的使用方法如下。
语法:
$ git fetch origin
输出:
在上面的输出中,远程版本库的新功能已经更新到我的本地系统。在这个输出中,分支test2和它的对象被添加到本地版本库。
git fetch可以从一个命名的仓库或URL中获取,也可以同时从几个仓库中获取。它可以被认为是git pull命令的安全版本。
git fetch 会下载远程内容,但不会更新你本地 repo 的工作状态。当没有指定远程服务器时,默认情况下,它将获取原点远程。
git fetch 和git pull 的差异
为了理解fetch和pull的区别,让我们知道这两个命令的相似之处。这两个命令都是用来从远程资源库下载数据的。但这两个命令的工作方式不同。比如,当你做git pull时,它从远程或中央仓库获取所有的变化,并使其在你的本地仓库的相应分支中可用。当你做git fetch时,它从远程仓库获取所有的变化,并将其存储在本地仓库的一个单独分支中。你可以通过合并将这些变化反映在你的相应分支中。
所以基本上。
git pull = git fetch + git merge
Git Fetch vs. Pull
这两个命令的一些主要区别如下。
git fetch | git pull |
---|---|
Fetch只从远程存储库下载新数据 | Pull是用来用远程服务器的最新修改来更新你当前的HEAD分支 |
Fetch是用来获取一个远程仓库中发生的所有事情的新视图 | Pull下载新的数据并直接整合到你当前的工作副本文件中 |
Fetch从不操纵或破坏数据 | Pull下载数据并将其与当前工作文件整合 |
它可以保护你的代码不受合并冲突的影响 | 在git pull中,有更多的机会产生合并冲突 |
在一个拉来的版本库上,最好使用git fetch命令和git merge命令 | 如果你已经拉了任何一个仓库,使用git pull并不是一个很好的选择 |