今天我们来讲解下git rebase命令,以及git rebase命令与git merge命令的区别。
git rebase图解:
假设我们目前有master、demo两个分支,而且demo分支上从master分支上切出来的:
从上图中可以看到,我们从C2提交点切出来了demo分支,同时master分支上有了新的提交C4,同时demo分支上也有两个新的提交:C3和C5。此时我们执行下面两条命令:
git checkout demo #先切换到demo分支
git rebase master #将demo分支进行“变基”处理
这样做之后便会成为下面这个样子:
可以看到对demo分支进行“变基”处理之后,相当于是把demo分支嫁接到了master分支的最新的提交C4上,demo分支上特有的提交C3和C5会在C4之后。
merge命令图解:
还是假设我们现在有master、demo两个分支,demo分支是从master分支上的C2提交点切出来的:
此时我们执行以下命令:
git checkout master
git merge demo
就会将demo分支合并到master分支,同时会生成一个merge提交:C7:
而最终master分支长这样:
可以看到,demo分支上的所有提交点都到了master分支上,而且所有提交点都按照提交时间在master上进行了顺序排列。
git rebase vs git merge:
git rebase branchA 是对当前分支进行“变基”处理,基点就是branchA分支的最新提交;
git merge branchA 是将branchA分支上的提交合并到当前分支上;
git rebase之后,当前分支的历史就变了,比如本来是从C2点切出来的,变基之后,就变成了从C4点切出来了。而git merge之后,不会改变提交历史,而且所有提交点还是会按照提交时间顺序排列在分支上,但是会有一个merge提交,如上图中的C7提交。
所以,如果想保留完整的git提交历史记录,建议还是使用git merge。