分支就是一个单向的链表(节点是commit对象)。如下图例子:
绿圆圈表示commit对象。蓝色的是分支对象,master分支的名字就是master。HEAD是一个助记符,实际是指向分支对象的指针。 上图具有两个分支:master(git 自动创建的),slave(用户创建的)。A和B是两个分支的共同部分。
分支的几个常用命令:
假设当前状态如下:项目里有个文件a.c。内容是文本Line1 V1 ...
git branch slave #创建分支名字是branch,效果如下图:
创建分支,不一定切换到那个分支,现在当前分支仍在master(HEAD指向)。
git commit -m "v2"做一次提交,修改a.c如下图:
git checkout slave #切换分支,让当前分支设置到slave上,效果如下:
然后修改a.c,提交到slave分支上,效果如下:
分支合并,我们先切换回master分支,然后执行一个合并的命令。
git checkout master #切换回master分支,入下图所示:
执行合并分支的命令:
git merge slave -m "v4" #把另一个分支合并回来,如下图:
合并分支后,可见此时创建了一个提交对象(V4),a.c的内容是V1,V2,V3三方的合并。
GIT文档上说是Three Way Merge( 不太懂 ,为什么不是TWO WAY合并V2,V3)
如果不再需要slave分支,可以删除它:
git branch -d slave #删除一个分支,只是把slave指针删除,不会删除commit对象。
现在再看一下分支,就是一个允许多继承的树。V4拥有两个父节点