Git的三个工作区和文件的三种状态

简介: 本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 我们在使用Git的时候一般有3个工作区的概念:Git 仓库、工作目录以及暂存区域。

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

我们在使用Git的时候一般有3个工作区的概念:Git 仓库、工作目录以及暂存区域。其中工作目录比较好理解,就是我们开发时修改文件的那些目录,Git 仓库就是我们项目目录下面的 .git目录中的内容,而暂存区域是保存已经被Git标记过,将要提交保存到Git数据库中的文件的地方

文件从我们创建到编辑完提交Git帮我们记录,一共要经历3种状态:已修改(modified)、 已暂存(staged)已提交(committed)

  • 刚刚开始时编辑文件,这个时候文件是处于 已修改(modified) 状态,文件是在工作目录
  • 修改完文件,我们执行git add,这个时候文件就变为 已暂存(staged)状态,文件信息进入暂存区域,内容被保存到Git数据库中
  • 然后我们执行git commit,文件就变为已提交(committed)状态,创建了一个提交记录保存到了Git 仓库

具体过程可以参见下图

image_20190628163533757

暂存区域

暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。对应于 index文件 中的内容。
这里需要特别注意暂存区里保存的内容,我们可以通过 git ls-files --stage 命令来查看下里面的内容

git ls-files --stage
//输出
100644 9daeafb9864cf43055ae93beb0afd6c7d144bfa4 0    text.txt
100644 83baae61804e65cc73a7201a7252750c76066a30 0    bak/test.txt

可以看到,暂存区里记录了文件的内容所对应的数据对象,以及文件的路径(文件名和文件所在目录)。实际上,暂存区保存的是一系列指向文件的索引,真正的文件内容都在 .git/objects 目录下,也就是Git数据库中。

考虑2种情况:

情况一:如果此时,我们修改 text.txt 文件,然后重新 add 进暂存区,那暂存区会怎么变化?

实际上,暂存区还是只有2条索引,只不过指向 text.txt 文件的索引变成了新的(这个时候 .git/objects 目录下会多出一条记录,记录text.txt 文件的新版本)

情况二:如果此时,我们删除一条记录,比如text.txt 文件的索引记录,会有什么影响?

首先 .git/objects 目录下对应的那条数据并不会被删除,这也就是开头说的 你执行的 Git 操作,几乎只往 Git 数据库中增加数据 ,不会删除数据。

暂存区text.txt 文件的索引会被删除,text.txt 文件就会重新变为待 add 状态,此时如果我们执行 commit 操作,提交的内容将不会包含text.txt 文件


欢迎关注我的微信公众号,和我一起每天进步一点点!
AntDream

目录
相关文章
|
2月前
|
存储 前端开发 开发工具
Git Hooks实战:提交前检查修改文件中是否包含调试代码
Git Hooks实战:提交前检查修改文件中是否包含调试代码
48 0
|
3月前
|
存储 开发工具 git
Pycharm git-创建本地仓库\创建分支\合并分支\回溯版本\加入git后文件颜色代表的含义
Pycharm git-创建本地仓库\创建分支\合并分支\回溯版本\加入git后文件颜色代表的含义
68 0
|
2月前
|
存储 开发工具 git
Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助
如果你忘记了命令或命令的选项,你可以使用 Git 帮助。 在命令行中,有几种不同的使用帮助命令的方式: git command -help - 查看特定命令的所有可用选项 git help --all - 查看所有可能的命令 让我们看看不同的命令。
213 3
|
2月前
|
Shell 开发工具 git
查看 Git 中某个文件的提交历史记录(log)
要查看 Git 中某个文件的提交历史记录(log),你可以使用 `git log` 命令并指定文件名作为参数。以下是一些常用的方法来查看某个文件的 Git log: 1. **查看文件的完整提交历史**: ```bash git log -- <filename> ``` 这里的 `--` 是可选的,用于分隔命令行选项和文件名。 2. **查看文件的简要提交历史**: ```bash git log --oneline -- <filename> ``` --oneline` 选项会以一行显示每个提交,使输出更简洁。 3. **查看文件的提交历史并显示每次提交的差异**: ```
|
3月前
|
SQL 开发工具 git
git 修改文件后revert
如果你想撤销对一个文件的修改,可以使用`git checkout`命令。 假设你想撤销名为`file.txt`的文件的修改,你可以执行以下命令: ``` git checkout -- file.txt ``` 这将把`file.txt`文件恢复到最后一次提交的状态。如果你想撤销所有修改,可以使用`git checkout -- .`命令。 如果你已经提交了修改,并且想要撤销提交,可以使用`git revert`命令。这将创建一个新的提交,撤销之前的提交。假设你想撤销最后一次提交,可以执行以下命令: ```sql git revert HEAD ``` 这将创建一个新的提交,撤销最
|
3月前
|
存储 网络安全 数据处理
git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理
git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理
|
3月前
|
开发工具 git
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(二)
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(二)
|
3月前
|
算法 安全 Linux
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(一)
GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件(一)
|
3月前
|
开发工具 git
【git】git 查看 modified 状态文件与上个版本的改动
【git】git 查看 modified 状态文件与上个版本的改动
35 0