Table of Contents
[原文链接:Link] 转载请注明原作者
感谢guapi的指导与纠错
🌿Git 分支基础
区别于3种对象,分支(branch)逻辑上是一个版本队列(Queue),
只不过其本质只是一个 指针 (head)
这个指针可以被称为 **头指针(head)**其是活动的,永远指着它 ※最新※ 的commit对象 (的hash key)。
本地commit更新到第几个了,branch的head就指向它。
此外还有一个本地项目当前的 HEAD 指针,区别于各个 branches 的 head,
其指向当前工作中的 branch
另一层含义: 每次 commit 时,HEAD 带着本地当前 branch 的 head 往前走
branch 被 ./.git/
中的两块内容来管辖,分别是 HEAD 文件
和 refs 目录
。
-
Git 系统层级:
- branch > commitObj > TreeObj > BlobObj
-
.git 目录结构补充
- hooks:
- info:
- logs: 存着
$ git log
所显示的内容,也就是commit和branch记录 - objects: 存对象 (hash-object) 的数据库 (也就是版本库,本地Repo)
- refs: 存着每个 branch 指向 commit 对象的指针(就是存着它最新commit对象的hash值)
- COMMIT_EDITMSG:
- config:
- description:
- FETCH_HEAD:
- HEAD: 存着当前使用中的分支(就是存着上面👆 refs的路径,key=branchName,val=path)
- index: 当前暂存区内容
🎐Git branch 初见
通过 $ git log --oneline
可查看commit和branch记录,大体为下:
08cb1a3 (HEAD -> newbranch) third commit
ad82e41 second commit
ab3b82f (master) first commit
上段表明当前 HEAD指针
指向了 newbranch 分支的最新 commit 上,
而 newbranch 领先了 master 主分支 2个 commits (主分支还停在 first commmit)
若现在进行更新,则默认把新 commit 分配给 HEAD 也就是 newbranch 分支中。
b93aaf9 (HEAD -> master, newbranch) second commit
ab3b82f first commit
上段表明当前 HEAD指针
指向了 master 分支的最新 commit 上,
而 newbranch 和 master 主分支目前版本相同
若现在进行更新,则默认把新 commit 分配给 HEAD 也就是 master 分支中。
b93aaf9 (HEAD -> newbranch, master) second commit
ab3b82f first commit
上段表明当前 HEAD指针
指向了 newbranch 分支的最新 commit 上,
而 newbranch 和 master 主分支