网站首页 > 教程文章 正文
前言
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 指向的快照一模一样了。 这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 使得你的头发没有了分叉,看上去就更加漂亮了。变基和合并最终的结果都是一样的,只不过是提交的历史不同。
变基也不一定是最好的,变基存在着一定的风险,驾驶要谨慎。我们下次再来介绍变基的风险吧,敬请期待!
相关微信公众号:程序员储物箱
猜你喜欢
- 2024-12-02 架构师分享 高效团队的gitlab flow最佳实践
- 2024-12-02 手把手搭建流媒体服务器详细步骤
- 2024-12-02 Github基础操作
- 2024-12-02 百分之九十八的人不知道git操作如何查看所有版本
- 2024-12-02 7分钟,用事例带你看完工作中常用的 git 命令
- 2024-12-02 Git常用命令
- 2024-12-02 git常用命令
- 2024-12-02 十个超级实用的git命令
- 2024-12-02 使用 Git 命令去管理项目的版本控制(二)
- 2024-12-02 常用Git 备忘指南
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)