我们切一个新分支 feat/work:

文章插图
图片
查看下 refs/heads/master 和 refs/heads/feat/work 中的 commit 值:

文章插图
图片
从其内容可以看到,feat/work 这个 branch 并没有创建任何新的版本文件,和 master 一样指向了 c5bc98 这个 commit 。
从上面的实验可以看出,一个 branch 其实只是一个 commit 对象的应用,Git 并不会为每个 branch 存储一份拷贝,因此在 git 中创建 branch 几乎没有任何代价 。
接下来我们在 feat/work 这个 branch上进行一些修改,然后提交:
$ git:(feat/work) echo "new line" >> src/file1.txt$ git:(feat/work) echo "do nothing" >> License$ git:(feat/work) git add .$ git:(feat/work) git commit -m "some change"
文章插图
图片
查看当前的 HEAD:

文章插图
图片
可以看到 HEAD 指向了 feat/work 这个 branch,而 feat/work branch则指向了 8a442 这个commit,master branch 指向的 commit 未变化,仍然是 c5bc98 。
查看 8a442 这个commit对象的内容:

文章插图
图片
可以看到 commit 有一个 parent 字段,指向了前一个 commit c5bc98 。还包含了一个 tree 对象(2a9dd):

文章插图
图片
可以观察到,由于 README 没有变化,还是指向的 065bca 这个blob对象 。License 是一个新建的 blob 对象,src 和 file1.txt 则指向了新版本的对象 。
增加了这次 commit 后,Git 中各个对象的关系如下图所示:

文章插图
图片
Tag 和 branch 类似,也是指向某个 commit 的指针 。不同的是 tag 创建后其指向的 commit 不能变化,而 branch 创建后,其指针会在提交新的 commit 后向前移动 。
推荐阅读
- 一文吃透JVM分代回收机制
- 两年法考差1分通过,是不够努力吗,复习建议等一文全攻略
- 加入GitHub Accelerator,htmlx 2.0 要来了!
- 一文解析「小米大模型」
- 如何在 GitLab 执行器中使用 Podman
- 一文带您了解线性回归:多个变量之间的最佳拟合线的算法
- 主动离职,还能收获失业补助金?你不知的“隐藏”福利,一文解析!
- 关于和田玉,送你5个锦囊,看懂了,可以少走10年的弯路
- 看懂《狂飙》陈书婷和程程同性恋真相,才明白陈书婷主动出轨泰叔
- 孤注一掷:看懂陆经理的女儿,才明白大结局的伏笔,令人头皮发麻
