承志算法课堂|图解git,用手绘图带你理解git中分支的原理和应用( 二 )
本文插图
我们在新的分支上做了提交之后 , 可以通过git log --oneline --decorate命令来查看每一个分支所指向的位置 。 这里的oneline是将log压缩到一行展示 , decorate用来查看分支所指向的位置 。
本文插图
我们可以发现test和master分支指向的提交不同 , 并且当前我们的HEAD在test上 , 说明我们当前在test分支 。 我们前面说了git checkout命令可以改变HEAD指针指向的位置 , 假如我们在当前目录下执行git checkout 18a417 , 这个18a417对应的是add article 6这个提交 。 这个提交是在master分支的 , 是test分支的上游 , 我们使用命令会自动将HEAD跳转到master分支 。
本文插图
使用之后我们发现的确到了master分支 , 这里由于我配置了zsh工具 , 它会提示我当前所处的位置是比master分支指向的最新位置落后3个提交 。
这也验证了我们说的 , HEAD指针可以随意跳转 。 现在想必你们应该能理解上一篇文章当中介绍的 , 撤销当前分支的命令git reset HEAD^的含义了 , HEAD指的就是HEAD指针 , ^表示的上一个提交 。 如果是前多个提交 , 我们可以用~加数字的形式来表示 。 比如上图当中划了红线标注的master~3 , 就表示master节点上3个提交 。
最后来简单说说分支合并 , 我们在使用git进行协同开发的过程当中 , 虽然大家都在各自的分支 。 但是最后代码还是要合并到一起的 , 这样才可以投入使用 。 git当中代码的合并是通过分支合并来体现的 。
比如当前的这一篇文章被我加在了test分支当中 , 这显然是不行的 , 因为使用方不可能一一去理解每一个分支做了什么 , 当中的代码逻辑 。 所以大多数的分支只是暂时的 , 用来暂时完成一项功能的 , 等功能完成之后 , 一般都会再合并回master分支 , 将所有的改动合并进去 。
合并的方式非常简单 , 我们只需要先checkout我们想要合并的目标分支 。 比如我们要合并到master , 就checkout到master 。 然后使用git merge test命令 , 表示和test这个分支合并 。
本文插图
合并之后 , 如果没有报错就算是合并成功了 。 它会展示出来合并进来的代码改动 , 我们注意到日志里有一个fast-forward这个单词 , 它表示快速合并 。 快速合并的意思也很简单 , 因为我们test分支是从master分支当中切出去的 。 后来master分支就再也没有进行过改动 , 那么当我们合并的时候 , 其实只需要移动一下master指针 , 将它移动到test分支上即可 。
我们用图来展示 , 合并前:
本文插图
合并后:
本文插图
【承志算法课堂|图解git,用手绘图带你理解git中分支的原理和应用】
那如果我们在master分支上也有改动 , 不再是待合并分支的直接上游 , 会发生什么呢?
本文插图
上图当中我们做了一系列操作 , 首先我们创建了一个叫做test_merge的分支 , 在其中创建了一个文件叫做a.txt , 接着我们切回master分支创建了b.txt 。 最后我们把两个分支合并 。
合并当然也没有问题 , 但是我们来用git log来查看一下日志:
推荐阅读
- 金台资讯|我们需要什么样的“算法”?
- Kaldi|Daniel Povey:Kaldi 核心算法K2 0.1版本已发布,未来将坚持开源
- |喻国明:算法是信息茧房的缔造者,还是打破者?|德外荐读
- 抖音|微博上线啥新功能?抖音算法有啥奥秘?石家庄举办县级融媒体技能演练
- 镜像娱乐|环球音乐版权签约彩虹合唱团金承志;斗鱼虎牙预计2021上半年完成合并;百度整合好看视频和全民小视频
- |智能影像,从“芯”开始 :紫光展锐“硬件+算法”打造超凡视听体验
- 计算|卫冕OLAP 算法大赛冠军 氪信“列式计算引擎”C位亮相
- |营销行业下半场:算法为王?
- AITDBlockchain|AITD小课堂第九课:区块链DEFI能否改写未来金融格局?
- 中年|图书馆猿の2020读书计划58:《scratch编程入门与算法进阶》