git篇-rebase


一. 合并多个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

参考文档://www.greatytc.com/p/6960811ac89c

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容