一、版本控制的发展
1.用文件来做版本控制
我们在写论文、做方案等的时候,一般都会同时在文件夹中存在很多版本的文件。
例如:
这种方式很常用,在很多领域都是用这种方式来进行版本控制的。
2.本地版本控制
实用一个本地软件,对所有的文件版本做管理,只提供给我们看到一个版本的文件。
然后可以通过命令等方式来切换版本。
3.集中式版本控制
代表:SVN
实用一个服务器来进行版本控制,充当中心仓库。所有的开发者在自己电脑上进行开发,并提交给中心仓库。
缺点:当断网或服务器宕机的时候,无法提交。
4.分布式版本控制
代表:git
结构和SVN很像,不同的是除了在服务器上维护所有的版本,还在用户的本地计算机也维护一套所有的版本。
这样,用户可以在自己的本地进行版本控制,然后在合适的时机同步给中心服务器即可。
二、安装git软件
下载地址:https://git-scm.com/download/win
windows上安装git软件,只需一直下一步即可。
在Linux上(CentOS)安装git,只需使用命令:
yum install git -y
Windows下安装完毕后,点击鼠标右键:
只要看到Git GUI Here 以及Git Bash Here就说明git安装好了。
三、初次使用git
1.使用流程
1)首先创建工作目录
我们首先要创建一个工作目录,例如D盘下的leo目录。
2)进入创建好的目录
进入leo目录。
3)右键打开Git Bash
在leo目录中,右键点击Git Bash,打开git命令窗口。
4)初始化git
在git bash中执行命令:
git init
执行完毕后,会在当前目录(即D:leo)中生成一个隐藏的文件夹:
这个文件夹中就是git进行版本控制所需的所有文件,我们不要轻易去改动它。
5)配置个人信息
配置个人信息,主要是邮箱和用户名。这些信息主要是用在生成版本的时候,需要记录生成版本用户的信息。
如果没有配置个人信息,则执行commit命令时可能会报错。(一般是在首次安装git工具的时候配置一次即可)
执行命令:
git config --global user.email "leo4774177@gmail.com" git config --global user.name "leokale"
6)查看管理目录下文件状态
执行以下命令:
git status
使用该命令,可以查看管理目录(D:leo)下所有文件的管理信息。
例如我们新添加两个文件:
touch leo.py touch README.txt
然后,再执行git status查看文件状态:
我们可以看到,新添加的两个文件都是红色的,这是因为这两个文件被git扫描到了,但是发现并没管理起来,所以显示红色。
7)将新文件管理起来
使用以下命令将未被管理的文件纳入管理:
git add leo.py # 将leo.py纳入管理
git add README.txt # 将README.txt纳入管理
或者:
git add . # 表示将所有未管理的文件纳入管理
此时再使用git status查询状态:
我们可以看到README.txt和leo.py文件都变为绿色,说明被git管理起来了。
8)修改文件(变红)
当文件被管理起来后(绿色),我们对其进行修改,git会自动检测到文件被修改,并将其变为红色:
9)撤销修改
在这种被修改的情况下,可以使用以下命令,让其回到修改之前的状态:
git checkout test.txt
10)生成版本(提交)
当我们将需要管理的文件都纳入管理后(需要的都变绿),则可以生成一个版本。
使用以下命令:
git commit -m "version1.0"
commit表示提交,即生成一个版本,-m表示该版本的说明。
(注意,在使用git commit之前,一定要配置个人信息)
提交完毕后,使用以下命令查看:
git log
我们可以看到刚才生成的版本信息,其中包括版本的ID,作者(邮箱),时间以及版本信息。
2.git简单使用总结
在第三节中,简单使用了Git进行版本控制,总结如下:
1)进入要管理的文件夹
2)执行初始化命令
git init
3)管理目录下的文件状态
git status
4)管理指定文件
git add 文件名
git add .
5)撤销修改
git checkout 文件名
6)个人信息配置
git config --global user.email "leo4774177@gmail.com" git config --global user.name "leokale"
7)生成版本
git commit -m "Version1.0"
8)查看版本记录
git log
五、Git的三大区域
从上图中我们可以看到,Git中主要分为3大区域:
工作区:就是我们的工作目录,里面包含已经被管理起来的文件和未被管理起来的文件(例如新增的文件,刚被修改后的已管文件)。
暂存区:通过git add命令,可以将工作区中未被管理的文件(红色文件)放到暂存区。暂存区是工作区和版本库之间的一个缓冲带,在生成版本之前,给用户做思考决定用的。
版本库:用于存放以生成的版本。
六、回滚
1.回滚过程
当我们开发了N多功能,例如html页面(Version1.0版本):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Index</title> </head> <body> <ul> <li>欧美</li> <li>日韩</li> <li>港台</li> </ul> </body> </html>
当我们加上"直播"和"约饭"功能后,版本信息变为:
此时,html变为:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Index</title> </head> <body> <ul> <li>欧美</li> <li>日韩</li> <li>港台</li> <li>直播</li> <li>约饭</li> </ul> </body> </html>
页面变为:
假设,站点遇到检查,要求下线"约饭"功能,则可以使用回滚:
git reset --hard 3f1ded74ecb60d700b1991e4341788c5fadd0729
回滚到"直播"功能版本,后面的ID就是提交"直播"功能版本的ID。
此时,页面变为:
如果此时,通过一些手段,又可以再次上线"约饭"功能,只不过需要将"约饭"改为"约":
那我们如何从"直播"功能再回滚到"约饭"版本:
当我们使用git log 查询版本,结果没有"约饭"版本:
所以,此时我们应该是用另外一个命令:
这样,就可以看到"约饭"功能的ID为"6db4bfa"。使用git reset回滚:
git reset --hard 6db4bfa
页面:
可以看到,版本已经回滚到"约饭"版本。
然后我们修改"约饭"为"约",并在此提交:
这样,我们再看页面:
2.回滚总结
1)查看版本信息
git log
2)回滚到之前的版本
git reset --hard 版本号
3)回滚到之后的版本
git reflog
git reset --hard 版本号
七、各区域切换
解释:
1)已控制文件被修改后,会变更为modified(红色)状态,这是git自动检测的。
2)新添加文件是new file状态(红色),也是git自动检测到的。
3)modified状态(红色)文件经过git add,放入暂存区(绿色)。
4)暂存区(绿色)文件经过git commit,生成版本。
5)已生成的版本通过git reset --soft 版本ID,可以回到暂存区。
6)已生成的版本通过git reset --mix 版本ID,可以回到modified状态和new file状态(提交前哪些文件被修改、新增,则哪些文件回到这些状态)。
7)已生成的版本通过git reset --hard 版本ID,可以回到工作区已管理的状态(最常用的reset)。
8)通过git add到暂存区的文件,如果想撤销,让其回到modify的状态,可以使用git reset HEAD 文件名。
9)已管理文件修改后变为modified状态,如果想撤销修改,则使用git checkout 文件名。