](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000)里,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。在Git里,这个分支叫主分支,即
master分支。
HEAD严格来说不是指向提交,而是指向
master,
master才是指向提交的,所以,
HEAD指向的就是当前分支。一开始的时候,
master分支是一条线,Git用
master指向最新的提交,再用
HEAD指向
master`,就能确
定当前分支,以及当前分支的提交点:
每次提交,
master
分支都会向前移动一步,这样,随着你不断提交,master
分支的线也越来越长:当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev
,就表示当前分支在dev上:
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
我们在dev上的工作完成之后,就可以把dev合并到master上:把dev合并到master上。
具体步骤
- 创建
dev
分支,然后切换到dev
分支 - 用
git branch
命令查看当前分支 - 在
dev
分支上正常提交 -
dev
分支的工作完成,我们就可以切换回master分支
分支总结
查看分支: git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
** 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。用git log --graph
命令可以看到分支合并图。 **
分制管理策略
Git用Fast forward
模式时删除分支后,会丢掉分支信息。不使用Fast forward
模式,merge后就像这样:
合并分支时,加上
--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
Feature分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。