## Merge vs Rebase
merge
![](https://img.kancloud.cn/07/b6/07b6d288a6fe6a8540a08e72a6750994_490x480.png)
rebase
![](https://img.kancloud.cn/b0/5d/b05d7f33a0c00eba4af4c1d7b121bd76_440x280.png)
- merge 和 rebase 是两种不同的合并方式。
- merge 的log是有分叉的,合并后的commit的父亲是合并的多个分支的commit。
- rebase 则是将修改移动到最后,将log合并为一条。
- merge 的缺点是 log 可能很乱。
- rebase的缺点是丢失了拉出,合并入分支的时间节点。
## Fast forward模式合并
**git merge** 默认为**Fast forward**模式合并,也就是说合并分支时,如果**能用Fast forward模式**,默认就会用这种模式合并,但这种模式下,删除分支后,会**丢掉分支信息**。
> ![](https://img.kancloud.cn/c7/f4/c7f4a6b86c389773d8940dee7a881690_418x210.png)
![](https://img.kancloud.cn/c7/ce/c7ce574280fc58af06b238524f47cd28_418x197.png)
![](https://img.kancloud.cn/4f/9a/4f9a82d8b4e9b227c603a6e9c219e902_423x222.png)
## 3-way merge
关闭fast-forward模式,在提交的时候,会创建一个merge的commit信息(可编辑),合并后的分支指向这个commit
```git merge --no-ff branch_name```
![](https://img.kancloud.cn/5e/b5/5eb5080123f1c1857acac61855a01c72_898x238.png)