GIT远程同步: fetch VS pull
郝伟 2022/03/16
GIT数据的下载和同步是日常版本管理中非常重要步骤,因为在系统本地存储库中查看的远程数据只是一个快照。该数据与上次使用 fetch 和 full 从远程直接下载新数据时一样是最新的。当检查远程分支和提交时,这些信息非常重要。
Git Fetch 和 Git Pull 的主要区别在于 git fetch 是指示本地 git 从源中恢复最新元数据信息的命令。它不传输任何文件。它更像是检查数据以查找更改是否可用,而 git pull 做同样的事情,同时将所有更改拉到的存储库
git fetch 是将远程存储库的文件、快照和引用下载到本地存储库的命令。此命令下载远程数据而不更新本地存储库的当前工作状态,让的工作保持原样,并且使用命令 gitcheckout 显式检查正在获取的内容。
另一方面,git 拉取一个命令,该命令从远程存储库中获取和下载数据,同时更新本地存储库以匹配获取的数据。git pulls 命令是 git fetch 和 git merge 的组合,这就是为什么它最初执行 git fetch 命令的功能,然后合并提交并创建新的合并提交。
git fetch<remote><branch>git pull <branch>命令 git fetch 是用于将所有类型的内容或数据从其他服务器的项目下载到本地系统的命令。系统中已经存在的本地代码不会被覆盖。此命令通常与 git reset 命令一起使用,以使用远程存储库更新本地存储库。在使用 Git 版本的控制系统时,从远程存储库获取数据是至关重要的一步。
获取过程允许用户将内容和其他数据从另一个存储库恢复到他们的本地系统,并且还允许跟踪远程存储库中随着时间的推移所做的更改。例如,假设已经设置了一个远程存储库,该存储库收集了项目所需的所有主要代码。的员工刚刚通知,他们在远程存储库中进行了一些需要查看的更改。要检索的员工所做的更改并将其保存到的系统中,可以使用以下命令:git fetch remote master, 此命令将允许将主分支上的所有代码恢复到本地存储库。应用此命令后,现在将主分支的所有代码保存到本地系统。
git pull 命令是一个在单个命令中服务于 git fetch 和 git merge 命令的命令。术语 pulls 本身解释了使用此命令的用户正在尝试从存储库中提取数据或内容。git pull 在没有指示或请求用户许可的情况下,执行 git fetch 功能并组合更改而不让用户知道它,只知道结果,即该命令的操作是否成功以及警告等用户知道.
Git Pull 也被称为有风险的命令,因为不通知它会混淆那些你不想合并的更改。与 Git Fetch 不同,Git Pull 假设存储库中发生的任何更改都需要合并,这会导致称为合并冲突的副作用。git pull 主要用于一个人在一个分支上工作的时候。当发现他们不需要再次查看更改时,可以直接使用 git pull 命令将所有数据直接拉到的存储库中。
就像其他 Git 命令一样,Git Pull 也提供了一些快速选项来帮助更有效地使用命令。no-commit 是 git pull 提供的选项,它会拉取更改,但不会列出合并的提交。rebase 是另一个选项,它记录提交的合并历史。
git fetch <remote> <branch>,而 git pull 使用命令:git pull <branch>。总之,我们可以说 git fetch 和 git pull 是与远程存储库交互时频繁使用的关键命令。当我们想要检查或查看远程存储库中可能进行的更改而不影响其原始内容时,我们可以为此执行 git fetch 命令。而当我们想将远程仓库的最新提交与本地仓库的提交结合起来,我们可以使用 git pull 命令来达到这个目的。Git fetch 和 git pull 都有自己的优势和用例, git fetch 命令被认为是比 git pull 命令更安全的选择。
尽量不要用 git pull, 而是使用 git fetch 和 git merge。git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。
[1] GIT - THERE BE DRAGONS! (Presentation), https://indico.cern.ch/event/852088/contributions/3583318/attachments/1917483/3170717/GitTalk.pdf
https://books.google.co.in/books?hl=en&lr=&id=hzozEAAAQBAJ&oi=fnd&pg=PT11&dq=git+fetch+and+git+pull&ots=rAblUnBYwv&sig=6Oz4gurXkCH2rJU0xqiIOsqpE3Q
[2] Difference Between Git Fetch and Git Pull (With Table), https://askanydifference.com/difference-between-git-fetch-and-git-pull/
[3] 详解git pull和git fetch的区别, https://blog.csdn.net/weixin_41975655/article/details/82887273