合并代码还在用 git merge 吗?不妨试试 git rebase
点击下方“IT牧场”,选择“设为星标”
git merge 和 git rebase 目的都是将一个分支的 commit 合并到到另外一个分支中去,但两者有一定区别。
git merge
![](https://filescdn.proginn.com/0e0e00cd7790899753960359abd9c886/608936a1acf05c6b22d9ee78472f63bc.webp)
![](https://filescdn.proginn.com/8e3ce5a13d2a21cdc7b5630d162c6fa0/0c3c31fae19f97a406d9b96dae07fa1f.webp)
![](https://filescdn.proginn.com/f9091a6ad780ab948aee3aeaa3bad53e/2006abec56d8a68e0f5adcae7640cc39.webp)
![](https://filescdn.proginn.com/a503e70fb1827674c95950849b0bb5be/417d4d125828f036ab86e42ab7ac9e56.webp)
![](https://filescdn.proginn.com/0954a57760048305b8b067f0fb8eaf42/423608155f953899dccb7e587ffadd21.webp)
如果此时我push本地的提交到远程,就会被拒绝,因为远程和本地已经各自有commit了,我们常规的做法是git pull一下,在本地解决冲突,然后继续push,本质上git pull = git fetch + git merge
。
产生冲突:
![](https://filescdn.proginn.com/665c48c987801d5087c013b79fd4ca5b/81ef483bdf20df1620a6807ed0701038.webp)
![](https://filescdn.proginn.com/c3dd5248d0db195568e171e7f829dd0f/cd618325d2256a56fbb9f3418cd25eec.webp)
处理冲突:
![](https://filescdn.proginn.com/a3e80f21808b30f4adcf242ec6cd4eed/7274e25156916814656fa920cfcaf00d.webp)
重新走add commit 然后push,可以看到必须将合并当作一个新的commit:
![](https://filescdn.proginn.com/643350678a108e11886982e0652ca158/3c20cb87b6fcecc03cfb9297ddff74d8.webp)
git rebase
如果我们此时采用git pull --rebase,也就是=git fetch + git rebase
。
![](https://filescdn.proginn.com/59da2f085d09ae5e8fcbc1cf3362051a/3ee6dfd454d0078c8d63242a30a409e1.webp)
![](https://filescdn.proginn.com/3695b8f9260e5d7af3bfdfe8d375af06/41a12e3feefc08ee68b6ee1e79f34008.webp)
![](https://filescdn.proginn.com/1e71dbe252bba2d32018022e3c001a3a/8124147eb01e15bb7660cc70fc0ab6fc.webp)
git rebase
![](https://filescdn.proginn.com/2e16b14c0eba2edff3fd7d3bb4b28a09/4a84a35223243ff03c0ae07e5fa83d7f.webp)
![](https://filescdn.proginn.com/4b20ebf2df899e140e0e59febfef1178/0e088d2cea5a7c1e187ea805a91a7da1.webp)
总结
merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容。 merge 的提交历史记录了实际发生过什么,关注点在真实的提交历史上面。 rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面。 rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作。 merge 与 rebase 都是很好的分支合并命令,没有好坏之分,使用哪一个应由团队的实际开发需求及场景决定。 如果比较关注commit时间的话,还是用git merge,rebase会打乱时间线是不可避免的。
干货分享
最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!
•001:《Java并发与高并发解决方案》学习笔记;•002:《深入JVM内核——原理、诊断与优化》学习笔记;•003:《Java面试宝典》•004:《Docker开源书》•005:《Kubernetes开源书》•006:《DDD速成(领域驱动设计速成)》•007:全部•008:加技术群讨论
加个关注不迷路
喜欢就点个"在看"呗^_^
评论