对比 git pull和 git pull --rebase的使用区别
首选区别这两个操作:
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
现在来看看git merge和git rebase的区别:
- 远程分支
origin(master)
,两位同学"77"和"88" 分别克隆创建本地仓库77(master)
和88(master)
。
77(master)
/
A---B origin(master)
\
88(master)
- "77"同学完成代码C和D,并执行commit,push命令。"88"同学完成代码C和D,并执行commit命令。如下结果:
77(master)
/
A---B---C---D origin(master)
\
E---F 88(master)
- “88” 同学需要先
pull
才可以push
。那区别就来了:
git pull
$ git pull
$ git add . // 发生冲突并解决后执行 add 和 commit,无冲突跳过。
$ git commit -m '解决冲突'
$ git push
77(master)
/
A---B---C---D---G origin(master)
\ / \
E-------F 88(master)
git pull --rebase
$ git pull --rebase
$ git add . // 发生冲突并解决后执行 add 和 rebase,无冲突跳过。
$ git rebase --continue
77(master)
/
A---B---C---D---E'---F' origin(master)
\
88(master)
在rebase的过程中,有时也会有conflict。这时Git会停止rebase并让用户去解决冲突。解决完冲突后用
git add .
命令去更新这些内容,然后不用执行git-commit,直接执行git rebase --continue
,这样git会继续apply余下的补丁。
git rebase --abort
执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有git-pull
时的状态,简单来说就是撤销rebase。
git rebase --skip
执行之后,引起冲突的git-commit(s)
会被丢弃。因此,在使用skip时请慎重。