Git中的变基(Rebase)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

Git中的变基(Rebase)

背景介绍

VCS(版本管理系统)是我们开发中每天都会打交道的基础开发系统,当前使用最为广泛的非SVN和GIT两者莫属,两者分别代表了CVCS(集中式版本管理系统)和DVCS(分布式版本管理系统)。两者具体的区别网上有大量的文档,可以自行google和bing。

作者之前一直使用的是SVN,既CVCS的一种,这种系统的操作较为简单明了(也可能是之前习惯了)。而现在转为使用Git后,由于Git中引入了本地仓库、暂存区,使得开发中的常用操作从两点(远程仓库、工作空间)间的操作扩展为三点(远程仓库、本地仓库、工作空间)间的操作,大大增加了代码管理的空间。

本文中将要介绍的变基就是之前CVCS限于架构无法实现的一种代码分支管理策略(Git的基本操作请自行google、bing)。本文中的介绍来源于已有文档和作者个人的理解,如有不当之处请指出,谢谢!

Rebase 和 Merge

在介绍一个新概念、技术时从一个大家熟知的概念、技术入手更容易使大家理解。变基(既Rebase,后续统一使用变基指代)相似的概念就是Merge,也可以说变基是从Merge演化而来。

众所周知,Merge是用来合并分支的,那么变基呢?变基的结果一般和Merge一样,但是变基实现方式并不是合并,而是重放,既将分支A的提交在分支B上重新提交一遍。变基的一般命令为:

git rebase baseBranch [rebaseBranch]

意为将rebaseBranch分支的提交提取出来,在baseBranch分支上重放(提交内容相同,但是校验和不同)。其中rebaseBranch可以省略,省略后既使用当前分支的提交在baseBranch分支上重放。

变基和Merge**最大的不同是使用git log查看提交历史**,使用Merge的提交历史如下图(图片来源于progit.pdf):

merge

而使用变基的提交历史则为(图片来源于progit.pdf):

rebase

可以看出,使用变基可以使提交历史为线性提交。这样做的好处下文会介绍。

变基的场景

从上文我们可以得出结论,变基最大的特点是可以使提交历史称为线性,那么这么做的好处或者适用于什么场景呢?在给出结论之前,我们先要明确,或者牢记一点:

变基要在自己本地仓库中拉出来的分支使用,不要对本地仓库外有副本的分支执行变基

也就是说变基本质上是一个完全在本地仓库进行的操作(这是DCSV特有的),我们往往是在本地执行完成变基操作后,再向远程仓库push。这样做,避免了其他合作者的处理冲突,其他合作者只需要利用git merge自身的fast-forward即可完成Merge的工作。

综上,变基适用于多人线上合作开发的场景,避免其他合作者处理冲突,例如github上开源项目的维护。公司内部因为地理上、组织上的便利性,可以酌情使用变基。

参考资料

  1. http://blog.codingplayboy.com/2017/04/14/git_rebase/
  2. https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
Git 分支 - 示例操作 目录 本操作 更有趣的例子 的风险 用解决 vs. 合并 Git 中整合来自不同分支的修改主要有两种方法:merge以及rebase。 在本节中我们将学习什么是“”,怎样使用“”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。 本操作 请回顾之前在分支的合并中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。 ... 阅读详情

相关推荐

Gitrebase

Git主要是使git 的提交记录得更加简洁。下面通过三个场景来理解rebase的应用。 1. 场景一 在开发一个功能时,可能需要几天,每天都提交了更改,最后完成整个功能,但是我们的提交记录中有多个版本,如V1,V2,V3 和 V4 版本,为了提交记录简洁,可以通过,将多个提交记录整合成一个记录,如下图: 实践案例模拟场景一: 新建个RebaseDemo文件夹,用于模拟: 模拟连续提交四个版本: 待续。。。 ...

menergy 9192

Git超详解五 (看不懂算我输)

1.2.本操作3.解决冲突4.什么时候使用5.注意事项 1. 也是将一个分支的代码整合到另外一个分支。跟merge功能类似,但也存在着很大的不同。可以把提交线整合得更加是一条直线。 2.本操作 假如有这样一个提交图 然后我们把dev分支合并到master分支后,结果图为: 以上是采用正常的merge操作实现的结果。还有另外一种方式,可以将dev上的代码合并到master分支上。那就是命令为git rebase。命令如下: $ git checko

weixin_44154094的博客 3万+

Git 分支 5-

电子书链接: Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在本节中我们将学习什么是“”,怎样使用“”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。 本操作 请回顾之前在 分支的合并 中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。 之前介绍过,整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照(C3 和 C4)以及二者最近的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交

u_my_heart的博客 1195

git rebase)详解

一、提交节点图解 首先通过简单的提交节点图解感受一下rebase在干什么 两个分支master和feature,其中feature是在提交点B处从master上拉出的分支 master上有一个新提交M,feature上有两个新提交C和D 此时切换到feature分支上,执行如下命令,相当于是想要把master分支合并到feature分支(这一步的场景就可以类比为我们在自己的分支feature上开发了一段时间了,准备从主干master上拉一下最新改动) git checkout featur.

liujiujiang的博客 7853

