一、版本控制的发展

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 文件名。

[工具] Git版本管理(一)(基本操作)的更多相关文章

  1. [工具] Git版本管理(知识总结)

    对以下文档进行了简要总结,方面复习: [工具] Git版本管理(一)(基本操作) [工具] Git版本管理(二)(分支) [工具] Git版本管理(三)(工作流) [工具] Git版本管理(四)(贡献 ...

  2. [工具] Git版本管理(四)(贡献开源代码、git配置、git免密、gitignore)

    一.开源项目贡献代码 1.fork项目代码 例如,我们想向tornado框架贡献代码,首先搜索tornado. 然后,将tornado的代码fork到我们的仓库中. 2.clone到本地进行开发 克隆 ...

  3. [工具] Git版本管理(二)(分支)

    一.分支 1.git中如何保存版本 在我们以往使用文件来进行版本控制的时候,都是将上一个版本复制一份,然后在其基础上进行修改. 但在git中,git只保存当前版本和上一个版本之间的差异,这样可以节省存 ...

  4. [工具] Git版本管理(三)(工作流)

    一.冲突解决 Beyond Compare软件 下载BCompare软件,并安装. 删除安装目录下的BCUnrar.dll文件. 使用码: w4G-in5u3SH75RoB3VZIX8htiZgw4E ...

  5. GIT版本管理工具教程

    目录 GIT版本管理工具教程 一 Git初始化 二 简单指令使用 基本操作 简单总结 三 Git进阶 Git三大区域 Git回滚 Git分支 Git工作流 四 Github代码管理仓库 第一步:注册G ...

  6. linux系统下使用流行的版本管理工具 Git

    前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...

  7. GIT版本管理工具

    原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...

  8. 版本管理工具Git(1)带你认识git

    简介 本篇将带领大家认识,git.github,让大家对git有基本的认识:下面将持续更新几篇文章来介绍git,见git导航: 下一篇中将讲解git的安装及使用: Git系列导航 版本管理工具Git( ...

  9. 版本管理工具Git(2)git的安装及使用

    下载安装git 官方下载地址:https://git-scm.com/download/win 这里以windows为例,选择正确的版本: 验证是否安装成功,右键菜单中会出现如下菜单: Git工作流程 ...

随机推荐

  1. iOS开发 分享到QQ空间提示"分享失败 应用不存在"

    本人遇到该问题的原因是配置SDK初始化时的APPID错误,可以参考下shareSDK的集成文档中的一段话: 可选:支持QQ所需的相关配置及代码 登录QQ互联(http://connect.qq.com ...

  2. Java练习 SDUT-2737_小鑫の日常系列故事(六)——奇遇记

    小鑫の日常系列故事(六)--奇遇记 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 今天,小鑫在山上玩的时候,意外被推下 ...

  3. CNN输出维度的计算

    在 CNN 的一层中的 patch 中共享权重 w ,无论猫在图片的哪个位置都可以找到.   当我们试图识别一个猫的图片的时候,我们并不在意猫出现在哪个位置.无论是左上角,右下角,它在你眼里都是一只猫 ...

  4. 08查找满足条件的n个数

    第一节.寻找和为定值的两个数 题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可. 例如输 ...

  5. HZOJ visit

    对于前30%的数据,可以考虑dp,f[i][j][k]表示时间为i,在i,j位置的方案数,枚举转移即可.要注意的是可以走到矩阵外. 对于另外30%数据,考虑推一下式子,设向右走y步,左z,上s,下x. ...

  6. C++第三次作业:友元类

    友元类 将数据与处理数据的函数封装在一起,构成类,即实现了数据的共享又实现了隐藏,无疑是面向程序设计的一大优点,但是封装并不总是完美的,一旦需要涉及到一个类的两个对象的数据处理问题该怎么办?无论是设计 ...

  7. 解决TortoiseSVN中out of date问题的一个方法

    http://blog.csdn.net/freefalcon/article/details/645058 从去年开始,公司的代码管理从CVS转向了subvsersion,后者确实是前者的一个飞跃, ...

  8. win10 uwp 在 VisualStudio 部署失败,找不到 Windows Phone 可能的原因

    在我使用 VisualStudio 调试的时候,发现我插入了手机,但是 VisualStudio 在部署的时候找不到手机. 可能的原因是 手机禁用了连接,第二个原因是可能手机驱动没正确让 Visual ...

  9. linux进程一个阻塞 I/O 的例子

    最后, 我们看一个实现了阻塞 I/O 的真实驱动方法的例子. 这个例子来自 scullpipe 驱 动; 它是 scull 的一个特殊形式, 实现了一个象管道的设备. 在驱动中, 一个阻塞在读调用上的 ...

  10. 转 最近5年183个Java面试问题列表及答案[最全]

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 Stri ...