git pull --rebase,你真的了解吗?git merge,git rebase呢?

270 阅读1分钟

首先一共两点

  • git pull --rebase向远程仓库更新时不会产生merge commit节点,会将本地仓库的commit合并到远程仓库,形成一个线性的提交树。git pull 向远程仓库更新时会自动生成一个merge commit节点。
  • git pull --rebase 在向远程拉取代码的时候产生冲突的时候处理不同。进一步来说就是git pull产生的冲突需要手动解决后git add .,git commit,git push。如果是git pull --rebase的话产生冲突时会中断操作,此时解决冲突解决完毕后git rebase --continue 继续进行 也可以使用 git rebase --skip忽略冲突。

第一点

首先 git pull 相当于是一个组合命令。
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

git fetch 命令只是简单的从远程仓库拉下来最新代码不做合并操作。
git merge 和 git rebase 都是进行合并代码的命令。
如图: 当前maser提交记录

a ==> b ==> c ==> d => e             

此时你在master拉出一个dev分支

a ==> b ==> c ==> d   master         
       \\
         e ==> f   dev

git merge:

a ==> b ==> c ==> d  ==> g   master   
       \\              //
        \\            //
         \\          //
            e ==> f dev

git rebase

a ==> b ==> e ==> f ==> c’ ==> d’    master

可以很清楚的了解之间的区别。
需要注意的是 git pull --rebase 需要本地工作区必须干净否则会报错

image.png rebase 遇到冲突的时候 使用git rebase --continue 解决冲突 也可以 终止操作 git rebase --abort