Git Merge与Git Rebase区别
git merge 和 git rebase 都是为解决分支冲突,下面以一个具体的例子说明git merge 和 git rebase 之间的区别。
Git Merge
-
添加a.txt
-
创建feature分支
git branch feature
此时master分支和branch分支在同一位置 -
在master分支上修改a.txt,此时master分支领先feature分支一个commit
-
切换到feature分支,修改a.txt
git checkout feature
-
将feature分支合并到master分支上
git checkout master git merge feature
-
因为master分支和feature都修改了a.txt,所以无法自动合并,需要手动解决冲突
-
手动解决冲突,例如将当前代码和feature分支上的代码拼接起来
-
提交代码
git add . git commit -m "Merge branch feature to master"
使用merge方式会产生一次合并代码的提交 -
feature分支同步master分支
git checkout feature git merge master
此时feature分支和master分支再次位于同一位置
Git Rebase
下面再在上面例子的基础上演示rebase
-
master分支再次修改a.txt,master再次领先feature一个commit
-
feature分支也再次修改a.txt
-
将feature分支合并到master分支上
git rebase master
-
手动解决冲突
git add . git rebase --continue
-
master分支合并feature分支
git merge feature
对比
对比两种方式,可以看出使用git merge的方式解决冲突,需要三次commit(master modify a.txt、feature modify a.txt、Merge branch feature to master);使用git rebase的方式解决冲突,需要两次commit(Master modify a.txt again、feature modify a.txt again)。