合并代码还在用 git merge 吗?互联网公司都用 git rebase!
来源 | juejin.cn/post/7001409038307033119
01、git merge 和 git rebase的区别 02、git merge 03、git rebase
01、git merge 和 git rebase的区别
目的都是将一个分支的commit合并到到另外一个分支中去
02、git merge
在gitlab上新建一个项目,push一个test文件上去
2.在本地修改test文件做两次commit,每次commit都在文件中加一句修改
![](https://filescdn.proginn.com/3324a2f82dd59a4d3373b66f834b21a9/ddd6ed4d1d56a776ea091b73b2165ac3.webp)
![](https://filescdn.proginn.com/25e119471644c6bf6b15bf452bb69f63/553d261c344b28a7195fb3245ebfe4eb.webp)
3.在远程仓库中直接修改文件并commit,模拟其他开发者的commit
![](https://filescdn.proginn.com/8404aa53c8302028ddf980c106666f05/c678650a6edc25fe7d91ef3730ab9002.webp)
![](https://filescdn.proginn.com/466f0154cc209e910df6110f18c28558/167d38b3cc20a98e3d6fcd4f74344437.webp)
4.如果此时我push本地的提交到远程,就会被拒绝,因为远程和本地已经各自有commit了,我们常规的做法是git pull一下,在本地解决冲突,然后继续push,本质上git pull = git fetch + git merge
产生冲突:
![](https://filescdn.proginn.com/2214a6b570b76443c557ffb721b664ec/74dca1e0440ec5c7155fb350bc006ed6.webp)
处理冲突:
![](https://filescdn.proginn.com/1e1c76d11ac19dfaa7ba87054d08eb04/2dbc8600cff1e98a224b2841033784f2.webp)
重新走add commit 然后push,可以看到必须将合并当作一个新的commit:
03、git rebase
如果我们此时采用git pull --rebase,也就是=git fetch + git rebase
一样本地commit2次,远程commit2次
![](https://filescdn.proginn.com/ed59753efe0b166198c3df3ecfbecc78/41b5e4fe8216a15a475478ca8095cd02.webp)
![](https://filescdn.proginn.com/e436a77761c7b518a55aa9f650f3fd45/a8d3e80bd409ea4eec1ce9dfc3d3b929.webp)
使用可以看到git pull --rebase,还是会提示我们去处理冲突,但是从git log 上可以看出明显已经发生了rebase,也就是变基,本地分支基于了远程的最新commit,而不是上次的本地commit
![](https://filescdn.proginn.com/6491945e638bc0d3811c777b268c8e3c/ed94ea4b8c7d0a06aec47ad24bf65c7f.webp)
![](https://filescdn.proginn.com/59370f3774d9e7d2e820306267c8860c/5a63493e276cd14a90a6abf9409743ff.webp)
处理冲突,每处理完一次本地commit冲突,用git add标记冲突已处理完,用git rebase --continue继续处理下一个本地commit,也可以先用git rebase -i将本地的commit合并为一个commit,这样git pull --rebase就能一次处理所有的冲突
![](https://filescdn.proginn.com/12c45d79fd7747bf4e29d6b0d9dde744/702adbc55b6692e67b5c60e48ec7d3d5.webp)
push到远程之后,在分支图可以明显看到,跟merge的区别在于,rebase不会产生分支,并且也不会产生新的提交
![](https://filescdn.proginn.com/f1cbd544dc32808cbbbd8af3d7de7d2e/0a0f4ad3c93310707423843c7d7ca085.webp)
END
推荐:
最近好文
1、IntelliJ IDEA 的 Win 和 Mac 快捷键大全!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
评论