基本概念
1.工作区域
总览
总览
- 工作区:就是你要进行版本控制的目录
- 暂存区:临时存储
- 本地库:历史版本
详解暂存区
介绍
暂存区,顾名思义是用于暂存文件的,即临时存储,在Git中也被称为索引。Git和其他版本控制系统(如SVN)的一个不同之处就是,Git有暂存区的概念,暂存区是Git的核心功能之一
为什么需要
Git可以记录每个文件的所有版本,随着开发的持续推进,同一个文件会产生非常多不同的版本,这些版本就代表了该文件的某一个指定状态。一个文件会变更很多内容(新增、删除、修改等)。那么,到底变更多少内容才会生成一次版本信息呢?
另外,有时候一个版本中记录了多个文件的变更,我们需要将这些文件的多个变更记录到同一个版本中,以便于以后回退到这个版本时,所有文件中的内容都能回退到这个版本的状态
案例
我们可以使用add命令将需要生成版本的文件添加到暂存区中,暂存区中记录该文件的当前状态。另外,暂存区也可以存储多个文件。使用commit命令将当前暂存区的所有内容生成一次版本快照
一个版本记录多次内容变更的示意图如下图所示:
注意:在上图中,①和②也可以在工作空间先完成两步操作,然后使用add命令将两步操作都添加到暂存区
一个版本记录多个文件的示意图如下图所示:
2.文件状态
介绍
对Git的工作空间进行不同操作会将其处于不同的状态,通过一些状态信息我们可以很好地判断Git进行了什么操作以及接下来应该进行什么操作
总览
nothing to commit(无需采取任何行动)
nothing to commit表示当前工作空间没有还未提交的操作,属于一个干净的工作空间(工作空间的所有文件均已提交)
# 初始化仓库
git init
# 查看当前工作空间的状态
git status
Untracked files(未跟踪的文件)
Untracked files表示当前工作空间有文件处于从未被追踪过的状态,需要使用add命令添加(工作空间中含有没有执行add的文件)
# 创建一个新文件
echo "111" >>> aaa.txt
# 查看当前工作空间状态
git status
Changes to be committed(需要提交的更改)
Changes to be committed表示更改的操作已经被追踪到了,但操作还未被提交(修改的文件执行了add操作,但是还未提交)
# 将当前目录所有文件和文件夹添加到暂存区
git add .
# 查看当前工作空间状态
git status
当文件被提交后,工作空间重新回到nothing to commit状态,命令如下:
# 提交
git commit -m "第一次提交" ./
# 查看当前工作空间状态
git status
Changes not staged for commit(未提交的更改)
Changes not staged for commit表示当前工作目录中有文件被修改了,但是这个修改操作还未被Git追踪到。因此,我们需要使用add命令来追踪(已经执行过add的文件被修改了但还未执行add操作)
Changes not staged for commit与Untracked files不同的是:前者代表文件之前已经被Git追踪过,只是本次的操作还没有被Git追踪,可以使用commit直接提交;后者则代表文件从来没有被Git追踪,必须先使用add来追踪
再次修改工作空间的文件,命令如下:
# 编辑文件
ehco "222" >>> aaa.txt
# 查看当前工作空间状态
git status
当执行add命令后,工作空间再次回到Changes to be committed状态,表示文件已经被追踪(添加到暂存区),但是还未提交。命令如下:
# 添加到暂存区
git add ./
# 查看当前工作空间状态
git status
当修改被提交后,工作空间再次回到nothing to commit状态,表示当前工作空间所有的操作均已提交。示例代码如下:
# 提价
git commit -m "222" ./
# 查看当前工作空间状态
git status