前言
Git 教程(一)--Git简介及操作流程
Git 教程(二)--Git文件操作
Git 教程(三)--远程仓库
Git 教程(四)--分支原理
Git 教程(五)--远程分支
分支原理
我们在Git 教程(二)的git log打印当中会看见一共三次提交,并且第三次提交的末尾出现HEAD->master的字符,并且我们使用git reset回退的时候,会发现HEAD->master也跟着指向你回退的那个版本末尾,由此,我们可以推断出Git分支的一个操作流程:
Git分支操作流程.png其中几次提交就是每次的commit,master是指向提交对象的可变指针,而HEAD是一个比较特殊的指针,指向master这种指针的指针。总的来讲,就是master指向了提交对象,HEAD指向了master这个指针。其中master分支并不是一条特殊的分支,只是master是在git init时默认的一条分支,大家懒得改动而已。
新建分支以及切换分支
git branch + 分支名//新建
git branch.png末尾的master表示当前分支是哪个分支,mater即是显示当前分支是master分支。
创建分支原理.png
如图:出现了testing这个指针指向了最后一次提交,但是HEAD并没有指向testing,所以当前分支还是master分支。
git checkout +分支名//切换
末尾的master变成了testing,表示已经从master分支切换到了testing分支。
切换分支原理.pnggit checkout -b 分支名//新建并且切换,这里就不多解释了。
当然,在新建过后我我们可以通过git log --oneline --decorate命令查看分支所指的提交对象,会发现指向的对象都是一样的。
分支操作
现在,我们已经切换到了testing分支上,我们可以在tesing分支上对文件进行了一个操作,然后通过git add,git commit进行跟踪提交,
分支操作原理.png如果对分支进行了一个操作,那么testing指向了第四次提交,但是master依旧停留在第三次提交,也就说如果切换到了master分支,那么文件上面显示的内容就是第三次提交显示的内容而不是第四次提交的内容。使用git log可以很明显的看出。
当我们切换到master并且对master分支进行操作的话原理图就成了这样子:
我们可以使用git log --oneline --decorate --graph --all来查看分支情况:
分支情况.png在图上可以看到,在b60313e的时候分成了两个支线,然后在0933db4进行了一个合并。
分支合并
在分支操作完过后我们得进行一个合并,这样才算是完成了一个完整的项目吧。假设我们要合并到master分支,首先我们切换到master分支,然后使用git merge进行一个合并。
git merge.png 分支合并原理.png在分支合并的时候我们有可能会遇到冲突,显示冲突的时候会出现<<<<<<< HEAD,=======,>>>>>>>这表示 HEAD所指示的版本(也就是你的 master分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(=======的上半部分),而 iss53分支所指示的版本在 =======的下半部分。为了解决冲突,你必须选择使用由 =======分割的两部分中的一个,或者你也可以自行合并这些内容。
合并冲突图例.png
解决冲突过后add和提交,但是在提交的时候会报错:fatal: cannot do a partial commit during a merge.意思是说在merge过程中不能作部分提交,这个时候使用命令行git commit -i [冲突文件名],就能够成功提交了。
分支删除
我们在合并过后会选择删除掉不需要的分支,不然分支多了不好管理,
分支删除命令行: git branch -d +分支名
分支查看
git brach:查看所有分支
git branch -v:查看所有分支最后一次提交对象
git branch --merged:查看合并了的分支
git branch --no-merged:查看未合并的分支
这里就不在贴示例图了,自己自行操作查看,比较简单。
分支应用
一般来讲,我们将master分支作为主分支,主要用于合并其他分支和发布版本,在实际开发中,我们将不同的任务分支出去,并行开发,开发完成过后再合并到主分支并且发布。
小结
这篇完成了本地分支的一个讲解,下篇讲解远程分支,未完待续...
网友评论