本文内容要点:
-
分支是什么?
-
创建分支
-
推送分支到远程仓库
-
合并分支
-
分支冲突解决
-
查看版本分支图
-
删除分支
-
多人协作
分支是什么?
分支可以理解为平行的几条公路,公路之间互不干扰,从主分支建立几个子分支,相当于公路的岔路口一样,然后ABC三人各走一条路,互相之间谁也不干扰谁,最后到另外一个交叉路口时,三人就又可以碰面走到一起了。
分支在实际开发中的作用可以这样理解:现在有ABC三人同时开发一个项目,A开发功能一、B开发功能二、C开发功能三,如果三人同时在同一个项目同一条分支上面开发的话,很容易造成互相之间文件冲突等困境,对开发很不方便,这时我们就可以依赖Git来开启三条分支,A在A的分支里面做他自己的东西,B在B的分支里面做他的开发,C也是类似这样,各做各的,最后当他们三个人的代码功能都开发完毕后,再把他们做的分支进行合并,就是把功能一、二、三都合并到一起,这样整个项目就完成了,相互之间你不干扰我,我不干扰你,是不是感觉世界多么美好?
默认情况下,git会帮你自动建立一个master的分支,这个就是主分支,我们之前操作的代码版本就都是这个分支上面操作的,一般地master是作为最核心最重要的分支使用的,项目所有代码都在里面。接下来我们开始学习如何创建更多的分支。
创建分支
使用TortoiseGit创建分支非常简单:根目录空白右键 > TortoiseGit > Create Branch...(创建分支),在对话框填写分支英文名(Branch)和注释(description),其他选项默认,OK之后即可创建好


创建好之后,默认工作区间还是在master分支下面的,需要切换分支时就可以切换到刚才建立的分支,右键执行:TortoiseGit > Switch/Checkout(切换分支)


切换好之后,提交的时候就会变成分支的名字了,这个时候提交就是提交到这个分支啦。

注意:如果是多个团队协作的时候,我本地创建好了分支并且推送到了远程仓库,但是其他的同事更新拉取远程默认分支代码的时候,他的本地是没有建立我的分支的,但是他可以看到我的远程分支,那么如果他需要进入我的分支,在本地仓库建立一个分支的话,只要选择远程分支,进行切换,就自动在本地建立一个分支啦。


推送分支到远程仓库
我们创建好分支后,这个时候分支的信息都还是在我本地仓库的,那么我们只要对代码进行commit(如果有编写新代码)和push后,远程仓库就会看到有分支了,操作和以前的推送master分支是一样的。

合并分支
我们对上面创建好的分支进行一些开发修改,然后提交保存后,接下来我们需要把这个分支的代码合并到主分支master:
- 分支开发,我们这里修改test.txt文件,在里面加入了相关的文字,然后commit和push


切换为master分支(需要把其他分支合并到某个分支,这时就需要切换到此分支,如分支一要合并到分支二里,那么就要切换到分支二):


接着执行:TortoiseGit > Merge...(合并),然后选择要合并的分支和填写需要合并信息,OK之后,你会发现分支的代码就过来啦。。。




分支冲突解决
当合并分支的时候,往往都是不太顺利的,特别是同一个文件被多个分支修改过的时候,就会出现合并冲突了。现在,我再创建一条分支,接着分别切换到这两条分支对应修改这个test.txt的文件,然后再合并这个分支,结果如下:



这个错误的意思就是告诉你:Git想自动合并分支,但是这个test.txt的文件发生冲突了,需要手工进行合并,点击Resolve(解决),就会列出所有冲突的文件,点OK之后,再一一去找到这些文件,对应的打开里面进行修改


打开冲突的代码,会发现里面Git把冲突的地方使用<<<<<<< HEAD=======>>>>>>> develop_shopingcart标识出来了,=======分隔开来的就是这主分支和develop_shopingcart的冲突代码区分

手工修改后,去除标识代码,然后进行commit和push提交保存即可。

查看版本分支图
我们操作了这么多版本和分支信息,我们可以通过一个Git的分支图形来查看版本分支结构的,那样更加直观哦,执行TortoiseGit > Revision Graph,如下图


以上的分支图,表示从v0.1分出了两个分支,然后又合并到了master分支了。
删除分支
分支功能开发完成后,或者是建立分支建立错了,如果我们不再需要了的话,可以删除掉分支,具体如下操作:
目前远程和本地分支情况如下二图所示:


我现在要删除develop_order分支,先通过上一步的查看版本分支图(Revison Graph),打开后,找到你想要删除的分支,右键如下:

Delete Branch/tag有三个选项:refs/heads/develop_order就是删除本地分支,refs/remotes/origin/develop_order就删除远程仓库分支,All就是本地和远程都删除。我们这里执行All,都删除!确认后,本地和远程都删除了,再也切换不了这个分支啦,耶!


然后远程和本地的分支状态就是这样了:


多人协作
工作中,大多数情况下都是多个哥们一块来开发一个项目的,那么就需要Git这样的软件+码云来实现代码同步更新,从而实现协作。
通过前几节教程和今天这节分支教程,我们应该学会了如何创建版本仓库,如何提交版本,如何推送到远程仓库……只有推送到远程仓库,其他的人才能拉取到你的代码哦。所以,多人协作需要码云或者是Github这样的第三方服务亦或是自己搭建服务器来实现代码的共享仓库。
接着我们稍微讲解一下在码云上面的代码协作步骤,有需求的同学可以试一下,其他的用户使用码云也是类似我这几节课所讲解那样使用的:
-
团队成员各自在码云注册帐号
-
项目管理员在码云建立项目,初始化项目,设定好各个成员的分支,也可以在分支中设置各个成员的权限,一般地master分支由管理员控制,其他的人不能push修改这个分支。
-
项目管理员在码云的项目管理面板中设置开发成员,并且可以设定各个成员的权限,如果是各个成员都使用SSH访问的话,需要添加大家的SSH公钥到里面才能访问
-
各个成员安装Git相关的软件和环境,然后设置好相关的访问代码库的方式、用户名和密钥等
-
各个成员通过项目地址拉取项目源码,然后切换到自己的分支,那么这里面的代码就是属于你自己的开发分支了。
-
最后各个成员在各自分支开发好之后,管理员进行分支合并,合并完成后提交到远程保存,这个时候就可以打标签,发布新版本啦!
部分操作如下图所示:


小结
针对小白入门Git+码云的操作就到此结束了,通过这几节课程我们可以了解到Git+TortoiseGit的使用,有了这些技能,我们做项目的开发以及和团队的协作会更加的顺畅啦。
-
可以从中看到,我们很多的操作都是在项目的根目录下,进行右键选择TortoiseGit里面对应的操作来进行操作的,某些需要针对某个文件的操作在选中文件后,那么也是右键选择TortoiseGit里面对应的操作来进行操作的;
-
团队的合作,我们一定要养成习惯每天先更新拉取远程代码(pull),然后每天提交推送自己的代码(commit+push)。
这几节课程针对的主要是windows下的用户,实际上在mac上面的使用也是类似的,只是安装的软件不太一样而已,大家可以尝试一下,后续我们会继续推出和Git相关的在Mac上的使用和在Linux服务器上使用Git更新来发布部署等相关教程,敬请期待,感谢你的学习,和你一起,期待再次与你相见!!
网友评论