命令使用场景
多人在同一分支进行开发
场景模拟
git pull
- 假设有两个开发人员在名为“zhangdong”的分支上进行开发且代码已同步
- 开发1修改代码并add、commit(commit名为“第二次提交”)、push代码到“zhangdong”分支
- 开发2 修改代码并add、commit(commit名为“u”)、push代码到“zhangdong”分支,会得到失败提示,需要拉取远程最新代码
- 开发2运行“git pull”命令,假设没有文件冲突的情况下,会有需要进行merge的提示
-
开发2进行Merge操作,代码会合并同步,这时通过命令“git log --graph --decorate --oneline --all”看下分支图谱:
git pull --rebase
- 假设有两个开发人员在名为“zhangdong”的分支上进行开发且代码已同步
- 开发1修改代码并add、commit(commit名为“第三次提交”)、push代码到“zhangdong”分支
- 开发2 修改代码并add、commit(commit名为“u”)、push代码到“zhangdong”分支,会得到失败提示,需要拉取远程最新代码
-
开发2运行“git pull --rebase”命令,假设没有文件冲突的情况下,合并成功,,这时通过命令“git log --graph --decorate --oneline --all”看下分支图谱:
场景分析
下面是两次操作放在一起的图,方便观察:
从最终的分支图谱来对比使用 “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多被用在两个本地分支的合并上,图谱同样显示清晰,达到统一提交的目的
用哪个???
这个其实看个人和公司的习惯,并没有严格规定。但是从我的使用习惯来讲,更希望将我的提交放到已经提交到远程的代码后面显得更加的合理,且没有各种分支也显得更加的清晰。