git提供了两个分支合并的命令,一个是git merge,另外一个是git rebase,他们究竟有啥区别呢?
我们假设一个git仓库里有一个master分支,另外还有一个dev分支。
上述ABCDEFG这几个节点(每个节点是一个commit)都是按照时间顺序来提交的,如下表所示
节点 | 提交时间 |
---|---|
A | 7月1号 |
B | 7月2号 |
C | 7月3号 |
D | 7月4号 |
E | 7月5号 |
F | 7月6号 |
G | 7月7号 |
也就是:
- master分支上有:A->B->C->E 这4个节点
- dev分支上有: A->B->D->F>G 这个5个节点
每个节点代表一个commit。
#那么如果执行如下两个命令:
git merge master
git rebase master
上述两个命令都是将master分支合并到当前分支,那结果有什么不同呢?
git merge master命令之后,dev分支变成如下图。
git rebase master命令,会变成什么样子呢?
- git merge master命令执行之后,dev分支上的提交都是基于时间轴来合并的, 会在提交历史上增加一个无关的提交历史。
- git rebase命令是用来改变一串提交基于那个分支为基础,如git rebase master就是把dev分支的D、F和G这三个提交基于最新的master分支上,也就是基于E这个提交之上。git rebase的一个常见用途是保持你正在开发的分支(如dev分支)相对于另外一个分支(如master分支)是最新的。
总结
merge和rebase命令都是用来合并分支,那什么时候用merge命令和rebase命令呢?
- 当你需要合并别人的修改,可以考虑使用merge命令,如项目管理上需要合并其他开发者的分支。
- 当你的开发工作或者提交的补丁需要基于某个分支之上,那用rebase命令,如给Linux内核社区提交补丁。