git中的merge和rebase都有合并的功能,但是他们之间存在区别,有不同的使用场景。
比如当前在master分支,master中有A,B,C,D四个提交,dev分支中有两个提交M和N,现在需要将dev分支合并过来,那么可以通过命令
- git merge dev
dev: M -------------- N
/ \
master: A ---- B ---- C ---- D ---- E ----
- git rebase dev
after rebase:
master: A ---- B ---- M ---- C ---- D ---- N ---- 线性
从上面两张图我们可以看出他们之间的区别,merge会创建一个新的节点,之前的提交分开显示,而rebase操作不会生成新的节点,是将两个分支融合成一个线性的分支,顺序为commit的时间顺序。
冲突处理
- merge
手动修改冲突,然后add,commit - rebase
有冲突的话会中断rebase,同时会提示去解决冲突,解决冲突之后,将修改add之后执行git rebase -continue继续操作,或者git rebase -skip忽略冲突。
适用场景
- 下游分支更新上游分支内容的时候使用 rebase
- 上游分支合并下游分支内容的时候使用 merge
- 更新当前分支的内容时一定要使用 --rebase 参数,即git pull --rebase