Git分支机制简介

 

Git分支只不过是一个指向某次提交的轻量级的可移动指针,当你发起提交时,就有了一个指向最后一次提交的名为master的分支。每次提交时,它都会自动向前移动。

Git默认的分支名称为master,master分支其实并㐊一个特殊的分支,它与其他分支没有什么区别。几乎每个git仓库都拥有该分支,这是因为git init初始化一个git仓的时候默认创建该分支,而大多数人没有去重命名它。

 

  1. 创建新分支

git branch study创建名为study的分支

创建分支的时候,会创建一个指向当前提交的新指针,也就是testing。Git如何知道你当前处于哪一分支上?git通过一个名为HEAD的特殊指针实现的,在git中,HEAD是一个指向当前所在的本地分支的指针。

 

可通过git log --oneline –decorate查看各分支当前所指向的对象,用到--decorate

可看到master和study分支就显示在f639e4e

2.切换分支

Git checkout study

切换到study后,HEAD由指向master指向了study,HEAD是指向当前分支的。

切换到study分支有什么意义呢?我们再提交一次

再次提交之后study分支已经向前移动,但master分支还是指向之前执行git checkout study切换分支时所在的提交。

我们再切换master分支,它会把HEAD指针移回到master分支,还会把我们工作目录的文件恢复到master分支指向的快照的状态,也就是第3次commit后的状态,比如我第4次commit是增加了#test4,重新恢复到没有增加#test4的版本。

 

请注意,当你在切换分支时,工作目录的文件会被改变。如果你切换到较旧的分支,工作目录会被恢复到该分支最后一次提交的状态。但如果在当前状态下无法干净地完成恢复操作,就允许你切换分支。比如我在master分支下修改了config文件,没有commit,就不允许切换,要求我们先提交

 

Commit后,项目历史已经产生了分叉,就是你创建了新分支study,在study分支上做了一次修改并提交。然后切回到主分支master做了修改并提交。这两次提交是在master和study上做出的,彼此相互分离,你可以在分之间自由切换,当你准备好之后就可以合并这些修改。

 

git log --oneline --decorate --graph –all可以查看到分叉的历史,下图显示出分支的指向以及项目历史的分叉情况

 

Git分支实际上就是一个简单的文件,其中只包含了该分支所指向提交的长度为10个字符的SHA-1校验和(比如64fcb05b361cc7a8c76d05e441cf6e5125ff5866),见下图的commit

。正因为这样,git分支创建和删除的成本很低,创建新分支就如同向文件写入 41给字节(40个字符外加一个换行符)一样的简单快捷。

 

 

猜你喜欢

转载自blog.csdn.net/LoongEmbedded/article/details/86477836