git rebase-优雅合并与修改提交

文章目录

  • 简介
  • rebase用于合并
  • 使用rebase修改提交
  • cherry-pick

简介

在Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)中我们已经介绍了git的最常用实用的命令。

在上面说的那篇文章中,我们只是简单提了一下rebase。

是因为rebase比较复杂,并且用的相对较少,因为我们通常更喜欢用merge。

但是rebase绝对是有强迫症朋友的福音,尽管rebase非常危险,但是它非常优雅。

能让我们的提交历史看起来简洁清晰。

这一篇我们就来简单感受一下rebase命令的魅力吧。

rebase用于合并

rebase和merge一样,可以用来合并分支。

和merge不同,rebase不会创建一个新的合并节点。

而是把要合并的分支节点依次放在目标合并分支节点的后面。

我们看一下下面这个例子,先看一下基础提交:

基础提交信息

我们先使用merge方式合并代码看看:

git merge feature-a

merge方式合并

我们把merge回退了:

 git reset --hard head^

用rebase来合并:

# 将feature-a rebase到当前分支
git rebase feature-a# 等价于下面这个命令
git rebase feature-a master

有冲突,解决冲突之后,使用下面命令继续:

# 解决冲突之后add,表示冲突已经解决了,可以继续合并了
git add .
# 然后继续rebase
git rebase --continue# 当然,我们也可以使用abort参数终止rebase
git rebase --abort

git rebae冲突

rebase合并完成之后的状态:

合并之后状态

对于只有我们自己提交的功能分支,我们就可以使用rebase来合并。

merge合并的步骤:

  1. 将master分支的最新节点MN的快照
  2. feature分支最新节点CN的快照
  3. 与两个分支共同Parent节点MFN的快照执行三路合并生成新的快照
  4. 基于上一步合并之后的快照生成一个连接master分支与feature分支的节点MFN
  5. 将master指向最新合并节点MFN

merge合并示意图

rebase合并步骤:

  1. 找出当前所在分支和变基分支的共同Parent节点,MP
  2. 将feature分支中MP之后节点的快照暂存,如F1、F2、F3…
  3. 将上一步暂存的快照(F1、F2、F3…)应用到master分支,根据时间顺序

使用rebase修改提交

rebase除了用来合并分支,还可以用来修改提交。

命令说明
pick保留该commit,缩写:p
reword保留该commit,需要修改该commit的注释,缩写:r
edit保留该commit, 要修改该提交,和reword不同,edit不仅仅可以修改注释,缩写:e
squash将该commit和前一个commit合并,缩写:s
fixup将该commit和前一个commit合并,但不要保留该提交的注释信息,缩写:f
exec执行shell命令,缩写:x
drop丢弃该commit,缩写:d

我们知道commit --amend可以修改提交,但是,只能修改最后一次,如果要修改多次,怎么办呢?

可以使用rebase。

git commit --amend -m 'commit message'

使用交互模式,修改最近5次提交:

git rebase -i HEAD~5

rebase 交互操作选择
默认是pick表示使用提交,可以对这些commit上下移动从而对提交进行重排序,当退出编辑器时,git会按照指定的顺序去应用提交,并且做出相应的操作。

选择要修改的commit,选择对应的操作

选择rebase操作

根据提示继续操作:

rebase提示

我们根据提示,使用git commit --amend命令继续:

rebase执行完成情况

因为edit不仅仅可以修改提示,还可以修改其他,所以需要我们手动提示继续:

git rebase --continue

rebase squash合并提交

完成:

rebase完成信息提示

我们再看看修改之后的历史信息:

rebase之后的历史信息

cherry-pick

之前文章我们已经介绍过cherry-pick,前面我们了解了rebase,再回过头来看cherry-pick。

可以发现cherry-pick,就是特殊的rebase。

# 首先切到指定分支
git checkout b1
# 查看需要pick哪些提交
git log --oneline# 切回到pick分支
git checkout master# cherry-pick指定的commit
git cherry-pick 1f54b01 0fed6dd# 如果有冲突手动解决冲突,然后add
git add .# 继续cherry-pick处理commit信息
git cherry-pick --continue

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

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

相关文章

音视频流媒体直播/点播系统EasyDSS互联网视频云平台介绍

随着互联网技术的飞速发展,音视频流媒体直播已成为现代社会信息传递与娱乐消费的重要组成部分。在这样的背景下,EasyDSS互联网视频云平台应运而生,它以高效、稳定、便捷的特性,为音视频流媒体直播领域带来了全新的解决方案。 1、产…

HarmonyOS4+NEXT星河版入门与项目实战(22)------动画(属性动画与显示动画)

文章目录 1、属性动画图解2、案例实现-小鱼移动游戏1、代码实现2、代码解释3、资源图片4、实现效果3、显示动画4、案例修改-显示动画5、总结1、属性动画图解 这里我们用一张完整的图来汇整属性动画的用法格式和使用的主要属性范围,如下所示: 2、案例实现-小鱼移动游戏 1、代…

基于大数据python 豆果美食推荐数据可视化系统(源码+LW+部署讲解+数据库+ppt)

