前面介绍的git rebase命令有一种强大的互动模式。接下来我们介绍怎么使用这种模式来改动过去的历史记录。查看当前的状态。 启用互动模式,使用git rebase指令,加入-i参数
git rebase -i 28a728a
这个指令会弹出一个Vim编辑器。 这个需要注意的是: 1、上面的顺序是与git log指令的结果是相反的 2、上面的picks是指保留这次Commit,不做改动。 把pick改成reword,表示要改动这两次的Commit信息。存档离开之后会出现一个Vim编码器画面。把内容改成add cat “kitty” 存档离开又会弹出另外一个个Vim编辑器界面 这是第二次的reword,把内容改成add cat sherly,存档离开之后,Git就会完成剩下的工作。 这样就把两次记录修改了。看起来只是改了信息,其实Rebase的时候,Commit对象不只是剪切、粘贴而已。因为要接前一个Commit,所以会重新计算并计算出一个新的Commit对象。 要想取消这次rebase
git reset --hard ORIG_HEAD
接下来我们继续前进,试着尝试把多个Commit合并为一个Commit 每次只添加一个文件,太过繁琐了,我们把这几个合并,使用Rebase的互动模式。
git rebase -i d5de0a6
把pick改成squash 最后一行的e3b218c会和前一个Commit e76d989合并,也就是add dog1会和add dog2合并在一起。以此类推。然后在弹出Vim编辑器界面,修改为add all cats和add all dogs。最后效果如下 查看此时的Commit记录 我们也可也反过来操作,把一个Commit拆解成多个Commit。还是使用Rebase的互动模式。
git rebase -i d5de0a6
把要拆解的那个Commit的pick改成edit,我们把aee3c35的pick改成edit,在执行到aee3c35的时候这个Commit就会停下来。 查看当前的状态。 这时因为要把当前这个Commit拆解成两个Commit,所以要使用reset指令
git reset HEAD^
查看此时的状态 可以看到这两个文件都被拆解出来了,而且还处于未跟踪的状态。add然后commit 但现在还是处于Rebase状态。所以要让Rebase继续执行。
git rebase --continue
查看此时的Commit记录
|