美文网首页Git系列篇
Git进阶一:分支的创建

Git进阶一:分支的创建

作者: 拙峰朽木 | 来源:发表于2017-06-15 16:02 被阅读4次

参考于https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E4%BD%95%E8%B0%93%E5%88%86%E6%94%AF

分支:Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。

image.png

Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。
我们可以使用** git branch branch-name**来创建分支,例如我们创建一个叫testing 的分支:

git branch testing
image.png

此时我们只是创建了一个新的分支,并没有切换过去,所以我们还在master分支上。那Git是如何知道我们在哪个分支上的呢?因为Git中有个专门指向分支指针的指针:HEAD

image.png

那么我们如何切换分支呢?使用**checkout **,我们来切换到testing 分支

checkout testing

这样 HEAD 就指向了 testing 分支:

image.png

如何查看当前有多少分支呢?
可以使用:git branch

frc@frc:~/GitHub/study/GitStudy$ git branch
* master
  testing

我们可以看到现在有两个分支,而master分支前有个*****号,它是告诉我们这是当前所在分支,即HEAD指向的分支,我切换到testing分支再看看

frc@frc:~/GitHub/study/GitStudy$ git checkout testing
切换到分支 'testing'

frc@frc:~/GitHub/study/GitStudy$ git branch
  master
* testing

我们发现*****跑到testing前面区了,说明现在在testing分支上。

此时如果我们去.git/目录下会发现多了2个文件:

logs/refs/heads/testing
refs/heads/testing

看下logs/refs/heads/testing:

0000000000000000000000000000000000000000 ce97d3ee3e85989f86e655c81a3d4d6a17461dfa fengrongcheng <fengrongcheng2017@outlook.com> 1497510595 +0800        branch: Created from master

refs/heads/testing:

ce97d3ee3e85989f86e655c81a3d4d6a17461dfa

此时里面还有个文件发生了改变:HEAD,因为现在HEAD指向的是testing了:

ref: refs/heads/testing                                                                                  

原来应该是:

ref: refs/heads/master

我们现在在testing分支上添加个提交看看会怎样。

image.png

我们会看到testing分支领先master分支了,二期每次提交后HEAD都随分支向前移动。
现在切回master分支:

image.png

此时把HEAD指针移回了master分支了,同时把工作目录的内容换成了master分支所指向的快照内容。
现在如果我们在master上再添加个提交,就会变成这样:

image.png

由于 Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度 SHA-1 字串)的文件,所以创建和销毁一个分支就变得非常廉价。说白了,新建一个分支就是向一个文件写入 41 个字节(外加一个换行符)那么简单,当然也就很快了。就是上面说道的:
refs/heads/testing:

ce97d3ee3e85989f86e655c81a3d4d6a17461dfa

这和大多数版本控制系统形成了鲜明对比,它们管理分支大多采取备份所有项目文件到特定目录的方式,所以根据项目文件数量和大小不同,可能花费的时间也会有相当大的差别,快则几秒,慢则数分钟。而 Git 的实现与项目复杂度无关,它永远可以在几毫秒的时间内完成分支的创建和切换。

相关文章

  • 版本控制系统Git进阶(二)

    上一篇版本控制系统Git 进阶(一) 产生冲突 创建分支featureA与分支featureB(注:还不懂怎么创建...

  • Git进阶一:分支的创建

    参考于https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-...

  • 创建与合并分支

    查看分支:git branch 创建分支:git branch 切换分支:git checkout 创建+切换分支...

  • 【操作】git版本控制流入门命令FQ#1

    查看分支:git branch -a创建分支:git branch切换分支:git checkout创建+切换分支...

  • git分支

    查看分支git branch出现master分支 创建分支git branch ...创建后用git...

  • Git 分支管理

    Git鼓励大量使用分支: 创建与合并分支 :查看分支:git branch创建分支:git branch

  • Git分支管理

    创建与合并分支 git branch 分支007 -----创建分支007 git checkout 分支007 ...

  • Git 分支

    创建分支 git branch <分支名> 切换分支 git checkout <分支名> 创建同时切换分支(合并...

  • git 合并分支

    创建分支:$ git branch dev //创建dev分支 切换分支:$ git checkout dev ...

  • 常见的git命令

    git创建分支 在当前分支创建本地分支 git branch -b xxx 在当前分支创建本地分支并跳转到新分支 ...

网友评论

    本文标题:Git进阶一:分支的创建

    本文链接:https://www.haomeiwen.com/subject/hycuqxtx.html