git rebase操作

git rebase 算是git里的高级操作了,他主要用来解决两种情况。

  1. 有时候我们对于一个简单的需求提交了多次,这样非常不利于code review,所以我们需要将多次提交合并成一次提交。(即多次commit合并成一次commit)
  2. 你从master创建一个分支开发,然后你的同事又从master创建一个分支开发,但是他比你先提交,所以远程的master分支比你的本地master走的远,所以现在要将你的分支代码基于远程的master来实现提交
第一种情况
  1. 我们先创建一个文件test.txt,然后提交到master
    git rebase操作
    文章图片

    git rebase操作
    文章图片
  2. 我们创建一个分支rebasetest, 然后修改提交
    git rebase操作
    文章图片
  3. 我们对这个分支的test.txt进行多次修改提交,分别添加b、c、d,提交b、c、d
    git rebase操作
    文章图片

    git rebase操作
    文章图片
  4. 接下来就要用git rebase来将提交a、b、c合并成一次提交
    执行git rebase -i head~3命令,表示将最近的3次提交进行rebase操作,然后进入下面编辑界面,包含了最近3次提交的信息。
    git rebase操作
    文章图片

    我们将下面两次提交的pick操作改成s(是squash的缩写),代表将当前提交合并到上面的提交,然后保存退出(退出后进行合并可能产生冲突,这时候需要我们解决冲突,然后执行git add . 和git rebase --continue来继续rebase操作。具体的会在第二种情况有操作)。
    git rebase操作
    文章图片

    合并完成后就会转到下一个编辑界面,需要我们编辑提交的信息,默认为3次提交信息的合并
    git rebase操作
    文章图片

    这里我们修改一下提交信息,修改成最后一次的提交信息,即把b、c注释掉,然后保存退出
    git rebase操作
    文章图片

    我们再来看一下提交的日志,已经成功将3次提交合并
    git rebase操作
    文章图片
第二种操作
【git rebase操作】我们回到master分支,然后修改test.txt,提交信息为e
git rebase操作
文章图片

这个时候我们对比一下master和rebasetest两个分支的log信息,如下
git rebase操作
文章图片

git rebase操作
文章图片

我们看到,rebasetest分支是在master提交a后创建并修改的,但这个时候master已经有了e的提交信息,所以我们认为master分支走的比rebasetest分支远(在开发中,我们是以master为主要分支的,所有其他分支的代码都会合到master),所以我们需要先在rebasetest分支上执行rebase操作,然后再将rebasetest分支合并到master
git rebase操作
文章图片

提示执行失败,那是因为自动合并时产生了冲突并进入了一个临时分支,我们看一下现在test. txt的内容
git rebase操作
文章图片

所以现在我们需要解决冲突,解决冲突可以看我前面的文章,下面是我解决后的内容
git rebase操作
文章图片

解决后,我们执行git add .保存修改,然后这些git rebase --continue 继续执行rebase操作
git rebase操作
文章图片

当rebase操作完成后,我们会重新回到rebasetest分支,我们看一下现在的git log
git rebase操作
文章图片

我们已经成功将master分支的修改合并到了rebasetest分支。现在我们将rebasetest分支的修改合并到master
git rebase操作
文章图片

我们看到合并非常顺利,因为我们已经在rebase的时候解决了冲突,再来看一下git log
git rebase操作
文章图片

log非常干净,根本没有合并分支的提交信息,这样就保证了提交的简洁,非常有利于查看提交信息和各个提交修改了什么。
git rebase --abort
当我们在执行rebase操作是,如果出现我们无法掌控我情况ian,可以随时执行git rebase --abort操作来取消rebase操作,就会恢复到rebase之前的状态

    推荐阅读