本文导读

本文从“文件快照”这个出发点切入,逐步延伸出“分支”和“分支冲突”。提醒一下:如果丢掉了“文件快照”这个基点,只学习“分支”,学习效果并不好!

声明:文中的图片来自于互联网,版权归原作者所有,但文中的文字属于本站原创。

1、Git的存储机制

Git保存的不是文件差异或者变化量,而只是一系列文件快照。也就是说,Git每次修改之后都是整个文件去保存。

有些版本管理工具只是保存每个版本之间的变化,虽然总文件体积小,但是每检出一个文件都要从最开始的版本一个个叠加上去,速度很慢。Git的优势是快,天下武功唯快不破,所以Git最终能一统江湖,千秋万代。

虽然Git的速度很快,但是随着版本的增多或者对于文件特别大的项目,Git会有点吃力。毕竟,存储了过多的文件快照,如同吸星大法一样,会有反噬作用。

2、Git的分支介绍

因为存在一系列的文件快照节点,从视觉的角度来看,如同串联起来的一个链表,这个系列称之为“分支”。

如下所示,提交了三次,分别是: B0、B1和B2,这三个文件快照的串联被称为“master分支”。

git1.jpg

3、Git的HEAD介绍

从任意节点可以延伸出一个分支,Git里面的分支很多,但是用户只能操作一个分支,HEAD指向的是当前正在操作的分支,如上图所示。

备注:在Git中,用户只能操作一个分支,如同用户只能进入某一个目录下操作Linux命令,而不能同时在多个目录下执行命令。

4、Git新建分支

分支是文件快照的串联,同一个文件快照串可以“羽化”出多个分支,如下所示,新建一个dev分支:

git2.jpg

5、Git分支切换

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容,所以多个分支不需要多个目录。

分支切换命令为:

git checkout (branchname)

注意:切换分支之后,HEAD也会发生改变,因为HEAD通常会指向当前所在分支。

6、Git分支的合并

随着dev分支的不断成长,dev分支与master分支是越来越远,

git3.jpg

此时可以合并分支,把dev分支合并到master分支

git4.jpg

7、Git分支的合并冲突

合并有的时候会出现冲突,如下所示:

git5.jpg

在 master 分支和 dev 分支的公共祖先 B2 后,master 和 dev 的提交是对同一个文件的同一个部分进行了不同的修改,Git 就没法合并它们,此时需要手动解决冲突。合并完成之后,产生新的文件快照 B5。

git6.jpg

冲突的格式是这样的:

<<<<<<< HEAD
test master.
=======
test dev.
>>>>>>> dev

冲突是通过=======来分割的,其上部分表示HEAD分支的内容,其下部分表示dev分支的内容,这两部分内容发生了冲突。为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个或者也可以自行合并这些内容。

备注:通过上文Git的HEAD介绍,我们知道,HEAD指向的是当前正在操作的分支。因为运行合并命令(merge 命令)在 master 分支,所以 HEAD 指的是 master分支。

8、关于冲突合并的更多介绍

关于冲突合并的更多介绍,请参考下文:

https://blog.csdn.net/qq_42780289/article/details/97945300

标签: none

添加新评论