首先定义一个初始状态
master 有三次提交
m1->m2->m3

feature 从master m2的时候fork新分支,并提交一次
m1->m2 -> f1

分别应用rebase和merge来合并分支看看有什么区别
如果 master分支 运行 git rebase feature 。那么master分支将会变成 m1-m2-f1-m3
rebase先找到公共父节点,然后将目标分支添加的内容作为当前分支的父节点。操作会修改我当前分支的修改过的所有节点,仔细观察两个m3的hash值改变了。

如果 master分支 运行 git merge feature 。那么master分支将会变成 m1-m2-m3-f1-merge...
merge会创建一个新的提交,并且不会改变之前的提交

结论:merge会多创建一个分支,git树会看起来更复杂。而rebase会是更线性的结构
rebase不适合多个人同时开发的分支做操作。因为某个同事rebase之后修改了所有的commit。如果恰好另一个人也在开发这个分支很可能就找不到公共节点导致无法提交commit
============5月7日==============
git rebase的时候如果目标分支和当前分支有冲突,那么当前分支会解决分支生成新的commit提交。可能会导致其他人无法merge,找不到公共父节点
网友评论