冲突还在用git merge吗(互联网公司都用git rebase)
git merge 和 git rebase的区别
目的都是将一个分支的commit合并到到另外一个分支中去
git merge
- 在gitlab上新建一个项目,push一个test文件上去
文章图片
2.在本地修改test文件做两次commit,每次commit都在文件中加一句修改
文章图片
【冲突还在用git merge吗(互联网公司都用git rebase)】
文章图片
文章图片
3.在远程仓库中直接修改文件并commit,模拟其他开发者的commit
文章图片
文章图片
4.如果此时我push本地的提交到远程,就会被拒绝,因为远程和本地已经各自有commit了,我们常规的做法是git pull一下,在本地解决冲突,然后继续push,本质上git pull = git fetch + git merge
产生冲突:
文章图片
文章图片
处理冲突:
文章图片
重新走add commit 然后push,可以看到必须将合并当作一个新的commit:
文章图片
git rebase
如果我们此时采用git pull --rebase,也就是=git fetch + git rebase
- 一样本地commit2次,远程commit2次
文章图片
文章图片
- 使用可以看到git pull --rebase,还是会提示我们去处理冲突,但是从git log 上可以看出明显已经发生了rebase,也就是变基,本地分支基于了远程的最新commit,而不是上次的本地commit
文章图片
文章图片
- 处理冲突,每处理完一次本地commit冲突,用git add标记冲突已处理完,用git rebase --continue继续处理下一个本地commit,也可以先用git rebase -i将本地的commit合并为一个commit,这样git pull --rebase就能一次处理所有的冲突
文章图片
- push到远程之后,在分支图可以明显看到,跟merge的区别在于,rebase不会产生分支,并且也不会产生新的提交
文章图片
推荐阅读
- 学无止境,人生还很长
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error
- 幸福的婚姻不争对错!读《你要的是幸福还是对错》有感。
- 高大上还是路边摊
- 晚点的末班车
- 昨晚做春梦了吗(教给你怎么做最厉害的!梦里还有维多利亚的天使)
- 阴雨
- 人生游戏--是游戏,还是人生()
- 请叫我冉责编
- 凡有的,还要多给他,凡没有的,连他现有的也要拿走