Git操作:多个commit合并,并修改提交信息

摘要:
我看到作者说Git可以实现多个提交操作,并将它们合并为一个有意义的提交。我看到,1~5份提交的五份文件都是为了构建提交信息而进行的调整。我将构建调整1信息修改为有意义的提交,以验证提交和修改的合并提交信息是否可以同时合并。保存和修改后,WQ使用gitlog——相当于查看提交日志。但是,提交信息是带有pick标记的提交信息,这表示不能修改带有pick的提交信息。修改上次提交描述的Git命令:

写在前边

写这篇文章主要是记录下,很久之前读《重构-改善既有代码的设计》时,看到过作者讲过Git可以实现多个细碎操作commit合并为一个有意义的提交,当时查过一些中文信息,写得不是很清晰。正巧有一个Git管理的脚本仓库需要大量修改,尝试践行下书中的内容:完成一小部分功能就作一次本地commit,直到完成修改后,合并成一个有意义的提交。

这样做是有意义的,每一次小小的commit保证了工作进度不会因频繁的检查而效率低下(每一次提交之前仔细检查,提交后就无需再重复检查了,也有助于提升重构者的信心)。

实验准备

试验仓库中本地提交了5次,领先远端仓库。我们的目的是将这5次提交合并成一个commit,并且修改最终的提交信息。

git log --pretty

Git操作:多个commit合并,并修改提交信息第1张

合并多个commit

Git 命令:

git rebase -i HEAD~5
  • 上边的数字5即合并的版本,之前看到提交信息 构建调整1~5 这五个提交。
  • Git 没有一个改变历史工具,但是可以使用变基来变基一系列提交,本文的合并请求就是用变基实现的。

下图中是已经修改后的,之前这5次提交的前边都是pick,构建调整1 信息我修改成了一个有意义的提交,为了验证是否能同时合并commit与修改合并后的提交信息。

按照默认顺序,可以将除第一个提交外,都使用 fixupsquash 进行标记,最终你将得到这些commit向上合并,最终变成一个,提交信息是 pick 标记的信息。

Git操作:多个commit合并,并修改提交信息第2张

这里只关注 picksquashfixup 这三个命令:

  • pick:使用此提交不做操作
  • squash:将指定的提交合并到上边的pick请求中,保留提交信息
  • fixup:与 squash 类似,但不保留提交信息

保留提交信息是指将最终合并的提交信息包含所合并提交信息,我做了尝试如图:
Git操作:多个commit合并,并修改提交信息第3张

使用 :wq 保存修改后
Git操作:多个commit合并,并修改提交信息第4张

使用 git log --pretty 查看提交日志,可以看到commit已合并成了一个新的请示,但提交信息是 pick 标记的 commit 提交信息,说明pick标记的提交信息无法修改。
Git操作:多个commit合并,并修改提交信息第5张

合并多个请求的目标已经完成,接下来修改提交说明。

修改最后一次提交说明

Git 命令:

git commit --amend

执行命令,修改提交信息后,:wq 保存退出。
Git操作:多个commit合并,并修改提交信息第6张
Git操作:多个commit合并,并修改提交信息第7张

git log --pretty 查看提交日志
Git操作:多个commit合并,并修改提交信息第8张

提交信息已经更新,上一步骤的合并多请求也已完成,推送到远端仓库就可以了。

结尾

通过本文的描述实践了合并多个commit并修改提交信息,感觉这个功能很好用,作为有一定代码洁癖的我,对提交日志也有一定洁癖,毕竟后续日子提交日志可以帮我们快速定位过去的修改。

另外 git rebase 命令给了 editreword 本身也是调用了 git commit --amend 修改的提交信息。为了表示 pick 标记的提交信息不会修改,才做的验证。

参考

-END-
本文同步于本人CSDN

免责声明:文章转载自《Git操作:多个commit合并,并修改提交信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java代理模式 (转)文件、文件夹的rwx权限及新建文件、文件夹的默认权限下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

020-Spring Boot 监控和度量

一、概述   通过配置使用actuator查看监控和度量信息 二、使用 2.1、建立web项目,增加pom <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g...

使用命令把SpringBoot项目打包成可运行的jar包(简洁,操作性强)

前几天接到一个需求,要把原系统中一个数据处理小功能搬出原系统,拉出来单独做一个SpringBoot项目,然后打成jar包扔到Windows服务器上运行,这样数据处理的时候如果遇到堵塞就不至于整个系统都当掉了,今天正好五一放假第二天,吃过楼下的紫燕百味鸡,正好没啥事写下这篇博客,希望对路过的人有所帮助 话不多说,直接上干货,非常简单,只需要一个命令即可 只需...

虚拟机CentOS7三台集群配置网络

准备工作,VMware中安装一台Centos7,然后完全克隆出两个,一共三台虚拟机,下面是对三台虚拟机的网络进行配置    这三台环境一模一样,分别命名为:Master、Node1、Node2,在配置网络之前,三台虚拟机先同时开启,开始集群网络配置: 第一、进入虚拟机网络编辑器,选择VMnet8, 选择NAT模式,确定子网IP段,我的电脑一进来默认是192...

为企业服务器配置RAID0、raid1、 raid10、raid5、raid6、等常见RAID

RAID卡操作手册先从开机启动时如何进入管理界面开始介绍: 1)当机器开启后,显示器出现阵列卡检测信息时,会提示用户是否要进入管理界面对阵列卡进行操作,此时按下Ctrl + H 即可,如下图 2)按下Ctrl + H后,进入控制器选择界面,若只有一张卡,便如图下所示,多张卡会分行显示,选择相应的控制器后,按start进入管理界面。 3)若出现如图下所示:F...

Linux学习笔记之passwd:Authentication token manipulation error_错误的解决办法

如果在linux中,不管是root用户还是普通用户登录后,修改自己的密码,出现—passwd:Authentication token manipulation error—错误的解决办法: root自己修改密码失败 普通用户修改密码失败   1.报这样的错误是:密码:身份验证令牌操作错误,一般是密码文件的权限的问题,不过也有可能是根目录空间满。 用...

Kubernetes之应用升级回滚弹性伸缩

  通过命令可以替换镜像升级 kubectl set image   以上一篇的web.yaml为例    把镜像替换成nginx kubectl set image deployment web java=nginx   三个副本滚动升级,新容器处于运行状态会删除旧容器      再次访问无法访问了    因为之前java的后端端口是80...