GIT使用记录 - git pull 和 git pull --rebase 的区别

命令使用场景

多人在同一分支进行开发

场景模拟

git pull
  1. 假设有两个开发人员在名为“zhangdong”的分支上进行开发且代码已同步
  2. 开发1修改代码并add、commit(commit名为“第二次提交”)、push代码到“zhangdong”分支
  3. 开发2 修改代码并add、commit(commit名为“u”)、push代码到“zhangdong”分支,会得到失败提示,需要拉取远程最新代码
  4. 开发2运行“git pull”命令,假设没有文件冲突的情况下,会有需要进行merge的提示
  5. 开发2进行Merge操作,代码会合并同步,这时通过命令“git log --graph --decorate --oneline --all”看下分支图谱:


    git pull
git pull --rebase
  1. 假设有两个开发人员在名为“zhangdong”的分支上进行开发且代码已同步
  2. 开发1修改代码并add、commit(commit名为“第三次提交”)、push代码到“zhangdong”分支
  3. 开发2 修改代码并add、commit(commit名为“u”)、push代码到“zhangdong”分支,会得到失败提示,需要拉取远程最新代码
  4. 开发2运行“git pull --rebase”命令,假设没有文件冲突的情况下,合并成功,,这时通过命令“git log --graph --decorate --oneline --all”看下分支图谱:


    git pull --rebase

场景分析

下面是两次操作放在一起的图,方便观察:


全部

从最终的分支图谱来对比使用 “git pull” 和 “git pull -- rebase” 的区别,还是很明显的。git pull相比于git pull -- rebase 多出了一个分叉,且开发1和开发2的提交顺序在图谱中也是反过来的。产生这种区别的原因是因为拆解后的命令不同:

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

至于git fetch、git merge、git rebase的功能细节,大家可以查看git官方文档或者参考文章 使用git fetch和git rebase处理多人开发同一分支的问题

注:git rebase多被用在两个本地分支的合并上,图谱同样显示清晰,达到统一提交的目的

用哪个???

这个其实看个人和公司的习惯,并没有严格规定。但是从我的使用习惯来讲,更希望将我的提交放到已经提交到远程的代码后面显得更加的合理,且没有各种分支也显得更加的清晰。

你可能感兴趣的:(GIT使用记录 - git pull 和 git pull --rebase 的区别)