二 『现学现忘』Git分支 — 41、分支基本操作( 二 )

8、项目分叉历史的形成查看当前版本库的如上 , 此刻正在 testing 分支的上工作 , 在 readme.txt 文件在第二个版本 。
需求:我需要在 testing 分支的上 , 修改 readme.txt 文件 , 并提交新版本 。
# 1.查看版本库状态# 分支情况L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ git branchmaster* testing# 分支的提交历史L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ git log --onelinef72a9fe (HEAD -> testing) 第2次提交 , 新增内容:branch test v2fa2439a 第1次提交 , 新增readme.txt文件# 2.修改readme.txt文件并提交L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ echo "branch test v333 testing" >> readme.txtL@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ git commit -a -m 'testing 分支的提交'warning: LF will be replaced by CRLF in readme.txt.The file will have its original line endings in your working directory[testing 7ba443e] testing 分支的提交 1 file changed, 1 insertion(+)# 3.查看testing分支历史提交L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ git log --oneline --graph* 7ba443e (HEAD -> testing) testing 分支的提交* f72a9fe 第2次提交 , 新增内容:branch test v2* fa2439a 第1次提交 , 新增readme.txt文件# 4.查看所有分支的历史提交L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ git log --oneline --graph --all* 7ba443e (HEAD -> testing) testing 分支的提交| * b97ccfd (master) 第3次提交 , 新增内容:branch test v3|/* f72a9fe 第2次提交 , 新增内容:branch test v2* fa2439a 第1次提交 , 新增readme.txt文件我们可以看到 , 现在这个项目的提交历史已经产生了分叉 。

在实际工作中 , 是因为你创建了一个新分支 , 并切换过去进行了一些工作 , 可能随后又切换回 master 分支进行了另外一些工作 , 这样针对的是不同分支进行改动 , 就会在工作目录中产生项目的分叉历史 。
你可以在不同分支间不断地来回切换和工作 , 并在时机成熟时将它们合并起来 。而所有这些工作 , 你需要的命令只有 branchcheckoutcommit
此时 HEAD 指针的状态如下图:
二 『现学现忘』Git分支 — 41、分支基本操作

文章插图
9、分支的总结【二 『现学现忘』Git分支 — 41、分支基本操作】由于 Git 的分支实质上仅是包含 , 所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件 , 所以它的创建和销毁都异常高效 。创建一个新分支就相当于往一个文件中写入 41 个字节(40 个字符和 1 个换行符) , 如此的简单能不快吗 。
这里简单说明一下:
# 1.查看.git/refs/heads目录L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ ll .git/refs/heads/total 2-rw-r--r-- 1 L 197121 414月 16 22:07 master-rw-r--r-- 1 L 197121 414月 17 11:26 testing# 可以看到.git/refs/heads目录存放的是版本库中的分支 。# 2.查看testing文件只呢个中的内容给L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ cat .git/refs/heads/testing7ba443e4f6591631af4276bd3aa7356ff0f61fac# 可以看到是一个提交的索引 , 对比上图中的`7ba443e`提交 , 你就明白了 。# 3.在往深说一点 , 查看.git/HEAD文件L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)$ cat .git/HEADref: refs/heads/testing# .git/HEAD文件就是之前说的HEAD指针 , 指向了当前正在工作的分支 。# 是不是一切都非常的简单高效 。

经验总结扩展阅读