git rebase -i 交互式变基的使用,以及squash压缩多次提交的方法

news/2024/7/24 3:50:42 标签: git

交互式变基这个词是sourceTree的翻译。

交互式变基可以将多个提交合并为一个,当然他的功能不止于此。但一般用于以下情况:

在某个分支(比如dev)下做功能开发,当测试完毕,将要合并dev到master,但由于开发过程中有太多的提交,合并到master之后会让master的整个提交记录看起来不优雅,所以这时候可以用交互式变基去合并,这样做有两个好处:

  • rebase 可以让合并过程中不产生合并的那次提交,也就是说合并完成后master分支图谱仍旧是一根线。
  • squash多个提交保证开发分支的多次提交记录合并完成后仅有一个提交。

这两步是在一次交互式变基操作中一起完成的。

其实我们在dev上开发大部分情况都仅仅涉及到了一个功能点,比如某个bug fix,合并到master后理应仅有一个提交来保证master提交记录的可读性。

具体操作:

# 当前在dev分支
$ git rebase -i master

接着就会进入到一个交互式的界面,不要被吓到…
在这里插入图片描述
不要被这个界面唬到,这么多文字其实全是注释,他只是在告诉你怎么用。简单来说,我们仅仅用到squash,最上边的三行没有注释的是我的将要rebase 和 squash的三个提交。这个窗口完全和vim一样需要你去编辑。

  • 在当前这个页面键入i(进入编辑模式),此时会出现光标
  • 移动光标到第二行和第三行,将pick编辑为s
  • esc,然后输入:(键盘上shift+:),输入wq,即保存退出。

上边pick编辑为s,就是意味着,将后两次提交“压缩”到第一次提交中。就是三次提交压缩为一次提交。

值得注意的是,第一行是不能改为s的,因为总需要个垫底的,否则你往谁身上压缩。

另外不要被编辑的复杂给唬到,其实vim就是一个linux的编辑器,一些大神甚至把他用作ide,你觉得复杂,只是因为你不熟练而已。
在这里插入图片描述
在保存退出后,立刻又进到另一个编辑界面。如下:
在这里插入图片描述

这个界面就干一件事:写提交信息。你上一步操作把提交合并了,但提交信息以哪次为准?这个你需要告诉git

上图未注释的三行代码就是我三次提交的信息,注释掉你不需要提交信息。剩下的就是最终的提交信息。你可以都注释掉,自己重新写。总之,这个界面任何未注释的内容都将成为提交信息的一部分。

同样是vim的操作,保存退出即完成了全部的操作。
在这里插入图片描述
可以看到我基于master切出的dev2分支的三次提交被压缩成一次提交。

之后再次把dev2分支合并到master分支即可。可以看到提交图谱很干净:
在这里插入图片描述
–完…


http://www.niftyadmin.cn/n/1382775.html

相关文章

源码安装干净卸载方式

find / -name "httpd*" --exec rm -rf {} \; #适用于源码安装方式卸载 yum install httpd php php-devel mysql mysql-devel http-devel #lamp环境 转载于:https://www.cnblogs.com/netsa/p/7199253.html

MySQL基础讲解(一)

MySQL简介MySQL架构与其他数据库服务器大不相同,它能够适应广泛的应用。足够灵活,能够适应高要求环境,例如Web应用。同时MySQL还适用于嵌入式应用、数据仓库、内容索引和分发软件、高可用的冗余系统联机事务处理系统(OLTP&#xf…

AutoreleasePool 释放分析

AutoreleasePool的作用 AutoreleasePool被称为自动释放池,在释放池中的调用了autorelease方法的对象都会被压在该池的顶部(以栈的形式管理对象)。当自动释放池被销毁的时候,在该池中的对象会自动调用release方法来释放资源&#x…

查看当前操作系统的编码

转载于:https://www.cnblogs.com/del88/p/5448898.html

Cannot use [chunkhash] or [contenthash] for chunk

filenameHashing在devServer中开启导致的问题 可以做如下判断: const isProd process.env.NODE_ENV production; module.exports { ... // 仅在打部署包的时候开启 filenameHashing: isProd, ... }

mysql存储过程中如何调用变量作为表名

蓝1的需求,定时将15天前的manager_info_‘日期’表删除。这个需求从操作系统端也可以实现,只要利用rm写一个脚本即可,很方便。但是如果数据库的表文件没有使用独立表空间,或者在没有操作系统文件权限的情况下,dba就需要…

SpringMVC参数绑定

2019独角兽企业重金招聘Python工程师标准>>> 参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑…

Kwickserver

Kwickserver欢迎来到Kwickserver的主页Kwickserver是什么? Kwickserver是一个易于安装的和易于使用的服务器应用程序,从CD安装在PC兼容的硬件和坚持webinterface配置和管理。 它是开放源码软件licencend在GPL下。 在我们找到更多的信息 使命宣言 ! 防火墙第一个应用程序…