Git学习总结
为什么要进行版本控制?
当我们在实际编程时,往往有回滚到上一个版本来比较两个版本差异的需求,这时就需要我们备份软件版本历史,在版本控制系统出现之前,我们要保存文件版本只能通过朴素的复制粘贴来完成,费时费力费空间,还难以看出版本的变化历程,因此,我们需要版本控制系统。
版本控制系统的类别
集中式版本控制系统
仓库存储于独立的服务器,支持多开发者之间的协作。在分布式版本控制系统出现之前,它是主流VCS,但存在一些弊端:
- 所有的文件存储与一个服务器中,一旦服务器崩溃,数据将遗失
- 开发者每次想要开发项目,都要先从远程服务器中拉取,耗时
而分布式版本控制系统很好的改善了这两个问题。
分布式版本控制系统——Git
我在此引用老师ppt中的示例图
可以看到Git比集中式版本控制系统多了两个存储区,暂存区和本地存储仓库
本地存储仓库是本地的CMDB,暂存区用于隔离工作目录和Git仓库
独立于远程仓库建立一个属于自己的本地仓库,这就解决了上面集中式版本控制系统所遇到的问题
Git存储原理
在Git中,版本的变化是以有向树的形式展示的,从远程仓库clone项目的同时也会复制整个对象树。在对象树中,每一个节点对应一个项目的版本,我们可以把节点理解为指针,指向它所对应的文件。在实际工作中,有很多文件在整个版本控制路程中很少修改甚至根本不做修改,因此,为了节省空间,减少存储冗余文件,在一次commit时未做修改的文件仍会被新版本节点所指,即多个版本可以指向同一个文件。
此外,Git与集中式版本管理系统还有些不同,即Git存储发生变化的整个文件,而集中式版本管理系统只存储改变的代码行,这意味着Git省去了两个文件相互比较从而抽出新的代码行的操作,变得更加高效。
Git指令
- git add :添加文件至暂存区
- git commit :提交新版本至本地仓库
- git push :提交新版本至远程仓库
- git clone :从远程仓库克隆一个相同的版本库至本地仓库,从无到有
- git pull :从远程仓库拉取更新的分支,并于本地分支合并,从有到更新
- git fetch :从远程仓库拉取更新的分支,但不与本地分支合并
- git merge :将两个分支合并 注:git pull = git fetch + git merge
- git diff :比较文件在暂存区和工作区的不同
- git reset : 回滚到之前版本,撤销提交