git:详解git rebase命令

news2024/11/26 11:50:05

背景

今天无意中打开 git 官网,发现 git 命令还是很多的,然而我们常用的就那几个,今天来学习一个也不怎么常用的命令 rebase
官网链接
在这里插入图片描述

都说学一个东西最好的方式就是读他的 官方文档,这里我读了一遍,把一些核心的地方整理成这篇 blog

为什么要出现git rebase

首先可以看到,rebase 是属于 Patching 这一类下面的,也就是补丁
在这里插入图片描述

我们平常协同开发基本上都是基于 master 自己拉一个分支,然后发布的时候把各自的分支合并到 master 进行发布,这样做有一些的缺陷:

  1. 当你 merge 了一个比较大的改动,时间线拖得比较长,这时候你 merge 到 master 后,看 master 的提交记录,会有很多别人的提交记录和你的混在一起。

命令

全部命令:

git rebase [-i | --interactive] [<options>] [--exec <cmd>]
	[--onto <newbase> | --keep-base] [<upstream> [<branch>]]
	
git rebase [-i | --interactive] [<options>] [--exec <cmd>] [--onto <newbase>]
	--root [<branch>]
	
git rebase (--continue | --skip | --abort | --quit | --edit-todo | --show-current-patch)

常用命令:

发起合并

# 比如要把topic的分支变基到master上,则先切到topic,然后执行
git rebase master
# 或者
git rebase master topic
git pull master --rebase
# 分解为如下,也就是把远程的master作为基地
git fetch master
git rebase master

解决冲突

# 放弃合并,回到rebase操作之前的状态
git rebase --abort
# 则会将引起冲突的commits丢弃掉(慎用!!)
git rebase --skip
# 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。
git rebase --continue

合并提交

# 将多个提交合并为一次提交
git rebase -i HEAD~2

作用一:分支合并

按照这个建立分支

      A---B---C topic
     /
D---E---F---G master

在这里插入图片描述
在 topic 分支执行 git rebase mater,如果没有冲突,则会变成这样
在这里插入图片描述

在这里插入图片描述

作用二:合并多个提交

必须在你的 commit push 到远端之前使用

git rebase -i HEAD~2

这里的 HEAD~2 代表回退两个commit,具体可以看 这篇文章

reabase原理

  1. git 会把 feature1 分支里面的每个 commit 取消掉;
  2. 把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;
  3. 把 feature1 分支更新到最新的 master 分支;
  4. 把上面保存的 patch 文件应用到 feature1 分支上。

冲突处理

执行 rebase 后可能会出现冲突,解决冲突后

git add .
# 注意,这里无需执行 git commit
git rebase --continue

这样 git 会继续应用余下的 patch 补丁文件,所以有可能你会处理多次冲突。
在任何时候,我们都可以用 --abort 参数来终止 rebase 的行动

git rebase --abort

优缺点

优点:

  • 分支干净

缺点:

  • 篡改记录

正因如此,大部分公司其实会禁用rebase,不管是拉代码还是push代码统一都使用merge,虽然会多出无意义的一条提交记录“Merge … to …”,但至少能清楚地知道主线上谁合了的代码以及他们合代码的时间先后顺序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读书思考:步步惊心的《技术陷阱》

《技术陷阱》这本书450页&#xff0c;43万字之巨&#xff0c;信息量密密麻麻&#xff0c;采集的资料极其丰富&#xff0c;复习了一遍大停滞、大分流、大平衡、大逆转时代&#xff0c;并展望未来。看完了有很多想法&#xff0c;随手写了下来&#xff0c;希望不是蹭热点。&#x…

vue 最详细教学篇(一)

文章目录前言前景Vue 的长期技术支持 (LTS)、终止支持 (EOL) 及其延长版服务学习vue 要掌握那些技能-为什么学习 vue走进vueHello World 起手提示&#xff1a;示例&#xff1a;示例解析编辑器 VSCodevsCode 插件正式使用 vue.js要使用 vue 就绕不开生命周期 下面是生命周期图&a…

全国青少年编程等级考试scratch一级真题2022年9月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手1点击绿旗&#xff0c;下列哪个选项可以实现播放马叫声并在声音全部播放完后&#xff0c;…

Java常见数据结构的排序与遍历(包括数组,List,Map)

数组遍历与排序 数组定义 //定义 int a[] new int[5]int[] a new int[5];//带初始值定义 int b[] {1,2,3,4,5};赋值 //定义时赋值 int b[] {1,2,3,4,5};//引用赋值 a[6] 1 a[9] 9 //未赋值为空取值 //通过下表取值&#xff0c;从0开始 b[1] 1 b[2] 2遍历 Test p…

C语言操作符详解 一针见血!

目录算数操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用、函数调用和结构成员表达式求值11.1 隐式类型转换算数操作符&#x1f4ad; 注意/ 除法 --得到的是商% 取模&#xff08;取余&#xff09;--得到的是余数如果除法操作符…

CentOS 根路径下各个目录的作用及介绍

前言 很多小伙伴刚刚开始接触Linux系统时肯定和我一样&#xff0c;都很懵&#xff0c;黑黢黢的界面&#xff0c;一个个目录&#xff0c;没有图形化界面&#xff0c;看着难受&#xff0c;多接触了一些后会好受一些&#xff0c;不过&#xff0c;对各个目录的了解肯定也很基础&am…

若依框架---PageHelper分页(十)

