git pull --rebase的作用是什么,它与git pull有什么区别?

      在push代码时,会提示使用git pull命令,也就是拉取远端代码,更新我们的仓库,那么为什么又要加个 --rebase命令呢?下面来说说这个问题,先从这两命令开始。

      git pull = git fetch + git merge FETCH_HEAD 
      git pull --rebase =  git fetch + git rebase FETCH_HEAD 

      二者的区别是,在fetch之后的操作不同,merge与rebase的不同。

      假设当前master的提交如下:

git pull --rebase的作用是什么,它与git pull有什么区别?

      如果是你或者你的同事在cid2点,突然撇出一个分支,假设是tmp分支,并且在tmp上做了提交,

git pull --rebase的作用是什么,它与git pull有什么区别?

       功能完成后,想提交到master上,在master执行git merge tmp,然后会得到如下结果:

git pull --rebase的作用是什么,它与git pull有什么区别?

        新增了一次提交记录cid6, 似乎也没有什么问题。如果你装了小乌龟,查看提交日志,可能就是下面的样子:

git pull --rebase的作用是什么,它与git pull有什么区别?

       那么来看看git rebase,  在master执行git rebase tmp,操作之后的分支如下:

git pull --rebase的作用是什么,它与git pull有什么区别?

       二者对比可知,rebase没有产生新的节点,使用rebase的git演进路线(提交树)是一直向前的,这样在版本回退时也很容易,用merge的git路线是跳跃的,如果版本回退你也找不到自己想要的版本,如果在merge时出现了冲突那就麻烦了,当前merge就不能继续进行下去,需要手动修改冲突内容后,add,commit, push. 而rebase 操作的话,会中断rebase,同时会提示去解决冲突。解决冲突后, 再执行 git rebase –continue 继续操作,再push.

       想要更好的提交树,建议使用rebase操作会更好一点,这样可以线性的看到每一次提交,并且没有增加提交节点。

       那么到此git pull --rebase与git pul的区别也讲清楚了。