git rebase详解(图解+最简单示例,一次就懂)_风中一匹狼v的博客-CSDN博客_git rebase


本站和网页 https://blog.csdn.net/weixin_42310154/article/details/119004977 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

git rebase详解(图解+最简单示例,一次就懂)_风中一匹狼v的博客-CSDN博客_git rebase
git rebase详解(图解+最简单示例,一次就懂)
风中一匹狼v
已于 2022-11-03 11:51:08 修改
222719
收藏
1112
分类专栏:
Git
文章标签:
git
于 2021-07-26 17:14:38 首次发布
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42310154/article/details/119004977
版权
Git
专栏收录该内容
8 篇文章
41 订阅
订阅专栏
引言
网上有太多讲rebase和merge的文章,但大多都是复制粘贴没有自己的理解,而且很多博客的例子写的过于复杂,让人没兴趣看下去。根据奥卡姆剃刀原则,本文举最简单例子,大白话几句就让你快速掌握rebase的核心原理和用法。
本博客将持续修订更新,看完如果还是有疑问,可以评论区留言,我解释到你彻底搞懂为止! 最新更新:2022.11.3
一、提交节点图解
首先通过简单的提交节点图解感受一下rebase在干什么
构造两个分支master和feature,其中feature是在提交点B处从master上拉出的分支
master上有一个新提交M,feature上有两个新提交C和D 此时我们切换到feature分支上,执行rebase命令,相当于是想要把master分支合并到feature分支(这一步的场景就可以类比为我们在自己的分支feature上开发了一段时间了,准备从主干master上拉一下最新改动。模拟了git pull --rebase的情形)
# 这两条命令等价于git rebase master feature
git checkout feature
git rebase master
下图为变基后的提交节点图,解释一下其工作原理:
feature:待变基分支、当前分支master:基分支、目标分支
官方原文解释(如果觉得看不懂可以直接看下一段):当执行rebase操作时,git会从两个分支的共同祖先开始提取待变基分支上的修改,然后将待变基分支指向基分支的最新提交,最后将刚才提取的修改应用到基分支的最新提交的后面。
结合例子解释:当在feature分支上执行git rebase master时,git会从master和featuer的共同祖先B开始提取feature分支上的修改,也就是C和D两个提交,先提取到。然后将feature分支指向master分支的最新提交上,也就是M。最后把提取的C和D接到M后面,注意这里的接法,官方没说清楚,实际是会依次拿M和C、D内容分别比较,处理冲突后生成新的C’和D’。一定注意,这里新C’、D’和之前的C、D已经不一样了,是我们处理冲突后的新内容,feature指针自然最后也是指向D’
通俗解释(重要!!):rebase,变基,可以直接理解为改变基底。feature分支是基于master分支的B拉出来的分支,feature的基底是B。而master在B之后有新的提交,就相当于此时要用master上新的提交来作为feature分支的新基底。实际操作为把B之后feature的提交先暂存下来,然后删掉原来这些提交,再找到master的最新提交位置,把存下来的提交再接上去(接上去是逐个和新基底处理冲突的过程),如此feature分支的基底就相当于变成了M而不是原来的B了。(注意,如果master上在B以后没有新提交,那么就还是用原来的B作为基,rebase操作相当于无效,此时和git merge就基本没区别了,差异只在于git merge会多一条记录Merge操作的提交记录)
上面的例子可抽象为如下实际工作场景:张三从B拉了代码进行开发,目前提交了两次,开发到D了;李四也从B拉出来开发了并且开发完毕,他提交到了M,然后合到主干上了。此时张三想拉下最新代码,于是他在feature分支上执行了git rebase master,即把master分支给rebase过来,由于李四更早开发完并合了主干,如此就相当于张三是基于李四的最新提交M进行的开发了。
二、实际git提交示例
我这里严格按照上面的图解,构造了实际的git提交示例(注意,这里重新贴了新图,之前的图逻辑上还是不够清晰)
如下图所示,ABM是master分支线,ABCD是feature分支线。 此时,在feature分支上执行git rebase master后,会提示有冲突,这里是关键,之前没有把这个细节说清楚。冲突其实也简单,因为我们要生成新的C’和D’嘛,那C’的内容如何得到呢?照搬C的?当然不是,C’的内容就是C和M两个节点的内容合并的结果,D’的内容就是D和M两个节点的内容合并的结果。我们手动处理冲突后,执行如下命令即可:
# 先处理完C,会继续报D的冲突,所以下面命令一共会执行两次
git add file
git rebase --continue
变基完成以后如下图所示,ABM还是没变化,ABMC’D’是rebase完成后的feature节点图,私以为讲到这里就还是比较清楚了
三、推荐使用场景
搞来搞去那么多,这其实是最重要的。不同公司,不同情况有不同使用场景,不过大部分情况推荐如下:
自己单机的时候,拉公共分支最新代码的时候使用rebase,也就是git pull -r或git pull --rebase。这样的好处很明显,提交记录会比较简洁。但有个缺点就是rebase以后我就不知道我的当前分支最早是从哪个分支拉出来的了,因为基底变了嘛,所以看个人需求了。总体来说,即使是单机也不建议使用,确实有点绕啊QAQ往公共分支上合代码的时候,使用merge。如果使用rebase,那么其他开发人员想看主分支的历史,就不是原来的历史了,历史已经被你篡改了。举个例子解释下,比如张三和李四从共同的节点拉出来开发,张三先开发完提交了两次然后merge上去了,李四后来开发完如果rebase上去(注意李四需要切换到自己本地的主分支,假设先pull了张三的最新改动下来,然后执行<git rebase 李四的开发分支>,然后再git push到远端),则李四的新提交变成了张三的新提交的新基底,本来李四的提交是最新的,结果最新的提交显示反而是张三的,就乱套了。正因如此,大部分公司其实会禁用rebase,不管是拉代码还是push代码统一都使用merge,虽然会多出无意义的一条提交记录“Merge … to …”,但至少能清楚地知道主线上谁合了的代码以及他们合代码的时间先后顺序
四、总结
无论是个人开发,还是公司协作开发,只要没有特殊需求,用merge准没错!!
参考文章:图解 Git 基本命令 merge 和 rebase
风中一匹狼v
关注
关注
540
点赞
1112
收藏
打赏
121
评论
git rebase详解(图解+最简单示例,一次就懂)
在拉公共分支最新代码的时候使用rebase,也就是git pull -r但往公共分支上合代码的时候,使用merge
复制链接
扫一扫
专栏目录
Git rebase超详细解读
Monsterof的博客
05-31
1346
1. Git Rebase的介绍
我们都知道,git rebase可以实现git节点或者分支的合并,但是,真正涉及到为什么要使用git rebase,它的好处又是什么等一些比较实际的问题,很多同学就搞不清楚了,本文聚焦于git rebase,着重讨论该命令的两种妙用,来帮助大家直观的理解这条命令。
写在前面:如果你的分支不只有你在进行开发,那么git-rebase可能会导致提交记录的丢失,但是如果你是在自己的分支上进行开发,那么这无疑是一个很棒的选择。
2. Git Rebase作用一:合并本地的多条提交(
Git rebase详解(图解+最简单示例,一次就懂)
Java搜索工程技术栈
06-06
596
网上有太多讲rebase和merge的文章,但大多都是复制粘贴没有自己的理解,而且很多博客的例子写的过于复杂,让人没兴趣看下去。本文举最简洁的例子,大白话几句就让你快速掌握rebase的核心原理和用法。首先通过简单的提交节点图解感受一下rebase在干什么?两个分支master和feature,其中feature是在提交点B处从master上拉出的分支,master上有一个新提交M,feature上有两个新提交C和D此时切换到feature分支上,执行如下命令,相当于是想要把master分支合并到featu
评论 121
您还未登录,请先
登录
后发表或查看评论
git merge 与 git rebase的区别
Michael’s Blog
01-19
6万+
前言
其实这个问题困扰我有一段时间,相信也有人和我一样有这个困扰,网上已有很多这种解释了,但是要么就是无图,要么就是解释的很乱,没太看懂,经过自己对git的使用,加上向同事请教,算是理解了这个问题,所以写下来分享一下,我尽量详细说明
merge与rebase的区别
假设我们有如下图一所示仓库,该仓库有master和develop两个分支,且develop是在(3.added merge.tx
git rebase的两种用法(最全)
small_white_123的博客
11-28
4万+
rebase的两种用法合并当前分支的多个commit记录避免出现分叉合并
合并当前分支的多个commit记录
你可能会出现过以下提交记录:
$ git log --pretty=format:'%h: %s'
d2399da: feat: modify c
0134695: feat: modify b
eb63848: feat: modify b
51c0bca: feat: modify b
4cb600e: feat: modify a
d29f331: Initial commit
此时 中间的
Git 图解剖析
weixin_33920401的博客
06-27
66
  git中文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。 索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一...
git rebase详解
郊眠寺
05-27
2042
首先通过简单的提交节点图解感受一下rebase在干什么?
提交节点图解
两个分支master和feature,其中feature是在提交点B处从master上拉出的分支,master上有一个新提交M,feature上有两个新提交C和D。
此时切换到feature分支上,执行如下命令,相当于是想要把master分支合并到feature分支。
git checkout feature
git rebase master // 这两条命令等价于git rebase master feature
下图为变基
【git】使用rebase 进行分支合并 的初步接触
weixin_44002043的博客
04-26
410
需求提出
进行需求不同的开发,现在需要将我的分支怼到原有分支中。但是我对分支的合并一直有点迷糊,大佬推荐我使用rebase。
就像这样:
答疑解惑
git rebase详解(图解+最简单示例,一次就懂)
从我的开源分支rebase一哈即可,处理本地的一些冲突即可!
git rebase origin/feature/v1.10.0
...
图解 Git 工作原理,看了秒懂!
陈宇明
03-29
179
来自:分布式实验室链接:marklodato.github.io/visual-git-guide/index-zh-cn.html 正文 本文图解Git中的最常用命令。...
图解Git,从原理上搞懂
里奥ii的博客
06-04
102
基本用法上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。git add files 把当前文件放入暂存区域。git commit 给暂存区域生成快照并提交。git reset -- files 用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修...
git rebase 命令的使用方法
redrose2100的博客
01-09
652
本文详细介绍了git rebase命令的详细使用场景以及详细的使用方法
如何破解周围WiFi,查看密码
最新发布
灰太狼-铜豌豆的博客
08-06
6979
如何破解周围WiFi,查看密码
git在工作中正确的使用方式----git rebase篇
热门推荐
nrsc
01-02
24万+
1.深入理解git rebase
详细图解Git工作原理!
AI蜗牛车
04-30
137
本文图解 Git 中的最常用命令。如果你稍微理解 Git 的工作原理,这篇文章能够让你理解的更透彻。原文链接:https://marklodato.github.io/visual-git...
图解Git工作原理
Pert的博客
10-07
75
图解Git工作原理
**Git 是程序员学习和工作都离不开发工具,也是非程序员好用的文档版本管理工具,Git 常用命令总结可以另一篇干货教程:
本文图解 Git 中的最常用命令。如果你稍微理解 Git 的工作原理,这篇文章能够让你理解的更透彻。
基本用法
上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。
git add files 把当前文件放入暂存区域。
git commit 给暂存区域生成快照并提交。
git reset – files 用来撤销最后一次git add file.
图解Git详解命令
weixin_34293141的博客
06-08
46
2019独角兽企业重金招聘Python工程师标准>>>
...
图解git基本使用
赵英超的博客
08-28
1797
图解Git
此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。 如果你想知道这个站点怎样产生,请前往GitHub repository。
git配置文件
[user]
name = zhaoyingchao
email = zyc@alibaba-inc.com
[alias]
st = status -sb
co = checkout
...
图解 Git 各种用法,简单明了,一目了然!
LuckyWinty的博客
08-05
218
点击上方前端Q,关注公众号回复加群,加入前端Q技术交流群来源:marklodato.github.io/visual-git-guide/index-zh-cn.html基本用法上面的四...
图解 Git 工作原理
emprere的博客
05-13
203
上一篇:3600万中国人在抖音“上清华”链接:http://marklodato.github.io/visual-git-guide/index-zh-cn.html
本文图解Git中的...
图解 Git 使用
静静是我女朋友
10-18
1051
此页图解git中的最常用命令。如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻。 如果你想知道这个站点怎样产生,请前往https://github.com/MarkLodato/visual-git-guide
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
风中一匹狼v
CSDN认证博客专家
CSDN认证企业博客
码龄5年
北京航空航天大学
50
原创
8万+
周排名
155万+
总排名
43万+
访问
等级
2097
积分
154
粉丝
940
获赞
200
评论
2861
收藏
私信
关注
热门文章
git rebase详解(图解+最简单示例,一次就懂)
222142
一文读懂Faster RCNN(大白话,超详细解析)
65443
Github配置ssh key的步骤(大白话+包含原理解释)
31524
Git常见报错:Updates were rejected because the tip of your current branch is behind
31256
Git常见报错:Your local changes to the following files would be overwritten by merge
25117
分类专栏
Git
8篇
面试
1篇
数据库
2篇
计算机网络
操作系统
LeetCode常用小技巧
Java知识点
11篇
各类环境搭建汇总
3篇
Python跑模型常用库方法
1篇
网课笔记
17篇
深度学习知识
2篇
最新评论
几张图彻底理解Java字符串常量池、String.intern()(非复制粘贴,准确解释)
火红的西瓜:
你咋这么厉害啊
git rebase详解(图解+最简单示例,一次就懂)
SSSuperLeo:
大哥 张三/李四 123检出 开发提交两次 远端 12345 李四pull master变成12345 rebase master 那不就是1234567吗?
git rebase详解(图解+最简单示例,一次就懂)
今天六级过了吗?:
很牛!讲的特别通透!感谢分享!
几张图彻底理解Java字符串常量池、String.intern()(非复制粘贴,准确解释)
猪猪不放弃:
写的确实好,图画的一眼就看懂
git rebase详解(图解+最简单示例,一次就懂)
风中一匹狼v:
第一个图例中,原来的基底是B,新的是M(张三提交的)
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
字节面试算法题:用集合中的数凑小于target的最大数(Java实现,各类用例均通过)
Anaconda3常用命令、清华源配置
数据库索引高频面试题梳理
2022年5篇
2021年27篇
2020年3篇
2019年18篇
目录
目录
分类专栏
Git
8篇
面试
1篇
数据库
2篇
计算机网络
操作系统
LeetCode常用小技巧
Java知识点
11篇
各类环境搭建汇总
3篇
Python跑模型常用库方法
1篇
网课笔记
17篇
深度学习知识
2篇
目录
评论 121
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
风中一匹狼v
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值