Git操作:多个commit合并,并修改提交信息
写在前边
写这篇文章主要是记录下,很久之前读《重构-改善既有代码的设计》时,看到过作者讲过Git可以实现多个细碎操作commit合并为一个有意义的提交,当时查过一些中文信息,写得不是很清晰。正巧有一个Git管理的脚本仓库需要大量修改,尝试践行下书中的内容:完成一小部分功能就作一次本地commit,直到完成修改后,合并成一个有意义的提交。
这样做是有意义的,每一次小小的commit保证了工作进度不会因频繁的检查而效率低下(每一次提交之前仔细检查,提交后就无需再重复检查了,也有助于提升重构者的信心)。
实验准备
试验仓库中本地提交了5次,领先远端仓库。我们的目的是将这5次提交合并成一个commit,并且修改最终的提交信息。
git log --pretty
合并多个commit
Git 命令:
git rebase -i HEAD~5
- 上边的数字5即合并的版本,之前看到提交信息
构建调整1~5
这五个提交。- Git 没有一个改变历史工具,但是可以使用变基来变基一系列提交,本文的合并请求就是用变基实现的。
下图中是已经修改后的,之前这5次提交的前边都是pick,构建调整1
信息我修改成了一个有意义的提交,为了验证是否能同时合并commit与修改合并后的提交信息。
按照默认顺序,可以将除第一个提交外,都使用
fixup
或squash
进行标记,最终你将得到这些commit向上合并,最终变成一个,提交信息是pick
标记的信息。
这里只关注 pick
、squash
、fixup
这三个命令:
pick
:使用此提交不做操作squash
:将指定的提交合并到上边的pick请求中,保留提交信息fixup
:与squash
类似,但不保留提交信息
保留提交信息是指将最终合并的提交信息包含所合并提交信息,我做了尝试如图:
使用 :wq
保存修改后
使用 git log --pretty
查看提交日志,可以看到commit已合并成了一个新的请示,但提交信息是 pick
标记的 commit 提交信息,说明pick标记的提交信息无法修改。
合并多个请求的目标已经完成,接下来修改提交说明。
修改最后一次提交说明
Git 命令:
git commit --amend
执行命令,修改提交信息后,:wq
保存退出。
git log --pretty
查看提交日志
提交信息已经更新,上一步骤的合并多请求也已完成,推送到远端仓库就可以了。
结尾
通过本文的描述实践了合并多个commit并修改提交信息,感觉这个功能很好用,作为有一定代码洁癖的我,对提交日志也有一定洁癖,毕竟后续日子提交日志可以帮我们快速定位过去的修改。
另外 git rebase
命令给了 edit
与 reword
本身也是调用了 git commit --amend
修改的提交信息。为了表示 pick
标记的提交信息不会修改,才做的验证。
参考
-END-
本文同步于本人CSDN