Git】第九节:操作(Rebase

Git Rebase 操作精要 Rebase)是优化Git提交历史的利器,可将分支提交线性重组到目标分支。交互式(-i)支持合并/修改提交。与Merge相比,Rebase生成整洁的线性历史,但会重写提交(需强制推送)。关键点:①仅用于私有分支;②解决冲突后--continue;③避免在共享分支使用。最佳实践:开发中频繁Rebase保持清洁,发布时Merge保留完整记录。掌握Rebase能提升团队协作效率,但需谨慎操作防止历史丢失。

silverclayz的技术分享 3922

git git rebase

(heads/dev) git rebase master 详细工作原理*

张紫娃的博客 1340

gitrebase)的理解

其实git的官网对的解析挺详细的了:地址 从原理上也能理解【】和【合并】有啥区别。 我的理解是,【】和【合并】都能解决一个问题,那就是合并代码。但是他们的区别是:在master的记录上会有所不同。如下图:(我是用sourceTree做的合并与的) 【合并】 【】 从上面那两个图可以看到,如果是【合并】的话,C4这一个记录其实还是在experiment分支上的,也就是说mas...

charming的博客 5639

Git rebase

Git rebase)是重构Git提交历史的强大工具,通过重放提交到新点创建线性历史。文章介绍了rebase本概念、与merge的区别,以及常见使用场景:保持线性历史、整理提交记录、解决冲突和同步远程分支。同时强调了rebase的黄金规则——不要对已推送的共享提交执行rebase,并提供了最佳实践建议。rebase能简化项目历史,但需谨慎使用以避免团队协作问题。

理论都是虚的,代码才是王道。 374

git进阶】git rebase

通过git,实现分支合并、提交信息修改、提交记录合并三种操作。

Hackeryuan的博客 1298

GitGit (rebase)以及rebase和merge之间的区别

git 的相关知识

cannotbecounted的博客 1554

Git rebase操作

先讲个例子理解一下什么是: A---B---C dev / D---E---F---G master 两个分支master、dev,其中dev分支是在master分支上的提交点E拉出的分支。 在两个分支合并之前,master分支有了新的提交F、G,此时想在gitlab上合并dev分支到master分支是不被允许的,因为git不知道怎么处理ABC与FG的关系了,会提醒你需要先在本地rebase。 所以到底什么是reba.

bocai_xiaodaidai的博客 2562

Git Interactive Rebase 交互式

Git交互式:优化提交历史的利器 交互式(Interactive Rebase)是Git中强大的历史修改工具,允许开发者通过git rebase -i命令对提交进行精细控制。核心操作包括:pick保留提交、reword修改信息、edit编辑内容、squash/fixup合并提交、drop删除提交等。通过合理使用这些操作,可以合并琐碎提交、重写描述信息、删除无用提交,从而创建更清晰、专业的提交历史。 最佳实践建议:仅对本地未推送的提交使用交互式,避免修改已共享的历史;使用--onto选择范围;

理论都是虚的,代码才是王道。 362

浅谈git rebase命令:的作用

写在前面 既然文章的标题是浅谈,那自然是不做太详细的探究了,就举几个简单的例子,谈一谈、合并提交这两个操作的使用。至于为什么简简单单地内容都要记录下来,是因为我当初在搜索的时候,居然找不到一篇文章真正意义上讲清楚了“”这个过程涉及到的不同操作。我看到的要么就是写的太隐晦的,没点础的读者估计绕不过来,还有一些就是抄来抄去的,连本流程都没讲清楚的,便决定整理一下,于是有了这篇文章。 什么是 我们先来看看什么是,假设我们有下图所示的提交历史: 这个时候我们会说,feature1分支是从d

Kingfar Ou 2014

GIT】TortoiseGitRebase)操作

rebase操作

weixin_44939430的博客 3910

git rebase()操作演示

1.rebase()操作 注意事项:rebase分支的根源,绝对不要在与其他人共享的分支上进行操作rebase黄金法则:绝不要在公共的分支上使用它! 1.1git merge 与 git rebase的区别 1.1.1git merge 合并两个分支并生成一个新的提交 1.1.2git rebase提取操作有点像git cherry-pick一样,执行rebase后依次将当前(执行rebase时所在分支)的提交cherry-pick到目标分支(待rebase的分支)上,然后将在原始分支(执行reb

xiaoaojianghu1314的博客 3087

Git-代码合并时-rebase操作

Git-代码合并时-rebase操作

weixin_45502734的博客 2601

idea使用Git插件版本控制,交互式,rebase

idea使用Git插件版本控制,交互式,rebase

shaokunkun的博客 5284

操作详解 git rebase git pull --rebase <origin/master>

前言: 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 什么是“”,怎样使用“”,就我学习与大家做一下分享,参考。 金科玉律:如果提交存在于你的仓库之外,而别人可能于这些提交进行开发,那么不要执行。 一丶merge合并分叉 开发任务分叉到两个不同分支,又各自提交了更新,如图: 使用merge整合分叉历史,他会把两个分支的最新快照C3,C4和二者最近的共同祖先C2进行三方合并,合并的结果生成一个新的快照并提交。如图所示: 二丶rebase

weixin_44297716的博客 4461
上一篇: 重构概述
下一篇: Spring注入List/Map
Studious_Li
博客等级 码龄18年 21粉丝 57原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值