Rebase的妙用
当我们一个分支有多次提交,在合并到其他分支的时候,往往会出现当前分支的每次提交都与要合并到的分支出现冲突,所以我们有多少次冲突的提交,就要解决多少次冲突。
这显然太过于麻烦了,我们其实想要的基本都是最后一次提交的版本,因此,只需要解决最后一次提交的结果,和中间每次提交中有用的信息。
所以这时候我们就可以用 rebase 来帮助我们将这些提交的信息整理到一起。
可以看到,我们现在有四次提交,但是我们需要的只有最后一次,所以这时候,我们就可以使用git rebase -i
来操作了。
我们执行git rebase -i HEAD~4
这个命令:
可以看到,这时候出现了一个 vim
编辑框,如果不太熟悉 vim
的话,稍微学一学,键入 i
即可开始编辑
它这里的 pick
代表的是选择,我们将其改为 s
也就是底下描述的 squash
看看它的描述我们就知道了,使用该提交,但是结合到之前的提交中。
我们将opt3、opt4、opt5这几次提交都标记为 s
然后保存并退出 vim
这时候,我们会进入到另外一个 vim
编辑界面
这一次,我们要编辑的是我们合并后的提交的信息,因为我们合并了原先的提交信息,自然也要重新修改对应的备注,这时候,一般情况下我们会只保留最重要的信息,直接将其他的都删除即可,但是如果是有特殊的需求,需要更改对应的信息,那就按照自己的要求来编写即可。
我们这里将其修改为对应的信息,然后保存并退出编辑。
这时候我们就已经完成了 git rebase
,下一步,我们需要利用强推,将我们的本地分支推送到远程分支上面,因为我们现在分支的信息已经跟远程并不一样了,而且我们的信息是最为准确的,最新的,所以要将远程分支同步为我们的分支,因此要使用强推。
这时候查看远端的信息,就可以看到,我们的 git log
已经被修改为只有我们变基之后的了。
这样子我们的这个提交信息就清晰了很多,而且在合并到其他分支的时候,就不用再去处理多次的冲突了。
更进一步的思考
有一种观点认为,仓库的提交历史即是 记录实际发生过什么。 它是针对历史的文档,本身就有价值,不能乱改。 从这个角度看来,改变提交历史是一种亵渎,你使用 谎言 掩盖了实际发生过的事情。
如果由合并产生的提交历史是一团糟怎么办? 既然事实就是如此,那么这些痕迹就应该被保留下来,让后人能够查阅。
要我说,放他的狗屁,md都错了还不去改它,等着人家看到的时候犯迷糊是吧,既然有这个工具,我们就应该尽力用好它。