git rebase 则是通过一种续接的方式:将master 拆下,续到b1上来。就相当于本来master 与b1都在同一起点,现在改为master的起点为b1。

本文深入解析Git中rebase与merge的区别与应用场景。rebase将当前分支的commit点拼接到目标分支最新commit点后,假设无冲突则生成新commitID,适用于集成主线修改。merge仅合并两分支最新commit点,保持原有commit快照,适用于创建合并点。文章还介绍了rebase过程中的冲突解决及回滚操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rebase xxx_branch 既是 把自己打散了(原分支commit点之后的commit),然后拼接到xxx_branch的最新的commit后面

rebase xxx_branch 以 xxx_branch为基础,从新组装自己,且假设没有冲突,有冲突要解决,rebase后会生成新的commitId

原有的commId不在。

-------------------------------------------------------------------------------------------------------------------

参考:https://www.cnblogs.com/zheroXH/p/11578728.html

--------------------------------------------------------------------------------------------------------------------

rebase 和 merge是 git的两种 合并方式

commit == 快照,两条提交线合并时 只有最后最新的的快照才有冲突的可能。

merge:只会把 另一条线最新的提交和当前线最新的提交并成一个commit 点 ,有冲突解决,其余的commit快照点不管!

rebase: 把当前线拆分了,拼接到rebase的目标branch上来。不生成新的commit点,各自解决冲突。

自己在分支线上开发,同时主线也在不断往前演进着,把主线的修改合并到分支上,做一次集成,此时使用Rebase最好,把自己

所有的修改commitId快照都拆了,都放在 主线修改commitId的头上.

不要在主线上rebase,大家都在用...

.git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

git reset --hard xxxxcode(rebase 前的commitid 通过reflog查看)

!总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作

git merge 操作合并分支会让两个分支的每一次提交都按照提交时间(并不是push时间)排序,并且会将两个分支的最新一次commit点进行合并成一个新的commit,最终的分支树呈现非整条线性直线的形式

git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性

 

merge 是把两个最新的commit点,合并成一个commit点,然后放在当前分支,只有这个commit点有可能冲突;
其余的commit点都是在不同分支产生,互不相干。merge不会把目标分支的commit点直接放到当前分支线上,所有commit点都按照时间编排,


而rebase的时候,会把当前分支的所有commit点直接拼接到目标分支线最新的commit点后面,
并且最后把连个分支的最新的commit点,合并成一个commit点。所以时间点是错乱的,
但是这样并没啥问题,其余的commit点都是在不同分支产生,互不相干。只有最后的commit点有可能发生冲突。


git merge xxbranch   是 把不同分支的最新两次提交合并成一次提交。commit 树看起来很乱,但是时间线是顺着来的。
git rebase xxx_branch 不是按照顺序来的。把当前分支的提交commit逐个拆散,然后拼接到目标分支上。各个分支的commit点,在同一条线
但是不掺杂。
$ git checkout mywork
$ git rebase origin
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。
二、解决冲突
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值