一. 合并多个commit
...略过
二. git rebase 和 git merge 区别
栗子: 叶尘基于master 分支c0 拉出 dev 分支,在dev分支提交 c1、c2、c3,路人在 master 分支 c4,叶尘准备把dev合并到master...
1.git merge
-将两个分支的最新提交点c3 和c4 合并后生成一个新的提交 c5(有冲突解决冲突),
-将以上两个分支master和dev 从c0到c5上所有提交点按commit时间的先后顺序一次放到master上。
2.git rebase 后再git merge
-rebase之前需要将master分支拉到最新
-切换分支到需要rebase的分支,这里是dev分支
-执行git rebase master(有冲突解决冲突),解决后直接git add . 再git rebase --continue即可
-此时: dev分支的git log 并没有像git merge一样多出一次新的commit,而是dev后面几次commit(c1、c2、c3 )的hash值变了
-切换到master分支,git merge dev 合并dev到master;
发现采用rebase的方式进行分支合并,整个master分支并没有多出一个新的commit,原来dev分支上的那几次(C3,C4,C5)commit在rebase之后其hash值发生了变化,不在是当初在dev分支上提交的时候的hash值了,但是提交的内容被全部复制保留了,并且整个master分支的commit记录呈线性记录;
总结:
git merge 操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现分叉交错式的形式;
c0---------------c4-c5
\c1-c2-c3/
git rebase(顾名思义-变基)
实质是将当前分支原本基于原分支提交点(c0)之后的所有提交打散成一个个patch,再次基于原分支的最新commit(c4)重新提交并生成新的commit hash;并不根据两个分支的实际提交时间点排序;rebase完成后,切到基分支进行合并后也不会生成新的commit,
保持一条直线 c0-c4-c1-c2-c3
参考文档:https://www.jianshu.com/p/6960811ac89c