11-git-7-rebase

概述

将当前分支移植到指定分支或指定commit之上。

Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

git rebase master
git rebase c2

将当前分支移植到master分支或c2提交记录之上。

优点:

  • Rebase 使你的提交树变得很干净, 所有的提交都在一条线上

缺点:

  • Rebase 修改了提交树的历史

交互式

-i,—interactive

-i参数会打开互动模式,让用户选择定制rebase的行为。

git rebase -i HEAD~4

上述命令指定了对当前分支的最近四次提交进行操作

功能

  • 调整提交记录的顺序(通过鼠标拖放来完成)
  • 删除你不想要的提交(通过切换 pick 的状态来完成,关闭就意味着你不想要这个提交记录)
  • 合并提交。

多次rebase

当你想将多个分支合成一条线性的提交记录时,按照提交顺序切换相应的分支,然后rebase到相应顺序节点的分支

git merge 和 git rebase 的区别

不同于 git rebase 的是,git merge 在不是 fast-forward(快速合并)的情况下,会产生一条额外的合并记录,类似 Merge branch 'xxx' into 'xxx' 的一条提交信息。

另外,在解决冲突的时候,用 merge 只需要解决一次冲突即可,简单粗暴,而用 rebase 的时候 ,需要依次解决每次的冲突,才可以提交。

git merge

git rebase

使用情况

当需要保留详细的合并信息的时候建议使用git merge,特别是需要将分支合并进入master分支时;

当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时,可以尝试git rebase

一些开发人员喜欢保留提交历史,因此更偏爱 merge。而其他人(比如我自己)可能更喜欢干净的提交树,于是偏爱 rebase。仁者见仁,智者见智。