当前位置: 首页 > news >正文

git的一些使用技巧(git fetch 和 git pull的区别,git merge 和 git rebase的区别)

最近闲来无聊,虽然会使用git操作,但是 git fetchgit pull 的区别,git mergegit rebase的区别只是一知半解,稍微研究一下;

git fetchgit pull 的区别

git fetch

git fetch 是将远程仓库中的改动拉到本地,但是不会主动和本地项目中的代码进行合并,需要你主动操作git merge,然后才能进行合并。

git pull

git pull 其实就等于 git fetch + git merge,它会拉取指定的分支,然后主动和本地当前的分支代码进行合并,如果产生冲突会需要你进行解决。

git mergegit rebase 的区别
git merge

git merge是将远端代码合并到本地,同时会产生一条 merge branch xxx into xxxx 的记录,同时会保留所有的提交细节。

git rebase

git rebase 则是变基,这里我采用git 官方介绍的一个实例来解释;
如下图,当我们新开发的分支 experiment 已经和master有了分叉后,我又不想使用merge的方式,那么就可以采用rebase的方式来处理。在这里插入图片描述
我们使用rebase方式可以将我们的c4提交提取出来,在c3的基础上应用一次。这种方式就叫变基。同样你也可以使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上。

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

在这里插入图片描述

它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。

其实就是将提交变得更加线性,不会有分叉出现。类似于比较提交的c3和c4后直接将c4提交挂在了c3后同时并没有生成merge操作的那条记录。

建议慎重使用rebase操作,如果其他人和你同时开发一条分支,强烈建议不要使用rebase操作

最近看到克隆代码的时候有这样的一个操作

git clone --depth=1 -branch master http://xxxxxxxx

--depth=1指的是克隆的深度。不会下载 Git 协作的历史记录,这样可以大大加快克隆的速度
depth用于指定克隆深度,为1即表示只克隆最近一次commit
适合用git clone --depth=1的场景:你只是想clone最新版本来使用或学习,而不是参与整个项目的开发工作

如果在历史协作版本中,如果有个人提交了1G的文件,然后又删掉了,那么你完整克隆的时候,这1G的文件也会被下载下来放在git的版本控制中。

假如后面我又想拉取全部的记录和分支怎么办呢?

修改.git/config文件中的
fetch = +refs/heads/master:refs/remotes/origin/master
为
fetch = +refs/heads/*:refs/remotes/origin/*
然后执行git fetch --all

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • milvus的批量向量搜索
  • 数模·插值和拟合算法
  • 【Zotero插件】Zotero Tag为文献设置阅读状态 win11下相关设置
  • 上海市计算机学会竞赛平台2022年9月月赛丙组二叉树的遍历
  • 【JavaScript】 JS 的单线程和浏览器的多进程架构
  • PHP常量
  • 图灵测试:人工智能与人类沟通的界限
  • UniVue@v1.5.0版本发布:里程碑版本
  • linux学习笔记整理: 关于linux:nginx服务器 2024/7/20;
  • Ubuntu Grub引导优化
  • 基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
  • Flowable-SpringBoot项目集成
  • idea2019版本创建JavaWeb项目并配置Tomcat步骤
  • apollo9.0park and go-adjust
  • python-爬虫实例(5):将进酒,杯莫停!
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【mysql】环境安装、服务启动、密码设置
  • 2017前端实习生面试总结
  • download使用浅析
  • javascript 总结(常用工具类的封装)
  • Odoo domain写法及运用
  • PHP CLI应用的调试原理
  • Vue ES6 Jade Scss Webpack Gulp
  • Vultr 教程目录
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 面试遇到的一些题
  • 前嗅ForeSpider教程:创建模板
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 优秀架构师必须掌握的架构思维
  • 走向全栈之MongoDB的使用
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​secrets --- 生成管理密码的安全随机数​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #{}和${}的区别是什么 -- java面试
  • #数据结构 笔记一
  • (06)金属布线——为半导体注入生命的连接
  • (3)(3.5) 遥测无线电区域条例
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (九十四)函数和二维数组
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (已解决)什么是vue导航守卫
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)Linux网络编程入门
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .JPG图片,各种压缩率下的文件尺寸
  • .Net Core 中间件与过滤器
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET开发人员必知的八个网站