分布式版本控制系统Git简明教程(三)
Git是目前世界上最先进的开源分布式版本控制系统。对于所创建的版本库中一切文本文件,网页,程序代码等发生的任何改动都会自动记录下来,例如当某次改动导致程序错误时可以回退至上一个改动前的版本,也方便了多人协作开发时每个成员都可以得到其他成员对项目的改动信息。而Git作为分布式版本控制系统,每个人的计算机就是一个服务器,改动信息在成员的计算机之间互相提交。摆脱了集中式服务器故障导致的成员版本控制系统瘫痪,只要一个成员的计算机可以正常工作,则可以将版本信息复制给其他成员,提高了系统的鲁棒性。
当我们已经学会了创建本地版本库与远程版本库并将它们关联在一起而进行库文件的克隆与推送时(具体可见分布式版本控制系统Git简明教程(一)和分布式版本控制系统Git简明教程(二)),Git分布式协同工作的功能已经可以实现了。
但只有一条时间线的版本管理在多成员协同工作时显得有点拥挤,下面我们将介绍Git提供的多时间线分支(branch)功能及其实现。
一.分支的创建合并与删除
一般在创建版本库的时候会默认创建一个master主分支,HEAD指针指向当前版本节点。例如提交修改至主分支master时,HEAD指针指向此master主分支的最新版本节点。当创建并切换至自建分支时,对修改的提交则会更新自建分支的版本节点,HEAD指针会指向自建分支中最新版本节点。将自建分支融合入master主分支,会将master主分支更新至自建分支内的最新版本节点,然后HEAD指针指向这个master主分支的最新版本节点。
在当前版本创建以当前版本为起点的分支,用以下bash命令:
$ git branch <name> #name可以自定义分支的名字
查看项目中所有的分支,会列出所有创建过的分支,且会在当前分支前加*来注明,用以下bash命令:
$ git branch
切换当前分支到目标分支的bash命令有两种:
#1.常见的切换可以用checkout加目标分支名字实现
$ git checkout <name>
#2.新版的Git也可以用switch加目标分支名字,更加直观的实现
$ git switch <name>
将某分支合并至当前分支的bash命令:
$ git merge --no-ff -m "description" <name> #禁用fast-forward的加描述分支合并
当自创建的分支合并入master分支后,就可以删除这个自创建的分支了,删除命令如下:
$ git branch -d <name>
二.解决冲突分支
当master分支和自定义分支对同一文件作了不同的修改后推送至远程,当此时将自定义分支合并至master分支时,就会无法合并,因为Git不知道合并后的文件以哪个修改为准。
此时打开此文件会有冲突所在位置的标识,我们只能手动确定其中的一种修改方法,删除另一种后保存,再将文件add和commit推送至远程,此时自定义分支与master主分支就在下一个时间点合并在一起了,且文件以你确定的唯一修改方法作为当前最新版本。
对于具体的分支合并流程图可以使用下面bash命令显示:
$ git log --graph
三.Dev分支,Bug分支和Feature分支
1.在开发中,一般master分支是主分支是最稳定的,只用于发布新版本而不在上面做开发,所以这时我们需要创建一个Dev分支,作为开发分支。所有开发人员都是在Dev分支上再自建自己的分支并开发,当每个人完成自己的开发并将分支合并至Dev分支后才能将Dev分支再合并至master主分支作为项目的一个新版本。如图所示:
(图源https://www.liaoxuefeng.com)
2.当项目中有需要修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;当手头工作没有完成时,先把工作现场通过以下bash命令保存当前工作,然后去修复bug:
$ git stash
修复后,再通过下面的命令,回到工作现场,继续之前的工作:
$ git stash pop
在master分支上修复的bug,想要合并到当前dev分支,可以用以下命令,把bug提交的修改“复制”到当前分支,避免重复劳动:
$ git cherry-pick <commit> #commit为bug修改操作的ID
3.开发一个新功能,最好新建一个feature分支;如果要丢弃一个没有被合并过的分支,可以通过下面命令强行删除:
$ git branch -D <name>
四.多人协作
1.首先,可以试图用push推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用下面的命令拉取最新版本然后试图合并:
$ git pull
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用push推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用下面命令链接:
$ git branch --set-upstream-to <branch-name> origin/<branch-name>。
这样,利用分布式版本控制系统Git的团队协作开发就可以顺利进行
至此,有关分布式版本控制系统Git的简明教程就结束了,当然由于GitHub远程仓库的功能愈加完善,许多功能均以可视化的网页界面直接操作方便了我们的工作,但本教程的主要目的是共同学习Git的基本原理,掌握分布式版本控制系统的工作过程,以便更好的去使用GitHub,希望大家能够学有所得ヾ(◍°∇°◍)ノ゙