Git —— 目前世界上最先进的分布式版本控制系统,高端大气上档次!
四、分支
什么是分支?加入你现在正在开发一个新功能,突然线上出现了一个严重的bug需要立刻修复,但是你正在开发的新功能已经写了一半了,不能撤销,也不能运行,使得项目处于残废的状态。这个时候你就会用到分支功能了,创建一个新的分支,此时你就回到了你开始开发这个新功能最初的状态(也是最后一次提交的状态),在这个新分支上进行修改严重bug,修改完毕之后进行提交,然后再回到原来分支上继续开发你完成一半的新功能。
1、分支的新建、切换、合并、删除
一开始创建仓库的时候,Git会默认给我们一个master分支(可以理解为主分支,实际与其他分支没有任何区别),而且我们之前的提交都是在master分支上完成的
newfunc
,为此我们创建一个新的分支,并在此分支上开发这个新功能,终端执行:
$ git branch newfunc //创建一个名字为newfunc的分支
$ git checkout newfunc //切换到该分支
然后我们就开始在此分支上进行开发了,写到一半时,突然领导发现了一个严重的线上bug让我们立刻解决并发布,显然很着急,但是现在新功能刚写到一半,不能运行,属于残废状态,撤销了吧也不可能毕竟辛辛苦苦写了很长时间了,怎么办呢?分支来帮你!此时将你正在写的提交,相当于保存进度
$ git commit -a -m "newfunc first commit"
然后切换到master分支
$ git checkout master //切换分支
这个时候你会发现你的工作目录回到了你最后一次提交时的状态,现在就可以解决那个严重bug了,针对此bug,我们再新建一个分支
$ git checkout -b hotfix //新建并切换到hotfix分支
接下来就是修改bug工作了,修改完毕之后进行提交
$ git commit -a -m "hotfix commit"
hotfix
分支的工作全部完成了,然后就可以将其合并到你的master
分支上了
$ git checkout master //切换到master分支
$ git merge hotfix //合并hotfix分支到当前分支
hotfix
分支了,那么就把它删了吧
$ git branch -d hotfix //删除分支
现在你可以切换回你正在工作的分支newfunc
继续你的工作
$ git checkout newfunc //切换分支
开发中............开发完毕了,提交
$ git commit -a -m "newfunc second commit"
newfunc
分支的工作也全部完成了,那么就可以将这两个分支合并起来了,其操作跟之前你合并 hotfix
分支差不多
$ git checkout master //切换到master分支
$ git merge newfunc //合并newfunc分支到当前分支
但是,Git的工作原理跟之前合并hotfix
分支不一样,因为master
分支所在提交并不是newfunc
分支所在提交的直接祖先,出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C5 和 C6)以及这两个分支的共同祖先(C3),做一个简单的三方合并。
newfunc
分支了。 现在你可以删除这个分支了
$ git branch -d newfunc //删除分支
2、解决冲突
有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,那么就会产生冲突此时Git会暂停合并,等待你去解决冲突,接下来我们需要查找那些因包含合并冲突而处于未合并(unmerged)状态的文件
$ git status
任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突,出现冲突的文件会包含一些特殊区段
<<<<<<<
=======
>>>>>>>
用过SVN的朋友相信都能看懂这个,手动解决完冲突,删除这些区段,用$ git add
命令对每个冲突文件标记为已解决,再次运行$ git status
来确认所有的冲突都已被解决
$ git commit -m "conflict fixed"
最后,删除newfunc分支
$ git branch -d newfunc
五、Git服务器
到目前为止,你基本上已经掌握了Git最常用的功能,你应该已经有办法使用Git来完成日常工作。 然而,为了使用Git协作功能,你还需要有远程的Git仓库 —— Git服务器。
Git服务器哪里来呢?两种方式,一是自己搭建,二是使用三方托管。
如果你选择方式一,自己搭建Git服务器,搭建简单,但是对服务器的设置和维护起来会消耗你大量的时间和精力,如果你想自己搭建,可参考搭建Git服务器
你也可以选择方式二,简单、方便,托管网站有好多,比较有名的比如GitLab、GitHub等