git pull == git fetch + git merge
git pull --rebase == git fetch + git rebase
拆解来看这两个命令就是在拉取远端代码后,是合并还是进行变基操作。
假设当前有三个提交A,B,C
,并且分支feature
都与远程代码同步。
我们在feature
上做了一些修改,并产生了E
提交,远程也有用户进行了更新到了D
提交。
此时我们需要git fetch
获取最新的代码,然后git merge
解决冲突后重新git add
git commit
,得到F
提交。最后git push
即可成功推送,得到如下的关系
而使用git rebase
将会创建一个新的提交F
,F
的文件内容和上面F
的一样,但我们将 E 提交废除,当它不存在(图中用虚线表示)。由于这种删除,避免了菱形的产生,保持提交曲线为直线。
在rebase
的过程中,有时也会有冲突,这时 Git 会停止rebase
并让用户去解决冲突,解决完冲突后,用git add
添加修改的文件,然后不用执行git commit
,直接执行git rebase --continue
,这样 git 会继续 apply 余下的补丁。