git merge和git rebase的区别
拿 feat 和 develop 分支举例
merge
将feat分支的更改合并到develop分支中,然后创建一个新的“合并提交”,所以会保留这种分叉结构,也就是保留历史(时间顺序
rebase
变基合并,会先去找这两个分支的公共节点base,然后把当前分支base之后的所有节点提交记录截取下来,嫁接到develop分支最新提交的后面,嫁接的这部分分支会成为最新的提交(跟原来的commit号不一样),打乱了原来的提交结构和时间顺序,成为线性结构
不会产生新的节点
在产生冲突时
merge 需要解决冲突之后提交一个合并提交;并且解决冲突之后保留记录
rebase 需要逐个解决冲突并且继续变基;不会保留记录
优缺点
综合下来
Merge具有更高的可追溯性,能够找到整个提交历史,而Rebase则让pr更整洁且易于审核
rebase 的风险及规避方法

- 简述:a和b都用一个分支开发,此时a修改本地代码并用rebase强制推送,若b没有同步远程代码,直接推送代码就会因为远程被修改而报错,如果再想拉取远程代码也会报错显示重复提交
- 本质:使用rebase必须用git push --force强推
- 方法:
- 避免强制推送共享分支:git push --force-with-lease
- 在推代码之前先拉一下远程分支
以下是参考文章及视频:
【GIT】什么?你还不知道Merge和Rebase的区别吗?_哔哩哔哩_bilibili
Git:Rebase和Merge之间的区别,看完这篇文章你就懂了!-CSDN博客
30分钟弄懂所有工作Git必备操作 / Git 入门教程_哔哩哔哩_bilibili