git rebase合并代码

合并代码的两种方法


Merge命令:

[if !supportLists]1、 [endif]feature_amount分支mergedevelop分支

命令:git merge origin develop


会把两个分支基于最近共同祖先的最新快照(最新的commitId)和两个分支的最近共同祖先进行一个三方的合并,合并的结果是生成一个新的快照并提交。



这是小海龟的历史记录





feature_amount分支的Merge操作把develop分支的commitId带过来;并且三方合并生成一个新的快照(新的commitId)c7

[if !supportLists]2、 [endif]

如果develop分支再mergefeature_amount分支,将不能进行快速合并,整个提交历史会出现分叉。如下图

命令:git merge origin feature_amount



 

 

Rebase命令:

可以使用rebase命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

原理是首先找到这两个分支(即当前分支feature_amount、变基操作的目标基底分支develop)的最近共同祖先C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底C4,最后以此将之前另存为临时文件的修改C5’,C6’依序应用。

[if !supportLists]1、 [endif]feature_amount分支rebasedevelop分支

命令:git  pull origin develop --rebase

注意:rebase之后,feature_amount分支push到远端需要强推 git push –f




feature_amount分支把develop分支上的最新快照(C3,C4)拿了过来,

并将基于共同祖先的修改C5’,C6’依序应用在 C4之后

2、

如果这时候develop分支再mergefeature_amount分支,就可以直接进行快速合并

命令:git merge origin feature_amount

如下图,尽管实际的开发工作是并行的,但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。



为什么需要强推?什么情况下不需要强推?

push的时候git会检查分支的历史commit,在你当前分支的上一个提交不是远端分支上最新的提交时,git就会阻止你提交。


[if !supportLists]1) [endif]、如果feature_amount分支从远程拉到本地后一直都是本地commit,没有推送到远端,那么当feature_amount分支Rebase Develop分支的时候,f分支不需要强推,因为当前分支的上一次提交和远程的最新提交是同一个,可以直接push,而且这个时候f分支上不会出现多余的commit,工作树也是线性的一条直线。

[if !supportLists]2) [endif]如果是f分支从远程拉到本地后,有其中一些commit,比如C5,C6,已经推送到了远端,然后再rebase Develo分支,这时候如果直接git push的话,会出现以下的提示



这时候,因为你已经rebase了develop分支,如果再pull的话,就会继续合并远程f分支是上的C5和C6,就会导致出现了重复的commit信息,如下图


命令git log --graph --oneline如下



f分支的commit记录会出现如下的情况

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容