Git学习(四)
一、Git分支管理
Git 的默认分支就是 master。你所作的commit会在master分支上自动移动。 在多次提交操作之后,master分支指向最后那个commit object(提交对象链)。
Git 的 “master” 分支跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它。
但很多时候听别人说master分支,往往有一种这个分支是稳定、无bug的分支。而develop往往预示这新功能,不稳定的分支。这和分支策略有关,但本质上这两个分支没区别。
1.分支创建
通过git branch创建分支
创建标签记在HEAD指针所指向的提交点创建tag(就是当前所在分支)
git branch dev
分支切换到dev
git checkout dev
创建分支与切换分支同时完成
git checkout -b dev2
通过git branch查看全部分支
在dev2分支创建一个文件A.txt并且提交(谁提交的版本库就在谁的分支上)。我们发现在dev2分支可以看到这个文件,当我们切换会master时候无法看到这个文件。
2.分支删除
不能删除自己所在的分支
我们可以切换到master删除一个合并后的或者没有发生变化的分支
如果一个分支发生了变化不能删除
3.分支合并
切换到master上做dev2 的合并
我们发现master分支上也添加了A.txt这个文件
如果修改的是同一个文件也可以做同样的合并,让我们切换到dev2分支修改A.txt中的内容。在A.txt中添加了一行World
我们切换会master分支的时候发现提示了A.txt的变动。通过合并发现master分支上也合并了dev2修改的内容,合并之后dev2就删除就被允许了。
4.分支的本质
master指向的是提交
HEAD是指向当前的分支,当前在哪个分支就指向哪个分支
第二张图上我们可以看到创建了dev的分支,当我们切换到dev分支的时候HEAD就会指向dev
当我们进入.git文件夹查看HEAD的内容的时候可以看到,所处分支不同内部的文件指向就不同。
master分支
dev2分支
git的分支与svn不同,svn是整体拷贝一份分支,git用的是指针。
如果dev发生修改提交,dev的版本就会向后移动。
在master分支上如果合并就会出现下面的图
5.分支的冲突
我们在dev2分支里面修改A.txt文件添加一行 update by dev2后提交
我们在master分支里面修改A.txt文件同时添加一行 update by master后提交
合并时候我们发现出现冲突
<<<<<<<<<<<HEAD是当前指向的分支所修改
>>>>>>>>>>dev2是dev2分支修改
我们需要手工合并,修改后报了master的内容
我们可以通过图形来查看冲突的提交日志。
git log --graph
