git rebase记录

前言

学习git知识,《Pro Git》这本书很好,良心推荐。
之前一直觉得git rebase是个很高级,很难理解的命令,其实了解它的原理后,会发现它其实很简单易懂。
首先git rebase作用是整合来自不同分支的修改,跟它有相同作用的另外一个命令是git merge.

git rebase和git merge的区别

git rebase会修改仓库的提交历史,让提交历史变的很整洁;
git merge不会修改仓库的提交历史,能够保留所有的提交痕迹,包括好的,坏的;
总的原则:只对尚未推送或者分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作。

变基的基本操作

目前开发任务分叉到两个不同的分支,如下所示,有master和experiment分支:


图片.png

如果使用最容易整合分支的merge命令。它会把两个分支的最新快照(C3和C4)以及二者的共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照并提交。


图片.png

如果使用rebase的话,可以提取C4中引入的补丁和修改,然后在C3的基础上应用一次。使用rebase命令可以将提交到某一分支上的所有修改都移到另一分支上,就好像“重新播放”一样。
在这个例子中,可以检出experiment分支,然后将它变基到master分支上:

git checkout experiment
git rebase master

它的原理:首先找到这两个分支的最近共同祖先C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底C3,最后以此将之前另存为临时文件的修改依序应用。

执行结果如下:


图片.png

再回到master分支,进行一次快进合并:

git checkout master
git merge experiment

图片.png

你可能感兴趣的:(git rebase记录)