git fetch与git pull的区别详解

 更新时间:2020年07月21日 15:32:41   作者:R-H-R  
这篇文章主要介绍了git fetch与git pull的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

git fetch和git pull都可以将远端仓库更新至本地那么他们之间有何区别?想要弄清楚这个问题有有几个概念不得不提。

FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。 

commit-id:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程仓库。

有了以上的概念再来说说git fetch

git fetch:这将更新git remote 中所有的远程仓库所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中
git fetch更新远程仓库的方式如下:

git fetch origin master:tmp 
//在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff tmp 
//来比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp
//合并temp分支到本地的master分支
git branch -d temp
//如果不想保留temp分支 可以用这步删除

(1)如果直接使用git fetch,则步骤如下:

  • 创建并更新本 地远程分支。即创建并更新origin/xxx 分支,拉取代码到origin/xxx分支上。
  • 在FETCH_HEAD中设定当前分支-origin/当前分支对应,如直接到时候git merge就可以将origin/abc合并到abc分支上。

(2)git fetch origin
只是手动指定了要fetch的remote。在不指定分支时通常默认为master

(3)git fetch origin dev 
指定远程remote和FETCH_HEAD,并且只拉取该分支的提交。

这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。

如果你使用git clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库(git remote -v)并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。

如果你有一个分支设置为跟踪一个远程分支,可以使用 git pull命令来自动的抓取然后合并远程分支到当前分支。 这对你来说可能是一个更简单或更舒服的工作流程;默认情况下,git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)。 运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。

git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。所以可以认为git pull是git fetch和git merge两个步骤的结合。

git pull的用法如下:

git pull <远程主机名> <远程分支名>:<本地分支名>
//取回远程主机某个分支的更新,再与本地的指定分支合并。

因此,与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合并git fetch是更好的选择。效果相同时git pull将更为快捷。

注:用git pull更新代码的话就比较简单暴力了但是根据commit ID来看的话,他们实际的实现原理是不一样的,所以不要用git pull,用git fetch和git merge更加安全。

到此这篇关于git fetch与git pull的区别详解的文章就介绍到这了,更多相关git fetch与git pull区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 代码着色之SyntaxHighlighter项目(最流行的代码高亮)

    代码着色之SyntaxHighlighter项目(最流行的代码高亮)

    dp.SyntaxHighlighter。它可以在网页中对各种程序源代码语法进行加亮显示。支持当前流 行的各种编程语言:C#、CSS、C++、Delphi、Java、JavaScript、PHP、Python、Ruby、SQL、Visual Basic、XML / HTML等
    2014-04-04
  • Git拒绝推送(Push Rejected)问题全解析与解决方案

    Git拒绝推送(Push Rejected)问题全解析与解决方案

    在使用Git进行协作开发时,拒绝推送(push rejected) 是一个高频且令人困扰的问题,当我们满怀信心地执行git push,却收到一连串报错信息,本文将围绕Git拒绝推送的常见场景、底层原因及系统化解决方案 展开,结合实际开发经验进行深入分析,需要的朋友可以参考下
    2026-01-01
  • 如何使用clion中配置ROS工程

    如何使用clion中配置ROS工程

    这篇文章主要介绍了如何使用clion中配置ROS工程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • VSCode中ESLint插件修复以及配置教程

    VSCode中ESLint插件修复以及配置教程

    最近为vsocde配置Eslint出现了许多问题,我解决问题之后,觉得还是把这些坑都写清楚,方便学习前端的初学者,下面这篇文章主要给大家介绍了关于VSCode中ESLint插件修复以及配置教程的相关资料,需要的朋友可以参考下
    2022-12-12
  • vscode使用git的配置教程

    vscode使用git的配置教程

    在vscode中使用Git可以帮助我们更方便地管理代码,进行版本控制,下面通过本文给大家介绍vscode使用git的配置教程,感兴趣的朋友一起看看吧
    2024-08-08
  • 使用IDEA回滚某次提交的代码步骤

    使用IDEA回滚某次提交的代码步骤

    这篇文章主要介绍了使用IDEA回滚某次提交的代码步骤,在平时的开发中,不小心commit了错误的代码怎么办,就需要用到回滚了,需要的朋友可以参考下
    2023-03-03
  • vscode如何设置默认打开的浏览器为Chrome

    vscode如何设置默认打开的浏览器为Chrome

    这篇文章主要介绍了vscode如何设置默认打开的浏览器为Chrome,需要的朋友可以参考下
    2020-08-08
  • 解析scratch3.0二次开发之scratch-blocks免编译修改问题

    解析scratch3.0二次开发之scratch-blocks免编译修改问题

    大家在使用scratch-blocks编译时会遇到scratch-gui依赖的scratch-blocks模块在安装的时候编译会报错,针对这个问题我们该怎么解决呢,下面小编给大家带来了scratch3.0二次开发之scratch-blocks免编译修改方法,感兴趣的朋友一起看看吧
    2021-08-08
  • 微信 小程序开发环境搭建详细介绍

    微信 小程序开发环境搭建详细介绍

    这篇文章主要介绍了微信 小程序开发环境搭建详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • 如何使用Idea进行合并代码分支

    如何使用Idea进行合并代码分支

    这篇文章主要介绍了如何使用Idea进行合并代码分支,在平时的开发中大多是协作开发的,代码统一放在一起,那么需要代码合并时该怎么操作,需要的朋友可以参考下
    2023-03-03

最新评论