Git基础
一、Git是什么?
Git是一个开源的分布式版本管理系统; Git是由Linus开发用于管理和维护Linux内核源码; Git是目前世界上最先进的分布式版本管理系统。
1.版本管理系统
在我们的实际开发过程中,经常会有这种需求或问题
我们需要在已经发布的程序中添加新的功能,如果测试验证后没有问题,才会使用新的代码,而在测试验证期间,不能影响原来的代码。我们常用的方式应该就是备份多份源代码。这么做唯一的好处就是简单,但是特别容易犯错。 实际项目开发基本都是多个人合作完成,在多个人写代码时,就牵扯到代码合并成一份的问题。每个人修改或者维护之后会产生一个新的版本,将这些不同版本的代码进行统一管理的系统被称之为——版本管理系统
2.分布式版本管理系统
- 集中式:SVN,将修改或者维护后的不同版本的代码交给一个中央服务器进行统一管理,但这么做有一个坏处,如果这个中央服务器挂掉了那么代码也会丢失,为了改变此类现状,后来又出现了分布式版本管理系统。
- 分布式:同样会有一台中央服务器对代码进行统一管理,但是和集中式不同的是,分布式会在个人的计算机上创建一个本地仓库,它的作用就类似于中央服务器,在团队中,万一中央服务器挂掉了,也可以在个人的本地仓库中查看代码版本信息,本地服务器挂掉了也可以在同事的本地仓库拉取代码。
二、相关概念
1. workSpace
概念:workSpace也被称为工作空间,在编辑器或者文件夹下所看到的目录就是工作空间。
2.Index
概念:也被称之为暂存空间,用于保存你需要提交到Repository中修改的记录。
3.Repository
概念:Repository也被称为本地仓库,用于记录文件修改的版本库,我们可以在多个版本之间切换,用于还原到某个指定版本的内容。
4.Remote
概念:Remote为远程仓库,和Repository功能一致,只是Remote远程仓库时可以合并多个用户本地仓库的记录。
5.大致流程图
6.Git工作流
Master :生产环境发布分支; Develop :开发分支; Test :测试分支; 禁止在master和develop上进行开发 当你需要开发新的功能或者修复bug,你需要按照以下步骤:
- 在develop分支下git pull,拉取远程分支develop更新到本地develop;
- 在本地develop下checkout一个新的本地分支,比如feature1;
- 在本地feature1进行开发,然后将多个提交记录通过git rebase进行合并;
- 切换到develop分支下,git pull拉取远程develop分支的更新;
- git merge feature1,将feature1的代码合并到本地develop下;
- 推送本地develop到远程分支develop。
三、Git原理及实质
Git管理的时修改,而非文件的内容
什么是修改呢?当工作区内容和暂存区的内容不一致时,Git就可以判定为文件发生了修改。
Git判定修改的逻辑是:通过一个算法将暂存区中的某个文件内容算出一个hash值与工作区文件内容的hash比较。
四、Git命令
使用 ”git help -a“ 可以查看所有命令的介绍信息:
常用命令:
- git init :初始化一个本地仓库,会在当前目录生成一个".git"文件夹,该文件夹的目录中包含版本管理的全部数据。
- git add :将工作区的内容添加到暂存区
- git add -a :提交所有变化;
- git add -u :提交被修改或被删除的文件,不包括新文件;
- git add . :提交新文件和被修改的文件,不包括被删除的文件;
- git reset :撤销 git add的操作,重置指针到当前位置;
- git reset --soft :只是改变指针到指定commit,不会丢失内容;
- git reset --hard :改变指针和工作区到指定位置;
- git commit :将暂存区的内容上传至本地仓库;
- git commit -m “提交信息”;
- git commit -amend “修改上次提交信息”;
- git log:查看提交信息;
- git log --graph :查看提交曲线;
- git log --pretty=online :如果嫌输出的信息太多可以使用该命令查看简易版记录;
- git rm :删除文件;
- git rm 文件名 :删除指定文件;
- git rm -r delete :从工作区和暂存区中删除目录;
- git rm --cached 文件名 :只从暂存区删除;
- git status :查看文件状态;
- git revert :回退提交到指定位置,和 git reset 区别在于日志中会有记录revert操作;
- git stash :储存你想修改的内容,而不是提交到本地仓库中。
- git stash save :储存当前工作区的改变和没有提交到本地仓库的暂存区的内容;
- git stash list :查看储存列表;
- git stash pop :应用某个储存列表;
- git rebase :将多个commit合并到一个commitid上面;注意:不允许再公共分支上进行rebase操作;
- git remote :关联远程仓库;
- git clone :将远程仓库克隆到本地;
- git pull :拉取远程仓库分支内容,合并到本地分支;
- git fetch:相当于是从远程仓库获取最新版本到本地,不会自动合并;
- git push :将本地分支推送到远程仓库;
五、分支
在团队开发中往往需要很多分支,master分支往往是总分支,团队成员需要自己创建自己的开发分支development,每个分支都会对应相应的功能,最后开发完成后合并到master分支上。
分支常用命令
- git branch :列出、创建或删除分支;
- git branch :查看本地分支;
- git branch -a :查看本地和远程分支;
- git branch -c :创建分支;
- git branch -d 分支名 :删除分支;
- git branch -m :重命名分支;
- git checkout :切换到指定分支,检出某个分支;
- git checkout -b 分支名 或 git switch -c 分支名:创建并切换到该分支;
- git checkout --: 撤销修改;
在新版本的Git中,使用git switch 分支名 来切换指定分支; - git merge 分支名 :合并某分支到当前分支;
HEAD指针
记录的是当前工作区在哪个分支,分支文件中记录的commit。
|