Git | merge与rebase的使用场景

558 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

在开发项目之前或是提交代码之前,都会习惯性的执行一次拉取代码的操作,在本地解决冲突后再提交。在webstorm内置的git中,拉取代码时会弹出一个弹窗,包括两种选项:分别是merge 和 rebase

image.png

merge 和 rebase 这两个指令,都是常用的进行分支合并的操作,但是原理并不相同,第一次看到这个弹窗的时候很好奇这两个操作到底有什么不同,在执行操作之后,当前分支的代码会受到怎样的影响?

当前分支结构

假设当前分支结构包含 master 和 develop 两个分支,当前操作分支为deveop。 image.png

git rebase

rebase 的英文含义是“变基”,即改变基底。在原有提交的基础上将差异内容反映进去。

image.png

git rebase命令的作用就是在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支。

执行后分支的结构:

可以看出在执行git rebase 指令后结点的顺序发生了变化 image.png

操作指令:

git rebase -i <commit>

如果解决冲突后继续进行合并,执行:

git rebase --continue

git merge

merge 的含义在于“合并”,merge合并分支会新增一个merge commit(merge后时间线并未打乱,而rebase后变了)

执行后分支的结构: image.png

注:

  • 现有分支不会以任何方式被更改

  • git pull相当于: git fetch + git merge

  • git pull -r,相当于 git pull –rebase,也就是 git fetch + git rebase

总结

git rebase 执行后会将已经发生的多次提交压缩成一次提交,提交历史更加简洁。

git merge 合并两个分支并生成一个新的提交,能够展现出明显的时间线。