!!!!!!!!! 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度(部分学校只有一次答辩机会 没弄好就延迟…

坐标系变换

1 Clark变换 三相对称电压表达式为: 将三相电压用相量的形式表达出来,并用欧拉公式(eix(cosxisinx))写成三角函数的形式: 同时,三相电压矢量空间合成向量可表示为: 三相电压合成矢量幅值为相电…

008静态路由-特定主机路由

按照如上配置,用192.168.0.1 电脑ping 192.168.1.1 发现能够ping通 用192.168.0.1 电脑ping 192.168.2.1 发现不能ping通 这是因为192.168.0.1 和 192.168.1.1 使用的是同一个路由器R1。 192.168.0.1 和 192.168.2.1 通信需要先经过R1,再经过R2 &#xf…

用c语言完成俄罗斯方块小游戏

用c语言完成俄罗斯方块小游戏 这估计是你在编程学习过程中的第一个小游戏开发,怎么说呢,在这里只针对刚学程序设计的学生,就是说刚接触C语言没多久,有一点功底的学生看看,简陋的代码,简陋的实现&#xff0…

数据迁移调研

需求背景:在项目迭代过程中,需要将一个数据库的数据迁移到另外一个数据库,包括分库分表的mysql数据库的数据异构到ES,来支持大数据量的查询,以及从一个Mysql数据库迁移到另外一个Mysql数据库的操作。多个业务的数据在一…

深度学习:梯度下降法

损失函数 L:衡量单一训练样例的效果。 成本函数 J:用于衡量 w 和 b 的效果。 如何使用梯度下降法来训练或学习训练集上的参数w和b ? 成本函数J是参数w和b的函数,它被定义为平均值; 损失函数L可以衡量你的算法效果&a…

python基础(二)

函数 函数定义 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。 python函数定义规则: def my_max(a,b): #定义函数用def关键字开头,函数名-》my_max ()定义参数 if a>b: #函数体以&#xff1a…

镜像神经元系统,人工智能的等效设计

镜像神经元机制等效于人工智能对输入数据系统上下文进行编码的系统。 生物神经系统的镜像神经元编码系统,对生物感知到的一系列行为序列的整体模式进行编码。生物神经系统在感知到行为序列中的某个特征触发模式时,触发神经系统输出整体模式的序列集合的…

复杂网络(三)

一、几种常见的中心性指标 1.1 度中心性 度中心性分为节点度中心性和网络度中心性。前者指的是节点在其与之直接相连的邻居节点当中的中心程度,二后者则侧重节点在整个网络的中心程度,表征的是整个网络的集中或集权程度,即整个网络围绕一个…

基础(函数、枚举)错题汇总

枚举默认从0开始,指定后会按顺序赋值 而这个枚举变量X,如果在全局(函数外部)定义,那默认为0,如果在函数内部(局部变量),那就是随机值,必须初始化。 枚举变量…

Facebook的开源项目解析:推动开发者社区的技术进步

Facebook,作为全球领先的社交平台之一,其在技术领域的创新不仅体现在产品功能的实现上,也积极推动开源社区的发展。开源项目已经成为Facebook技术战略的重要组成部分,通过开源,Facebook不仅加速了技术进步,…

uniapp中scrollview配合swiper实现一个简单的tab标签页

<template><view class"tab-container"><!-- Tab 标签滚动容器 --><scroll-view scroll-x"true" class"tab-scroll" scroll-with-animation"true"><view class"tab-list"><viewv-for"…

后端-mybatis的一对一查询

准备两张表菜单表和分类表&#xff0c;一个菜单对应一个分类&#xff0c;一个分类对应多个菜单&#xff0c;我们从菜单对分类来操作一对一的关系&#xff0c;首先在菜单表里面要有一个分类表的id字段。 使用mapper的映射文件.xml来写的话我们在resource目录下创建各自mapper的…

mysql_题库详解

1、如何创建和删除数据库&#xff1f; 1&#xff09;创建数据库 CREATE DATABASE 数据库名; 2&#xff09;删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别&#xff1f; 1&#xff09;事务&#xff1a;MyISAM 不支持事务 InnoDB 支持 2&#xff09;行锁/表锁&a…

修改Docker 默认存储目录( Docker Root Dir: /var/lib/docker)

Docker 默认将所有的数据&#xff08;包括镜像、容器、卷等&#xff09;存储在 /var/lib/docker 目录下。这个目录默认被配置在系统的根分区或者较小的分区上。随着容器化应用的增加&#xff0c;或者 Docker 容器和镜像的数量增加&#xff0c;默认存储位置可能会迅速填满&#…

CentOS startx 启动失败的解决方法

第一个错误&#xff1a;MESA-LOADER: failed to open mgag200: /usr/lib64/dri/mgag200_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib64/dri) failed to load driver: mgag200 解决方法&#xff1a;安装缺失mesa驱动&#xff0…

week 9 - Entity-Relationship Modelling

一、数据库设计的重要性 • 设计数据库可使查询更高效、简洁。 • 减少数据冗余&#xff08;data redundancy&#xff09;&#xff0c;提升表的整洁性。 二、Key Components of ER Modelling 实体-关系建模的基本构成 1. 实体&#xff08;Entity&#xff09;&#xff1a;表…

BUUCTF—Reverse—Java逆向解密(10)

程序员小张不小心弄丢了加密文件用的秘钥&#xff0c;已知还好小张曾经编写了一个秘钥验证算法&#xff0c;聪明的你能帮小张找到秘钥吗&#xff1f; 注意&#xff1a;得到的 flag 请包上 flag{} 提交 需要用专门的Java反编译软件:jd-gui 下载文件&#xff0c;发现是个class文…