图解git,用手绘图带你理解git中分支的原理和应用( 二 )
使用之后我们发现的确到了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分支上即可 。
我们用图来展示 , 合并前:
文章插图
合并后:
文章插图
那如果我们在master分支上也有改动 , 不再是待合并分支的直接上游 , 会发生什么呢?
文章插图
上图当中我们做了一系列操作 , 首先我们创建了一个叫做test_merge的分支 , 在其中创建了一个文件叫做a.txt , 接着我们切回master分支创建了b.txt 。 最后我们把两个分支合并 。
合并当然也没有问题 , 但是我们来用git log来查看一下日志:
文章插图
会发现日志里多了一个commit , 这个commit并不是我提交的 , 而是它自动产生的 。 我们一样用图来展示一下 , 这是合并前:
文章插图
合并之后:
文章插图
由于不再拥有直接上下游关系了 , 所以git创建了一个新的commit用来合并两个分支的代码 。 当我们合并完成之后 , 我们就可以把没用的分支都删除了 。 删除的命令是git branch -d test 。
当然git merge的时候并不是永远都一帆风顺的 , 难免会遇到冲突 。 所谓的冲突也就是两个人修改了同一份代码 , git会不知道应该保留哪一个 , 于是提示冲突 , 让程序员自己搞定 。 关于git merge时遇到冲突怎么办的问题 , 我们放到下一篇文章当中和大家分享 。
今天的文章就到这里 , 衷心祝愿大家每天都有所收获 。 如果还喜欢今天的内容的话 , 请来一个三连支持吧~(点赞、关注、转发)
- END -
【图解git,用手绘图带你理解git中分支的原理和应用】本文始发于公众号:TechFlow , 求个关注
- 手机|用手机镜头展示丛林秘境,vivo S7带来的不止是高清
- 爱了!一个现代化的 Git CLI 客户端,一堆命令不用记了
- GitHub 热榜:《去你丫的算法》开放电子书下载
- 图解3种常见的深度学习网络结构:FC、CNN、RNN
- 权威技术机构研究报告颠覆全球观念:加油站燃爆与使用手机无关
- 我到底应该用git-merge还是git-rebase呢?
- 使用nginx反向代理github
- Git之旅① - 历史起源与特点
- GitHub上疯狂被传的顶尖大牛所著《趣谈网络协议》,手慢无
- iPhone|DigiTimes:为强化 iPhone 光学变焦,苹果考虑潜望式镜头技术
