Git分布式版本控制系统详解

一、认识Git

1、什么是Git

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

下面我们可以举一个通俗易懂的例子:

比如当你在本地写好某一个编程文档时,发现有些地方需要修改或者删除,有的人可能会直接在当前文件中直接修改,有的人会复制一份在上面修改,然后删除没用的文件。但是当你发现还是原来的文件好或者另外的版本好时,就可能手足无措了。

此时使用git工具,就是聪明之举了。我们可以在本地建一个版本库,每当我们需要修改时,就可以把之前的版本提交并标明此版的特点。这样文件夹里就只有一个编程文档了。当你需要哪个版本时,只要在版本库中恢复一下就可以了。

2、什么是版本库?

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,目录里所有文件都被Git管理起来,每个文件的修改,删除,Git都会跟踪,以便任何时候都可以追踪历史或者在将来某一时刻可以还原修改。其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
在这里插入图片描述
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
在这里插入图片描述
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

3、版本控制

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。

版本控制最主要的功能就是追踪文件的变更,必要时还可以回退到以前的版本。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

4、Git的三种状态

已提交(committed):已提交表示数据已经安全的保存在本地数据库中。

已修改(modified) :已修改表示修改了文件,但还没保存到数据库中。

已暂存(staged) :已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

5、Git的三个工作区

Git 仓库、工作目录以及暂存区域

Git仓库目录(远程目录):是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

工作目录 :是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

暂存区域 :是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
在这里插入图片描述
三个区域关系:工作区是我们能看到的区域,我们在工作区修改增加代码;完成编辑后,我们用git add 将工作区文件添加到暂存区;然后利用git commit 提交文件到我们自己的分支。

6、Git 工作流程
在工作目录中修改文件。

暂存文件,将文件的快照放入暂存区域。

提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
7、Git常用命令汇总
命令含义
git clone [url] (自定义仓库名)克隆现有的仓库
git init初始化本地仓库
git add [filename]将文件filename添加到缓存区
git commit -m “add filename”将文件filename提交到本地仓库,如果想要提交信息记录更详细则不要加-m
git status详细显示有变更的文件
git status -s简单显示有变更的文件
git checkout – file1把file1文件在工作区的修改全部撤销
git reset HEAD file把暂存区的修改撤销掉,重新放回工作区
git reset --hard回溯到指定状态,只要提供目标时间点的哈希值
git reflog查看仓库的操作日志,可找到哈希值
git log查看详细修改记录
git log --pretty=oneline更简洁的显示修改历史
git log --graph以图表形式查看修改的日志分支
git rm file1删除file1文件
8、git status -s命令解析

git status -s 以精简的方式显示文件状态。

git status 输出的命令很详细,但有些繁琐。

如果用 git status -s 或 git status --short 命令,会得到更为紧凑的格式输出。

使用 git status -s 或 git status --short 命令查看文件状态时出现的符号含义:

符号含义
??新添加的未跟踪文件
A新添加到暂存区中的文件
右边M该文件被修改了但是还没放入暂存区
左边M该文件被修改了并放入了暂存区
AM该文件添加到了暂存区,又被修改之后未加入暂存区
MM在修改后添加到暂存区,又被修改之后未加入暂存区
9、git如何提交第二次修改呢?

你可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

每次修改,如果不add到暂存区,那就不会加入到commit中。

二、Git的安装及使用

实验环境:

虚拟机ip版本
server1172.25.1.1rhel7.5
1、安装GIt
yum install git -y
git --version   #查看 git 的版本

在这里插入图片描述

2、使用git init命令创建仓库
mkdir demo #创建目录
cd demo/
git init  #将demo目录初始化为git本地仓库
l.  #查看当前目录中隐藏文件

l.查看到的隐藏目录.git,这个子目录中含有初始化Git仓库的所有必须文件,是git仓库的骨干。
在这里插入图片描述
下面的操作均在Git仓库demo目录下。

3、创建文件并使用git add命令添加到缓存区
touch file1
git status -s  #显示文件状态
git add file1 
git status -s

在这里插入图片描述

4、使用git commit命令,把文本提交到仓库
git commit -m "add file1"

命令git commit,可以一次提交很多文件,-m后面输入的是本次提交的说明,如果不使用-m,会出现编辑器来让你写自己的注释信息。
在这里插入图片描述
上图出现的报错提醒,提示需要设置账户信息

git config --global user.name "liuyan"
git config --global user.email liuyan@example.com

设置的账户信息可以在root用户根目录下的隐藏文件.gitconfig 中查看
在这里插入图片描述
添加完账户后重新提交文本
在这里插入图片描述

5、修改文件内容,并进行相应操作,查看其状态变化
git status -s
echo redhat > file1  #更改当前工作区的文件内容
git status -s  #查看状态,发现其状态为右边M
git add file1   #将file1文件添加到暂存区
git status -s    #查看到其状态为左边M
git commit -m "update file1"  #提交到版本仓库
git status -s  #查看不到状态

在这里插入图片描述
在Git中,每当你文件修改完成时,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作。

6、使用git log命令查看文件更改日志记录
git log

在这里插入图片描述
日志简化输出方式:

git log --pretty=oneline

在这里插入图片描述

git reflog
git reflog -p #可查看日志变更

在这里插入图片描述
在这里插入图片描述

7、撤销修改(版本回退)

对已经提交到本地仓库一的文件进行再次修改后撤销修改的方法:
【1】修改后还在当前目录(工作区)里,未提交到暂存区:

git checkout -- file1   

在这里插入图片描述
总结
命令git checkout – readme.txt意思就是,把file1文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是file1自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是file1已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。
【2】修改后git add提交到了暂存区:

git reset HEAD file1   #撤销暂存区(unstage)的修改,重新放回工作区
git checkout -- file1   #撤销工作区的修改

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
在这里插入图片描述

【3】修改后git commit提交到了版崩仓库:

回退到上一版:	git reset --hard HEAD^
回退到倒数第二版: git rest --hard HEAD^^
回退到commit id为xxxxxxx的版本(指定回退版本号) : git rest --hard xxxxxxx

在这里插入图片描述在这里插入图片描述

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^ ,上上一个版本就是HEAD^ ^ ,当然往上100个版本写100个^太麻烦,所以写成HEAD~100。

  • git reset 和 git reset --hard区别:
    git reset(git reset --soft)回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可。
    git reset --hard彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉
8、删除文件

使用命令git rm删除一个文件。

 git rm 文件名

删除之后,本地目录下已经删除的文件夹就不再存在了,为了能将版崩仓库的相应文件也删除掉,我们要把这次操作提交到上去。

git commit -m "rm file1"

如果git rm 误删了,版本库里还有文件,可以很轻松地把误删的文件恢复到最新版本:

git checkout -- file1

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

注意:如果一个文件已经提交到版本库,那么永远不用担心误删,但是只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值