git rebase超详细解读,一文搞懂!!!-程序员宅基地

技术标签: github  java  git  后端  

1. Git Rebase的介绍

我们都知道,git rebase可以实现git节点或者分支的合并,但是,真正涉及到为什么要使用git rebase,它的好处又是什么等一些比较实际的问题,很多同学就搞不清楚了,本文聚焦于git rebase,着重讨论该命令的两种妙用,来帮助大家直观的理解这条命令。

写在前面:如果你的分支不只有你在进行开发,那么git-rebase可能会导致提交记录的丢失,但是如果你是在自己的分支上进行开发,那么这无疑是一个很棒的选择。


小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!
所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【111】即可免费获取

2. Git Rebase作用一:合并本地的多条提交(commit)记录

一般情况下,我们进行开发时,都是从master分支拉一个自己的开发分支,进行代码修改操作,再git add以及git commit之后将我们修改好的代码git push到远程仓库。

但是,很多情况下,我们并不会仅仅在本地git commit一次,而是会执行很多次,而我们知道,每一个的git commit都会形成一个git节点,而如果我们把这些节点都push到远端,就会使项目的git日志很乱,因为你的这些commit对于其他同学来说都仅仅是为了完成你对应的修改工作,他们希望的是,你能在一次commit操作中把你的修改全部完成,这时,就可以用到我们的git rebase操作了,在git push之前,我们可以将几次本地的commit操作合并,这样,我们推送到远端的commit操作就只有一个了,更利于项目管理。

已经在本地提交了两次:

 

调用git rebase命令合并本地的commit节点

git rebase -i HEAD~2
复制代码

 

经过上面的操作,我们就只剩了一个commit节点,里面包含了我们所有的修改信息,再合并到master中。就不会有开始提到的问题了。

需要注意的是,如果你的commit已经push到远端了,那么就没有办法使用我们的这个技巧了。

2. Git Rebase作用一:分支合并

1.我们先从 master 分支切出一个 dev 分支,进行开发:

git checkout -b feature1
复制代码

 

  1. 其他同学完成了一次 hotfix,并合并入了 master 分支,此时 master 已经领先于你的 feature1 分支了:

 

  1. 使用 rebase 来同步其他同学修改的结果,来保证自己的代码是最新的版本

 

3. Git Rebase的过程

git rebase 做了什么操作呢?

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

4. 冲突解决

在 rebase 的过程中,也许会出现冲突 conflict。在这种情况,git 会停止 rebase 并会让你去解决冲突。在解决完冲突后,用 git add 命令去更新这些内容。

注意,你无需执行 git-commit,只要执行 continue

git rebase --continue
复制代码

这样 git 会继续应用余下的 patch 补丁文件。

在任何时候,我们都可以用 --abort 参数来终止 rebase 的行动,并且分支会回到 rebase 开始前的状态。

git rebase —abort
复制代码

5. 注意事项

根据上文来看,git-rebase 很完美,解决了我们的两个问题:
1.合并 commit 记录,保持分支整洁;
2.相比 merge 来说会减少分支合并的记录;

但是如果你的分支不只有你在进行开发,那么git-rebase可能会导致提交记录的丢失。

 

那么当他 pull 远程 master 的时候,就会有丢失提交纪录。这就是为什么我们经常听到有人说 git rebase 是一个危险命令,因为它改变了历史,我们应该谨慎使用。

但是,只要你自己的分支上需要 rebase 的所有 commits 历史还没有被 push 过,就可以安全地使用 git-rebase来操作。


 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_69424697/article/details/125106290

智能推荐

莱昂哈德·欧拉生平及其成就简介_欧拉的物理成就-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏8次。莱昂哈德·欧拉(Leonhard Euler ,1707年4月15日~1783年9月18日),瑞士数学家、自然科学家。1707年4月15日出生于瑞士的巴塞尔,1783年9月18日于俄国圣彼得堡去世。欧拉出生于牧师家庭,自幼受父亲的影响。13岁时入读巴塞尔大学,15岁大学毕业,16岁获得硕士学位。欧拉是18世纪数学界最杰出的人物之一,他不但为数学界作出贡献,更把整个数学推至物理的领域。他是数学史上最多产的数学家,平均每年写出八百多页的论文,还写了大量的力学、分析学、几何学、变分法等的课本,《无穷小分析引论》、_欧拉的物理成就

Error: PL/SQL: ORA-00980: 同义词转换不再有效_sql数据库中同义词转换不再有效-程序员宅基地

