在Git中,merge和rebase是两种不同的代码合并策略,它们用于将一个分支的更改合并到另一个分支。它们的主要区别在于合并的方式和提交历史的表现上
在介绍区别之前,我们先看下当我们从主干(Main)创建了一个新的分支(Feature)开始开发代码时,然后另外有人把自己的代码提交到主干(Main)之后,就会产生分叉的提交记录。
这时候你想把你的代码也提交到主干中,就有两个选择了:merge(合并),rebase(变基)
Merge
git checkout feature
git merge main
git merge feature main
以上两种都是把一个主干(main)的最新代码合并(merge)到分支(featrue)的方式。
这个操作会在分支中创建一个新的“merge commit”,它将两个分支的更改合并到一个新的提交中。
如上图,就是我们把Main中的新提交Merge到我们的Feature分支中。
Rebase
作为merge的替代方法,您可以使用以下命令将功能分支重新设置为主分支:
git checkout feature
git rebase main
这会将整个feature移动到main分支的顶端,从而有效地将所有新提交合并到 main 中。但是,rebase不是使用merge commit,而是通过为原始分支中的每个提交创建全新的提交来重写项目历史记录。
如上图,就是我们将Main中新的提交,通过rebase的方式合并到我们的Feature分支中。(另外我出了一份Java面试宝典,里面有600多道面试常考题目)
区别
当我们想要把一个分支合并到主干的时候,merge操作会通过merge commit的方式在主干上新建一个节点,并一次性的把分支中的修改合并到主干中。它的优点是分支代码合并后不破坏原分支的代码提交记录,缺点就是会产生额外的提交记录并进行两条分支的合并。