然后我们进行回退,又试了一下git pull --rebase 操作,其实该操作就是将merge操作改成了变基操作。将我们后来的C4, C5两个提交变基到C3上,从效果上看,就和没有执行reset操作一样。具体如下所示:
三、cherry-pick和交互式rebase
之所以将这两个放在一块,是因为使用两者都可以达到相同的目标,只是操作不同。下方会分别介绍。
1. cherry-pick
下方我们来看一下cherry-pick这一关,下方我们需要将 bugFix 分支上的 C3 、side 分支上的 C4 以及another分支上的C7通过cherry-pick的形式拿到 master分支上。
下方主要还是使用了cherry-pick来达到我们的目标的,主要还是一个命令的使用 , 在 master 分支上执行 git cherry-pick C3 C4 C7, 可以将C3 C4 C7这三个提交摘到master分支上了。具体如下所示:
2、交互式rebase
解析我们来使用交互式rebase来做节点的迁移,当然下方的操作也是可以使用cherry-pick来完成的。左边是我们要完成的目标,右边则是初始化状态。我们需要将C2 C3 C4 C5的提交顺序转换成C3, C5, C4的顺序。
下方就是我们交互式rebase操作的具体步骤,本质上就一个命令 git rebase -i HEAD~4, 然后操作相关的节点即可。
3、交互式rebase实践
接下来我们来看一下在真正的git分支上是如何使用交互式rebase操作的。下方是做交互式rebase操作之前的分支关系。目前所在的分支是bugFix, 其中有4个提交。
现在要做的是在bugFix上进行交互式rebase, 在终端中输入 git rebase -i master, 目的是将 bugFix 分支上的提交通过交互式rebase的方式将其变基到master分支上。下方是输入git rebase -i maste命令后所出现的界面,我们可以通过vim编辑器编辑将要执行的变基操作。下方是对应的几种交互式命令
pick 应用相关提交。
reword 修改commit信息。
edit 对提交进行编辑,然后使用git commit -amend进行提交。
squash 是把多个提交合并成一个提交
fixup 与squash差不多,不过会抛弃掉本次提交的log信息
exec 执行shell命令
drop 删除提交
下方我们对相关操作执行的交互式的操作:
首先使用 reword 来操作下方截图中的第一条操作,用来修改message。
然后交换了第二行和第三行的pick的位置
然后对第四行的提交执行edit命令对其进行修改
然后删除 编号为04的提交
点击回车键的话会弹出下方的vim编辑器来让你修改 f53560c 这个操作的commit message,修改完毕后进行保存即可。
下方是在rebase合并时产生了冲突,我们需要对冲突进行解决。解决完毕后,执行 git add 将冲突文件进行存储,并且执行git rebase --continue 来继续我们的rebase操作。