Git详细教程(三)

Git —— 目前世界上最先进的分布式版本控制系统,高端大气上档次!

【Git分支】 【Git服务器】

四、分支

什么是分支?加入你现在正在开发一个新功能,突然线上出现了一个严重的bug需要立刻修复,但是你正在开发的新功能已经写了一半了,不能撤销,也不能运行,使得项目处于残废的状态。这个时候你就会用到分支功能了,创建一个新的分支,此时你就回到了你开始开发这个新功能最初的状态(也是最后一次提交的状态),在这个新分支上进行修改严重bug,修改完毕之后进行提交,然后再回到原来分支上继续开发你完成一半的新功能。

1.分支的新建、切换、合并、删除

一开始创建仓库的时候,Git会默认给我们一个master分支(可以理解为主分支,实际与其他分支没有任何区别),而且我们之前的提交都是在master分支上完成的 HEAD指向的就是当前的分支,假设目前的状态就是已经提交完新版本了,现在我们要开发一个新功能,代号为newfunc,为此我们创建一个新的分支,并在此分支上开发这个新功能,终端执行:

1
2
$ git branch newfunc      //创建一个名字为newfunc的分支
$ git checkout newfunc //切换到该分支

然后我们就开始在此分支上进行开发了,写到一半时,突然领导发现了一个严重的线上bug让我们立刻解决并发布,显然很着急,但是现在新功能刚写到一半,不能运行,属于残废状态,撤销了吧也不可能毕竟辛辛苦苦写了很长时间了,怎么办呢?分支来帮你!此时将你正在写的提交,相当于保存进度

1
$ git commit -a -m "newfunc first commit"

然后切换到master分支

1
$ git checkout master      //切换分支

这个时候你会发现你的工作目录回到了你最后一次提交时的状态,现在就可以解决那个严重bug了,针对此bug,我们再新建一个分支

1
$ git checkout -b hotfix      //新建并切换到hotfix分支

接下来就是修改bug工作了,修改完毕之后进行提交

1
$ git commit -a -m "hotfix commit"

此时hotfix分支的工作全部完成了,然后就可以将其合并到你的master分支上了

1
2
$ git checkout master      //切换到master分支
$ git merge hotfix //合并hotfix分支到当前分支

既然已经合并到一起了,你也就不再需要hotfix分支了,那么就把它删了吧

1
$ git branch -d hotfix      //删除分支

现在你可以切换回你正在工作的分支newfunc继续你的工作

1
$ git checkout newfunc      //切换分支

开发中…………开发完毕了,提交

1
$ git commit -a -m "newfunc second commit"

此时,newfunc分支的工作也全部完成了,那么就可以将这两个分支合并起来了,其操作跟之前你合并 hotfix 分支差不多

1
2
$ git checkout master      //切换到master分支
$ git merge newfunc //合并newfunc分支到当前分支

但是,Git的工作原理跟之前合并hotfix分支不一样,因为master分支所在提交并不是newfunc分支所在提交的直接祖先,出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C5 和 C6)以及这两个分支的共同祖先(C3),做一个简单的三方合并。 既然你的修改已经合并进来了,你已经不再需要newfunc分支了。 现在你可以删除这个分支了

1
$ git branch -d newfunc      //删除分支

2.解决冲突

有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,那么就会产生冲突此时Git会暂停合并,等待你去解决冲突,接下来我们需要查找那些因包含合并冲突而处于未合并(unmerged)状态的文件

1
$ git status

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突,出现冲突的文件会包含一些特殊区段

1
2
3
<<<<<<<
=======
>>>>>>>

用过SVN的朋友相信都能看懂这个,手动解决完冲突,删除这些区段,用$ git add命令对每个冲突文件标记为已解决,再次运行$ git status来确认所有的冲突都已被解决 然后,提交

1
$ git commit -m "conflict fixed"

最后,删除newfunc分支

1
$ git branch -d newfunc

五、Git服务器

到目前为止,你基本上已经掌握了Git最常用的功能,你应该已经有办法使用Git来完成日常工作。 然而,为了使用Git协作功能,你还需要有远程的Git仓库 —— Git服务器。

Git服务器哪里来呢?两种方式,一是自己搭建,二是使用三方托管。
如果你选择方式一,自己搭建Git服务器,搭建简单,但是对服务器的设置和维护起来会消耗你大量的时间和精力,如果你想自己搭建,可参考搭建Git服务器
你也可以选择方式二,简单、方便,托管网站有好多,比较有名的比如GitLabGitHub


参考链接
Git - Book
Git教程 - 廖雪峰的官方网站


坚持原创技术分享,您的支持将鼓励我继续创作!
0%