前言
git变基是什么,当然不是那个变基。之前我一直不理解git rebase命令,看了很多的文章都没有搞懂,一直不敢用,最近又重新的研究了一下,也应用在了项目上,用过之后就只有一个字,香。
由于某些历史原因导致的两个项目在本地电脑开发,需要拉至内网后才能访问「远程仓库」,这就导致了本地电脑仓库和内网仓库存在差异,需要先从远程仓库先pull最新的版本合并,然后再使用merge合并,这样就导致分支图就非常的难看了。所以就用了git rebase命令先进行变基,整个图就变成一条直线,撒花。
介绍
rebase(变基):改变「当前分支」的「基础分支」版本(父版本)(理解这句话就豁然开朗了)
基础分支的意思是当前从哪一个分支的哪一个版本创建出来。
新建分支命令:
git branch test
或者是
git checkout -b test # 创建并切换到test分支
执行分支命令后,从C2分支创建除了test分支C4,master分支在C2分支上做了修改然后提交得到分支C3。
现在如果想要将master分支和test分支进行合并,直接使用git merge命令,会得到下图:
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
, 最后以此将之前另存为临时文件的修改依序应用。
这时C4
的修改已经变基到了C3
上形成了一个新的快照(版本)C4‘
,这时的master还是指向C3
版本的,接下来要进行一次快进合并。
git checkout master # 切回到master分支
git merge test
此时 ,C4'
指向的快照就和 直接使用merge进行合并的 C5
指向的快照一模一样了。这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。使得你的头发没有了分叉,看上去就更加漂亮了。变基和合并最终的结果都是一样的,只不过是提交的历史不同。
变基也不一定是最好的,变基存在着一定的风险,驾驶要谨慎。我们下次再来介绍变基的风险吧,敬请期待!
程 序 员 储 物 箱程序员储物箱的相关推荐阅读:
git分支注释
好看就点下“在看”并关注下吧!