文章浏览阅读1.5w次。今天在写存储过程的时候,碰到一个问题,在执行存储过程的时候总是报错--同义词转换不再有效,发现一个查询语句中的一个表原来使用的是一个同义词,就试着把这个同义词单独拿出来进行查询操作,发现并没有问题。最后,经过一番努力,发现该同义词并不是直接指向一个实体表,而是指向另一个同义词。所以,将改同义词的指向改为直接指向原实体表的指向,问题得到解决。即同义词指向的 object ow_sql数据库中同义词转换不再有效

idea 怎么修改项目名字和modules配名字_idea修改groupid-程序员宅基地

文章浏览阅读2.5k次。我们会遇到很多场景比如说git拉取一个项目改成自己的 或者架构师搭建架构喊你拿过来用 是不是的改名字。mvn idea:module 这个是生成.iml文件 删除以前的.iml.重新导入工程编辑运行。第五 补充 如果发现你改项目能把原来的项目modules也改了。第二步 改 点击project Stucture。a/是项目名字 name 也是。第三步 改modules。_idea修改groupid

信息论复习—循环码-程序员宅基地

文章浏览阅读5.5k次,点赞12次,收藏70次。信息论复习—循环码_循环码

IDEA快捷键大全-程序员宅基地

文章浏览阅读8.9w次,点赞148次,收藏872次。IntelliJ IDEA快捷键大全、快捷键使用教程_idea快捷键

Lightgbm原理、参数详解及python实例_lightgbm选取最优参数 python-程序员宅基地

文章浏览阅读1.8w次,点赞15次,收藏130次。GDBT1)对所有特征都按照特征的数值进行预排序。2)在遍历分割点的时候用O(#data)的代价找到一个特征上的最好分割点。3)找到一个特征的分割点后,将数据分裂成左右子节点。两个方面可改进GDBT降低训练集的规模。降低特征维度。LightGBM重点:对模型训练时样本点的采样优化和特征维度的优化原理1.单边梯度采样算法(Grandient-based One-Side S..._lightgbm选取最优参数 python

随便推点

IBM SVC storage_ibm system storage san voume controller-程序员宅基地

文章浏览阅读2.8k次。IBM SVC storage1. Introduction TheIBM SAN Volume Controller (SVC) is a block storage virtualization appliancethat belongs to the IBM System Storage product family. SVC implements anind_ibm system storage san voume controller

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)Meta 通过推出新的开源 AI 模型 Llama 3 以及新版本的 Meta AI,正在加强其在人工智能 (AI) 竞赛中的竞争力。该虚拟助手由 Llama 3 提供支持,现已可在所有 Meta 平台上使用。

LeetCode.726 原子的数量 C++-程序员宅基地

文章浏览阅读266次。LeetCode.726 原子的数量 原题链接:原子的数量1. 题意:将化学式的各个元素按字典序排序,以(元素+元素个数)的形式依次累加成字符串2. 思路通过pair的形式,将每个元素和该元素的个数对映,括号也与括号后的个数对映,如下图 利用栈结构匹配(),将括号的外的个数,乘以括号里各元素对应的个数。哈希表统计各元素的个数,并以字典序排序3. 代码注释变量定义的解释vector<pa..._c++原子的数量

基于不同CPU架构静态编译QT及相关问题_mips64el编译 curl-程序员宅基地

文章浏览阅读1.9k次。最近在编译linux客户端的时候,出现了瓶颈,不同的CPU + 操作系统 + 内核版本等,造成了客户端维护越来越繁琐,为了提高维护效率,降低维护成本,因此决定采用静态编译。因为是年前的了,所以好多编译时遇到的报错没有截图(所以仅简单做参考记录)面临的问题:后台服务二进制程序依赖glibc,但是不同的操作系统glibc版本不一致,因此程序在不同操作系统运行时会出现版本不符的问题。 QT界面二进制程序除了上面提及glibc的问题,还因为依赖诸多qt库等,导致在不同操作系统中运行报错。好啦,有了问题,_mips64el编译 curl

autoflowchart php,c语言流程图生成器-程序员宅基地

文章浏览阅读512次。AutoFlowchart是一个功能强大,实用的根据源码生成C语言流程图生成器软件,它生成的流程图支持展开/合拢,并且可以预定义流程图块的大小和间隔,移动和缩放流程图也很方便。你还可以把它导出到WORD文档或BMP文件,帮助程序员更好地理解程序,制作文档和可视化代码,支持C,C++,VC++(Visual C++ .NET),Delphi(Object Pascal)。功能介绍根据源程序生成流程图..._autoflowchart

【算法】格雷码(Gray Code)与8421二进制码之间的转换算法 (LeetCode89)-程序员宅基地

文章浏览阅读8.5k次,点赞7次,收藏19次。格雷码_格雷码