Git笔记 (7)

Git的“master”分支并不是一个特殊分支。它就跟其它分支完全没有区别。之所以几乎每一个仓库都有 master 分支,是因为git init命令默认创建它,并且大多数人都懒得去改动它。

6.2 创建分支

使用git branch命令可以很简单地创建分支,比如创建一个testing分支。

$ git branch testing

这会在当前所在的提交对象上创建一个指针。如下图所示

13.png-266.7kB


那么,Git又是怎么知道当前在哪一个分支上呢?很简单,它有一个名为HEAD的特殊指针。这个特殊指针就是用来指定当前所在的分支。

image_1clfp6pp11e0v8l71g391cok17s76k.png-8.4kB


可以使用git log命令查看各个分支当前所指的对象。

$ git log --oneline --decorate -3 #只看倒数3个 ebc9b45 (HEAD -> master, testing) add print(2) into README 326dd0b add print(1) into README b861d60 branch note begin

可以看到testing,master和现在指向master的HEAD都指向最后的提交。

6.3 切换分支

创建好了分支,可以用git checkout命令进行切换

$ git checkout testing Switched to branch 'testing' $ git branch #可以使用git branch查看当前分支(前面带*号) master * testing

有一个简单的命令可以快速创建新的分支并切换到新的分支:

$ git checkout -b new_branch #等效于 $ git branch new_branch $ git checkout new_branch

于是HEAD指针也发生了变化,如下图

image_1clfp9vofjk9t6hrb81ma0fg771.png-8.1kB


在testing分支进行一次提交:

$ echo "print("3")" >> README $ git commit -am "add print("3") into README" warning: LF will be replaced by CRLF in README. The file will have its original line endings in your working directory. [testing 8b6bbb7] add print(3) into README 1 file changed, 1 insertion(+)

git的提交记录以及分支指向如下:

image_1clfpdg7a10ic1l7mbvpd03e3t7e.png-9.6kB


可以看到testing和HEAD都移动到前面了,而master没有移动。现在我们切换到master分支,对master进行一次提交。

$ echo "MIT LICENSE" >> LICENSE $ git commit -am "add MIT LICENSE" warning: LF will be replaced by CRLF in LICENSE. The file will have its original line endings in your working directory. [master ce53a90] add MIT LICENSE 1 file changed, 1 insertion(+)

提交后,上图就变成了下图

image_1clfphtf77sapetet3jgg1uq77r.png-13.1kB


可以使用git log命令查看提交历史

$ git log --oneline --decorate --graph --all -5 #只看倒数五个 * ce53a90 (HEAD -> master) add MIT LICENSE | * 8b6bbb7 (testing) add print(3) into README |/ * ebc9b45 add print(2) into README * 326dd0b add print(1) into README * b861d60 branch note begin

可以看到图中的看到结构与上图相同。
由于Git的分支实质上仅是包含所指对象校验和(长度为40的SHA-1值字符串)的文件,所以它的创建和销毁都异常高效,也就是添加或者删除41个字节的速度,能做到这一点的原因是因为git是以文件快照的形式保存文件,所以创建分支只需创建一个新的指针指向快照即可,而其他的一些版本管理软件往往需要将整个项目复制到另一个目录,这就比较慢了。

6.4 为什么要使用分支?

学了上面的东西,可能会想,为什么要使用分支?可以通过现实场景的问题来回答这个问题。

从个人角度,你正在开发一个网站,网站已经处于正常运行状态,我们想在网站中加入新的功能,这时候你有两种选择:一是直接在当前master上进行修改和测试,二是创建一个分支。选择一可能会产生影响正常工作的代码,这是我们不想看到的。而选择二创建分支可以很方便地解决这个问题,分支不会影响当前工作的分支,可以很放心地进行开发和测试,最后对原工作分支进行合并即可。

从多人协作角度上看,这个更加直接,在一条流水线上不仅效率低,而且会产生很多混乱,比如不同人代码水平有限,有的还会编写错误的代码,使用分支可以让软件维护者很方便地查看不同的分支情况,选择合适地分支进行合并。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppgpw.html