在前几天的文章中&#xff0c;我们介绍了PageHelper的分页方法&#xff0c;研读代码定位到了ExecutorUtil.pageQuery(...)方法&#xff0c;并阅读到了其中的部分代码。 今天我们将看到重要的SQL修改代码。 getPageSql 我们接着看代码&#xff1a; if (!dialect.beforePage(…

2023爬虫学习笔记 -- 批量爬取图片

一、目标网址http://img.itlun.cn/uploads/allimg/180703/1-1PF3160531-lp.jpg二、右击图片获取图片地址http://img.itlun.cn/uploads/allimg/180703/1-1PF3160531-lp.jpg三、以二进制形式返回响应数据响应requests.get(网页,headers头) 响应内容响应.content四、存储二进制数据…

SpringBoot整合Mybatis的核心原理

0. 前言&#xff1a;1. 自动配置类MybatisAutoConfiguration&#xff1a;1.1. SqlSessionFactory的生成&#xff1a;1.2. Mapper的扫描和代理生成&#xff1a;1.2.1. MapperScannerConfigurer1.2.2. MapperFactoryBean1.2.3. getMapper生成代理对象2. 小结&#xff1a;0. 前言&…

Vue2仿网易云风格音乐播放器(附源码)

Vue2仿网易云风格音乐播放器1、整体效果2、使用技术3、实现内容4、源码5、使用图片1、整体效果 2、使用技术 使用了HTML5 CSS3进行页面布局及美化使用Vue2进行数据渲染与页面交互使用Axios发送http请求获取数据 3、实现内容 实现了搜索歌曲功能&#xff0c;输入歌手或歌曲关…

如果企业遭受到攻击应该进行怎样的处理

声明 本文是学习2018勒索病毒白皮书政企篇. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 政企遭遇勒索攻击分析 由于感染政企客户更有可能获得赎金&#xff0c;再加上勒索病毒本身也以服务器定向攻击为主&#xff0c;所以&#xff0c;2018年政企客…

构建工具tsup入门第三部分

&#x1f384;Hi~ 大家好&#xff0c;我是小鑫同学&#xff0c;一位长期从事前端开发的编程爱好者&#xff0c;我将使用更为实用的案例输出更多的编程知识&#xff0c;同时我信奉分享是成长的唯一捷径&#xff0c;在这里也希望我的每一篇文章都能成为你技术落地的参考~ 目录&am…

“慌不择路”周鸿祎,昔日大炮忙跟风【短评】

文|智能相对论作者| 凯文2月7日下午360经历两次急速拉升后涨停了&#xff0c;作为一个被套牢的股民&#xff0c;我是羡慕的&#xff0c;但理智告诉我&#xff0c;360的后续难以为继。360涨停的原因很简单&#xff0c;只因其在投资者互动平台上对类ChatGPT技术的布局做出了回应&…

安装Sentinel控制台与初始化演示工程

目录 一、Sentinel 二、安装Sentinel控制台 &#xff08;一&#xff09;sentinel组件由2部分构成 &#xff08;二&#xff09;安装步骤 三、初始化演示工程 四、流控模式 &#xff08;一&#xff09;快速失败 &#xff08;二&#xff09;关联资源 &#xff08;三&…

第四章——随机变量的数字特征

文章目录1、数字特征的定义2、数学期望&#xff08;均值&#xff09;2.1、数学期望的定义及性质2.1.1、定义2.1.2、性质2.2、数学期望相关例题2.3、Yg(X)的数学期望2.4、Zg(X,Y)的数学期望2.5、随机变量函数的数学期望例题3、方差3.1、方差的定义与性质3.2、相关例题3.3、切比雪…

3.2 埃尔米特转置

定义 对于复矩阵&#xff0c;转置又不一样&#xff0c;常见的操作是共轭转置&#xff0c;也叫埃尔米特转置Hermitian transpose。埃尔米特转置就是对矩阵先共轭&#xff0c;再转置&#xff0c;一般来说用三种符号表示埃尔米特转置&#xff1a; 第一种符号是AHA^HAH&#xff0c…

热门盘点 | 10款评分最高的项目管理工具

项目管理软件可以让项目经理及时掌握项目进展可把复杂的任务分解简单帮助项目经理及时了解整个团队进展随着现代项目需求日趋复杂和个性选一个好的项目管理软件还是很有必要的① PingCode国内研发项目管理软件PingCode&#xff0c;它是国内软件研发项目榜单中评分最高的项目管理…

达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

达梦实现高可用性的实现&#xff08;failover功能/负载均衡/虚拟ip透明切换&#xff09;一&#xff1a;failover功能&#xff1a;基于守护进程和监视器两个内在工具实现守护进程监视器&#xff1a;数据守护和读写分离集群共享存储集群二&#xff1a;负载均衡&#xff1a;基于jd…

在线支付系列【22】微信支付实战篇之集成服务商API

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言1. 环境搭建2. 特约商户进件3. 统一下单总结前言 在上篇文档中&#xff0c;我们做好了接入前准备工作&#xff0c;接下来使用开源框架集成服务商相关API。 一个简单的支付系统完成支付流程…

火爆全网的ChatGPT使用教程

最近&#xff0c;大家有没有被ChatGPT所刷屏呢&#xff1f;记得之前元宇宙刚出来的时候&#xff0c;也是极其火爆&#xff0c;虽说这二者是不同的性质&#xff0c;但是都是代表着当下互联网发展之迅速。 一、什么是ChatGPT 百度百科中给出的解释&#xff1a;ChatGPT&#xff0…