git版本控制系统

228 阅读5分钟

GIT版本控制系统

版本控制系统:

  1. 记录历史版本信息(记录每一次修改的记录)
  2. 方便团队相互之间协作开发

.......

常用的版本控制系统

  • cvs / svn:集中式版本控制系统
  • git :分布式版本控制系统

GIT工作原理

  • 工作区:我们能看到的,并且用来写代码的区域
  • 暂存区:临时存储用的
  • 历史区:生成历史版本

工作区 -> 暂存区 -> 历史区

1.GIT的全局配置

第一次安装完成git后,我们在全局环境下配置基本信息:我是谁?

$ git config -l  查看配置信息
$ git config --global -l  查看全局配置信息

配置全局信息:用户名和邮箱
$ git config --global user.name 'xxx'
$ git config --global user.email 'xxx@xx.xx'

2.创建仓库完成版本控制

创建本地git仓库

$ git init 
//=>会生成一个隐藏文件夹 “.git”(这个文件夹千万不要删,因为暂存区和历史区还有一些其它的信息都在这里,删了就不是一个完整的git仓库)

在本地编写完成代码后(在工作区),把一些文件提交到暂存区

$ git add xxx  把某一个文件或者文件夹提交到暂存区
$ git add .  把当前仓库中所有最新修改的文件都提交到暂存区
$ git add -A
 
$ git status 查看当前文件的状态(红色代表在工作区,绿色代表在暂存区,看不见东西证明所有修改的信息都已经提交到历史区)

把暂存区内容提交到历史区

$ git commit -m'描述信息:本次提交内容的一个描述'

查看历史版本信息(历史记录)
$ git log
$ git reflog  包含回滚的信息

历史就回滚

$ git reset --hard 版本号

把本地仓库与远程仓库连接起来

//建立连接
//查看本次仓库和哪些远程仓库保持连接
$ git remote -v
//让本地仓库和远程仓库新建一个连接 origin是随便起的一个连接名(不过一般都叫做origin)
$ git remote add origin [GIT远程仓库地址]
//删除关联信息
$ git remote remove(rm) origin

提交前最好先拉取
$ git pull origin master
把本地代码提交到远程仓库(需要输入github的用户名密码)
$ git push origin master
$ git clone [远程仓库git地址] [别名:可以不用设置,默认是仓库名]
/*
*真实项目开发流程:
*1.组长创建中央仓库(增加协作者)
*2.小组成员基于 $ git clone 把远程仓库克隆到本地仓库(解决了三个事情:初始化一个本地仓库“git init”,和对应的远程仓库保持了关联“git remote add”。把远程仓库拉取到本地“git pull”)
*3.每个组员写完自己的代码后,基于“git add/git commit”把自己的代码存放到历史区,然后通过“git pull/git push”把本地信息和远程仓库信息保持一致(可能涉及冲突的处理)
*/

无分支管理模式

当前团队只使用一个master分支管理:
老大在远程仓库创建了一个master仓库,把所有人拉进去成为贡献者,然后所有的尘谷氨都可以访问了。
第一步:git clone 仓库地址;
第二步:以后每天上班,首先通过“git pull origin master”拉取到最新的代码,然后开始编写自己的代码,没完成功能的话,第二天接着pull会把最新的代码和自己的工作区的代码合并在一起。如果完成一个功能后,把自己工作区的代码生成一个历史版本通过“git push origin master”提交上去,但是我们在提交之前最好先做“git pull origin master”拉去下来解决冲突问题;一般有两个冲突:同一行代码冲突=>通过“:wq”保留远程仓库的,不同行代码冲突的话,会把两个都留下来,需要自己决定留哪一个没然后在生成历史版本提交上去。

有分支管理模式

分支管理操作:
git checkout -b xxx  创建分支并切换到指定分支下(把当前的分支信息同步到新的分支上)
git branch  查看本地的分支
git branch -a/-r  查看远程的分支
git branch xxx  创建分支
git checkout xxx  切换分支
git branch -D xxx  删除分支
git merge xxx  把xxx分支合并到当前分支
git stash / git stash pop  在切换分支的时候,有一部分信息没有提交成为历史版版本,为了防止信息丢失,我们需要先使用stash保存,然后再基于pop还原。

对于有分支管理模式:
master分支就是神圣不可触碰的,我们通过“git pull”拉取远程仓库的master代码下来后,然后在自己的本地仓库创建一个分支并切换到这个分支“git checkout -b dev”,接下来的代码都在自己的分支上玩,完成一个功能后,生成历史版本合并到master主分支上,想要合并,首先先切到master分支“git checkout master”,然后在进行合并“git merge dev”,同样会出现上面的两种冲突,解决好冲突后,再提交一次历史版本。
在这里我们可能通过gitee或者gitlab或者github的合并操作,如果直接在上面进行冲突解决的话,那么本地就不需要自己提交历史版本了。

这里有个例子:
三个分支:master,dev(主管),our(自己)
我们首先通过“git clone 仓库地址”拉取到master,在进行“git checkout -b our”创建并切换到our分支;之后在自己的分支上编写代码,最后想合并到主管的分支上,那么我们需要现在自己的分支上提交历史版本,然后切换到主管的分支,合并之前需要“git pull”获取到最新的代码,然后“git merge our”进行合并,有冲突解决冲突,之后再提交一个历史版本,没有冲突直接“git push”。
那么这里就有一个问题了,怎样获取到主管的分支呢,别着急这里有解决方法:
首先查看一下远程的分支有哪些:“git branch -a/-r”,然后在本地新建一个分支和目标(主管)分支同步:“git checkout -b dev origin/dev”,这样就把主管的的代码拉取到本地分支上。

当我们切换分支的时候,想要切换分支的时候,工作区的内容修改了:
例如我这里有两个分支,master和dev,我们在dev生成了一个历史版本,想要切换分支到master,但是在切换分支之前,我们的工作区又写了一些代码,没有生成历史版本,这个时候我们就需要把他暂存起来,“git add .”“git stash”,在我们再次切换分支回来的时候再通过“git stash pop”把其还原回来。

直接拉去远程制定某个分支的代码:"git clone -b dev 地址",相当于把远程的dev分支拉去下来。