git 切分支_Git变基

a1c6ad98dc8d68337d3f4e150ea9f2a7.gif

前言

git变基是什么,当然不是那个变基。之前我一直不理解git rebase命令,看了很多的文章都没有搞懂,一直不敢用,最近又重新的研究了一下,也应用在了项目上,用过之后就只有一个字,香。

由于某些历史原因导致的两个项目在本地电脑开发,需要拉至内网后才能访问「远程仓库」,这就导致了本地电脑仓库和内网仓库存在差异,需要先从远程仓库先pull最新的版本合并,然后再使用merge合并,这样就导致分支图就非常的难看了。所以就用了git rebase命令先进行变基,整个图就变成一条直线,撒花。

介绍

rebase(变基):改变「当前分支」「基础分支」版本(父版本)(理解这句话就豁然开朗了)

基础分支的意思是当前从哪一个分支的哪一个版本创建出来。

新建分支命令:

git branch test
或者是
git checkout -b test # 创建并切换到test分支

72f42e897a47ea085bd9c647f10d4f92.png

执行分支命令后,从C2分支创建除了test分支C4,master分支在C2分支上做了修改然后提交得到分支C3。

现在如果想要将master分支和test分支进行合并,直接使用git merge命令,会得到下图:

cd9747476f22e58abfdd78a24d264bce.png

C3分支和C4分支合并后会形成一个新的快照(分支)C5并提交。

这时候就形成了一个分叉,分支和分支版本变多以后,整个分支图就变得很难看了。

那么如何整理头发分叉呢?

你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。在 Git 中,这种操作就叫做 「变基(rebase)」。也就是说git自动的将你基于C2上的修改,在C3上进行合并,C2也是test分支和master分支的分叉处,基于这一点,这一个版本进行比较差异,然后自动的完成修改,当然,如果有冲突的话,需要手动的处理冲突,然后使用git rebase --continue继续完成变基。

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

git checkout test # 切换回test分支
git rebase master # 变基

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

c37e69d908208d2670bccaab2c29ef93.png

这时C4的修改已经变基到了C3上形成了一个新的快照(版本)C4‘,这时的master还是指向C3版本的,接下来要进行一次快进合并。

git checkout master # 切回到master分支
git merge test

e41982eec145f80f7108ce8cf923b232.png

此时 ,C4' 指向的快照就和  直接使用merge进行合并的 C5 指向的快照一模一样了。这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。使得你的头发没有了分叉,看上去就更加漂亮了。变基和合并最终的结果都是一样的,只不过是提交的历史不同。

变基也不一定是最好的,变基存在着一定的风险,驾驶要谨慎。我们下次再来介绍变基的风险吧,敬请期待!

36dedf421e8c428992a5f220d4ee8b5b.png 1e386e4ea16972f254e982c6b3e117d4.png 程 序 员 储 物 箱 d11ff0cdf330de17bf24cab9b3aa71b1.png

 程序员储物箱的相关推荐阅读:

git分支注释

2541383e65fd1ed99af6c34fc24475ca.gif好看就点下“在看”并关注下吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值