git rebase (合并代码和整理提交记录)图文详解

news2025/2/2 23:56:07

git rebase详解,附带操作过程命令,运行图片

  • 合并代码
    • 初始代码分支结构
    • merge合并代码
    • rebase合并代码
  • 整理提交记录
    • 背景-整理提交记录
    • 步骤-图文详解

建议在看这篇文章之前一定要看完:git reset 命令详解 git revert命令详解。
看完上面的文章后,在rebase操作(成功/失误)后还可以进行回退。不至于咱们再去费劲创建那些提交记录。
git rebase 有两种作用

  1. 合并代码
  2. 整理提交记录

合并代码

初始代码分支结构

可以看到有两个分支,2023的分支是在master的基础上建立的,并且已经有过多次提交。master也已经有了后续的一个提交。
在这里插入图片描述

merge合并代码

平时我们大多是使用merge合并代码。操作流程是:

  1. :切换到master分支

    git checkout master
    

    在这里插入图片描述

  2. 将2023的分支合并到master分支上

    git merge 分支名
    

    在这里插入图片描述
    执行merge命令后写上merge的备注,然后保存退出就可以merge成功了。
    效果如下:
    在这里插入图片描述
    可以看到使用merge进行合并是将两个分支通过一个“merge”的新提交记录合并在一起。并且两个分支的提交记录是按照时间顺序排列的。

rebase合并代码

  1. 切换到被合并的分支上,比如:咱们是要将2023分支的代码合并到master上,那咱们切换到2023的分支上

    git checkout feature/2023-07-09-rebase...(分支完整名字)
    
  2. 执行rebase + 合并到的分支的分支名,我们的就是master分支

     git rebase master
    

    结果:

    在这里插入图片描述
    可以看到2023分支(刚刚我们执行rebase的分支上)master的记录和2023原本的提交记录都被拷贝了一份放在后面。

  3. 切换分支到master上(要合并到的分支,别名:目标分支),并merge 2023分支。

     git checkout master
     git merge feature/2023-07-09-rebase...
    

    结果:

    在这里插入图片描述
    可以看到执行了上述命令后,本地master分支在“头像图片”提交记录的后面增加了2023分支的提交记录,并且两个分支并没有生成合并的那一个merge的提交记录。

  4. 推送到远程

    git push
    

    结果:
    在这里插入图片描述
    之后如果想要的话就可以将2023的分支删除掉,以此来保证提交记录的简洁。
    不过很多公司是不允许或者不推荐使用rebase去合并代码的。尽量还是使用merge去合并多个分支的代码更好。

整理提交记录

我先将上面的操作使用reset 退回了,并且在2023分支原有提交的基础上又增加了一个提交记录。现在分支提交记录如下:
在这里插入图片描述

接下来要操作的是2023的分支。

背景-整理提交记录

再上图我们可以看出:2023分支的后三次提交(“第三步”、“第三部解释”、“第三部解释补充”)都属于第三步的。如果可以合并到一次提交中就符合我们强迫症的想法了,还能体现我们技术高超(一次提交就成功了)而且提交记录看着还会整洁不少。

步骤-图文详解

  1. 切换到要整理的分支,并且查看git日志。
    在这里插入图片描述

  2. 执行rebase

    git rebase -i 开始commit 结束commit
    

    注意:“开始commit”是“更上一次的提交记录”,因为rebase命令后面的commit是左开右闭的
    如果结束commit是HEAD的话,可以不写。

  3. 编辑提交记录
    在这里插入图片描述
    上面Commands的意思:
    都是rebase中的可交互命令。

    pick:
    选择保留指定的提交记录。这是最常用的操作指令,将提交记录应用于目标分支。
    
    reword:
    修改指定提交记录的提交信息(commit message)。当您想要修改提交信息时,使用此操作指令。
    
    edit:
    暂停 rebase 过程,以便您可以编辑指定提交记录。您可以在编辑提交记录之后使用 git commit --amendgit rebase --continue 继续 rebase 过程。
    
    squash 或 fixup:
    将指定提交记录合并(squash)到上一个提交记录中,或者使用 fixup 进行类似的操作,并忽略此提交的提交信息。
    
    drop 或 d:
    删除指定的提交记录,从而从 rebase 中排除它们。
    
    exec:
    在 rebase 过程中执行指定的 shell 命令。这允许您在 rebase 过程中执行自定义操作,如自动修改提交。
    
    break 或 b:
    在指定的提交记录之前插入一个断点,以便 rebase 过程暂停,允许您执行其他操作。
    

    下面我们使用的是:squash或者s

    在这里插入图片描述
    我们是将下面两个提交使用squash合并到第一个提交中。注意:整个文档中至少要有一个pick否则就报错了。

    如果报错:

    fatal: It seems that there is already a rebase-merge directory, and
    I wonder if you are in the middle of another rebase.  If that is the
    case, please try
            git rebase (--continue | --abort | --skip)
    If that is not the case, please
            rm -fr ".git/rebase-merge"
    and run me again.  I am stopping in case you still have something
    valuable there.
    

    这个错误表示在之前的 rebase 操作中出现了问题,并且存在一个未完成的 rebase 操作导致了冲突。
    该错误消息指出 Git 在 .git/rebase-merge 目录中找到了未完成的 rebase 操作的相关文件。这可能是由于之前的 rebase 操作未成功完成,或者在 rebase 过程中发生了冲突导致操作中止。
    解决方案:我们使用git rebase --abort 就可以了。

  4. 编辑提交备注

    一开始:在这里插入图片描述

    修改后:

    在这里插入图片描述
    将其余的提交记录删除掉,并修改第一个提交的提示内容。

    修改保存后会出现:

    在这里插入图片描述

  5. 结果:
    在这里插入图片描述
    此时我们可以看到本地的2023分支的rebase合并提交记录已经完成。

  6. 强行推送

     git push --force
    

    在这里插入图片描述
    最终可以看到远程的2023分支也已经完成了rebase

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

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

相关文章

基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件

系列文章目录 基于scrcpy的远程调试方案 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件(视频) 基于scrcpy的Android群控项目重构…

struct详解

导入 我们有没有这种情况,总想有一个数组,其中可以有int,double,char。。。各种类型,但是对于内置的数据类型显然是做不到的,于是就有了结构体类型 结构体是将多种不同的结构打包在一起,形成全新的类型进行使用 stru…

Spring的两种事务管理机制,面试这样答当场入职!

前言: 博主在最近的几次面试中,大中小厂都问到了Spring的事务相关问题,这块知识确实是面试中的重点内容,因此结合所看的书籍,在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读,感…

刻录到光盘功能看不见怎么办

刻录到光盘功能看不见怎么办 1、 打开组策略 同时按键WINR,打开运行对话框,输入gpedit.msc,打开组策略(如果发现输入gpedit.msc后无法打开组策略,请参照文件后面的方法进行操作) 2 、查找“删除CD刻录…

Java开发基础系列(五):对象方法参数

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: Java开发基础系列(五):对象方法参数 ⏱️ 创作时间&#x…

Pycharm 搭建 Django 项目,看完这一篇就够了

1. 安装需求 在使用 python 框架 Django 需要注意下面事项 Pycharm 版本是专业版而不是社区版本Pycharm 配置好了 python 解释器 (一般我们现在用的都是python3)我自己使用的是 Pycharm 版本是2020.1.2 2. 准备工作 2.1 新建项目 首先我们打开 Pycharm …

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和? 所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为: dst saturate(src1 𝛼 src2 𝛽 𝛾)式中,satu…

无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合

1 场景介绍 当我们使用python构建AI模型算法的过程中,经常会遇到如下的问题: 这个模型如何提供给其他微服务调用(比如JAVA构建的微服务)?这个模型如何做到多个服务节点的负载均衡?这个模型如何做到服务的…

Python高光谱遥感数据处理与高光谱遥感机器学习方法深度应用

提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇,用通俗易懂的语言解释高光谱的基本概念和理论,深入理解科学原理。方法篇结合Python编程工具,专注于解决高频技术难题&#xff0c…

工欲善其事,必先利其器之—react-native-debugger调试react native应用

调试react应用通常利用chrome的inspector的功能和两个最常用的扩展 1、React Developer Tools (主要用于debug组件结构) 2、Redux DevTools (主要用于debug redux store的数据) 对于react native应用,我们一般就使用react-nativ…

C++无锁编程——无锁队列

C无锁编程——无锁队列 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——堆栈的几种无锁实现方法。队列的挑战与栈的有些不同,因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的,且对…

TCP/IP网络编程 第十二章:I/O复用

基于I/O复用的服务器端 多进程服务器端的缺点和解决方法 为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的种方案,但并非十全十美,因为创建进程时需要付出极大代价。这需要大量的运算和内存空间&#xff…

Vue列表排序

开始前先回顾一下sort排序用法&#xff1a; 定义一串数组arr&#xff0c;使用sort排序&#xff0c;会收到前后两个数据项设置两个参数a&#xff0c;b。 注意&#xff1a;a-b 是升序 b-a 是降序 a-b升序&#xff1a; <script>let arr [12,11,2,5,76,33]arr.sort((a,b…

家居商城小程序:打造舒适家居生活的优选平台

随着人们对家居生活品质的追求&#xff0c;家居商城小程序成为提供便捷购物和个性化服务的不可或缺的工具。通过家居商城小程序&#xff0c;用户可以浏览并购买各类家居商品&#xff0c;如家具、装饰品、家纺等。同时&#xff0c;家居商城小程序能提供热销商品推荐、客户评价和…

浅析高校用电问题及智慧电力监管平台的构建 安科瑞 许敏

摘 要&#xff1a;介绍了当前高校用电存在的问题&#xff0c;进行了原因分析&#xff0c;由此提出建立高校用电智慧监管平台。对高校用电智慧监管平台的构架进行设计&#xff0c;运用物联网技术&#xff0c;实现各回路实时自主控制&#xff0c;并细化管理权限&#xff0c;实现…

Swift 周报 第三十三期

文章目录 前言新闻和社区App 内购买项目和订阅即将实行价格与税率调整为家庭提供安全的 App 体验 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十四期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff…

公网访问的Linux CentOS本地Web站点搭建指南

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

常规函数和箭头函数之间的主要区别

常规函数和箭头函数之间的主要区别 在 JavaScript 中&#xff0c;函数是设计用于执行特定任务的代码块。函数允许使用函数将大型程序分解为多个更小、更易于管理的组件。因此&#xff0c;我们就不再需要重复编写相同的代码。 JavaScript中有两种类型的函数 常规函数箭头函数…

jmeter如何进行web脚本录制

目录 录制web脚本 &#xff08;1&#xff09;jmeter中设置HTTP代理 &#xff08;2&#xff09;浏览器中设置代理 &#xff08;3&#xff09;页面操作 &#xff08;4&#xff09;查看录制的web脚本 &#xff08;5&#xff09;脚本内容过滤 &#xff08;6&#xff09;脚本优化…

练习 数列前n项和(递归函数)

C++自学精简教程 目录(必读) 数列的前n项和 S = 1 + 2 + 3 + ...... + n 之前我们用for循环求解数列前n项和,本文用递归函数求解。 代码如下 #include <iostream> using namespace std;int f(int a) {if (a == 1){return 1;}else{return a + f(a - 1);} }int main(…