站长资讯网
最全最丰富的资讯网站

git中暂存区和本地库的区别是什么

git中暂存区和本地库的区别:暂存区又称索引区,是工作区与本地仓库之间的一个过渡区域,它记录了工作区的代码状态(有无改动,或者做了哪些改动);而本地仓库则记录了本地代码的状态。

git中暂存区和本地库的区别是什么

本教程操作环境:Windows7系统、Git2.30.0版、Dell G3电脑。

1、git仓库相关概念的理解

要想深入理解git命令,必须理解git仓库相关的几个概念。先看一下一份本地代码目录D:gittest目录下:

git中暂存区和本地库的区别是什么
需要注意的是.git是隐藏目录,需要显示隐藏文件才能看到。

工作区(working directory):简单来说保存在本地的文件或目录都属于工作区,平常修改代码都是在工作区进行的。一般本地的文件,除了隐藏的.git目录,其它都属于工作区。上图中看到的mydir、file1.txt、file2.txt都是属于工作区。

暂存区(Stage):又称索引区(index),顾名思义,它是工作区与本地仓库之间的一个过渡,它记录了工作区的代码状态(有无改动,或者作了哪些改动)。位于.git目录中。

本地仓库(repository):记录了本地代码的状态,位于.git目录中。

关于状态的理解:

想一下,我们平时在修改一份重要的文件时,肯定要先做一份备份,目的是防止修改出错,最终还能恢复。假如这份文件本身很大,如果如果备份就会占用额外较多的空间,这样就显得不太划算。还有另外一种方式,就是记录文件的修改状态,而不是对文件本身进行备份。文件状态类似如下描述:

文件第一行:将xxx换成了****

文件第三行和第四行之间,增加了一行,内容是……

说白了文件状态就是文件的修改记录,根据修改记录我们就可以知道我们对文件作了哪些修改,根据修改记录也可以恢复到文件修改之前的状态。

2、git命令讲解

几个与查看状态相关的命令:

git status 查看文件在工作区、暂存区、本地仓库之间的变化

git diff 查看工作区与暂存区的差异

git diff –cached 查看暂存区与本地仓库的区别

git diff HEAD 查看工作区与本地仓库之间的差异

一些命令对应的操作如下:
git中暂存区和本地库的区别是什么

下面以一个具体的例子来说明本地文件修改会导致相关区域的变化

修改之前,工作区、暂存区与本地仓库之间状态是一致的

(1)本地修改文件file1.txt 里面增加一行add this line

git status 查看文件在工作区、暂存区、本地仓库仓库之间的变化

git中暂存区和本地库的区别是什么

上图中可以看到,Changes not staged for commit:,说明文件在工作区已经发生了变化,但是修改还未提交到暂存区

git diff 查看工作区与暂存区的变化

git中暂存区和本地库的区别是什么

从图中可以看出,工作区与暂存区之间发生了变化,这是由于本地文件修改了,并且还未将修改提交到暂存区

git diff HEAD 查看工作区与本地仓库之间的状态

git中暂存区和本地库的区别是什么

从上图可以看出,工作区与本地仓库之间也出现了差异。很简单,此时本地仓库与暂存区的状态是一致的

git diff –cached 查看暂存区与本地仓库,会发现它们之间缺失没有差异

(2)将本地修改提交到暂存区

git add . 将本地的修改提交的暂存区

git status

git中暂存区和本地库的区别是什么
可以看到,修改已经提交到了暂存区:Changes to be committed:

提交之后,用git diff 查看,会发现工作区与暂存区已经没有了差异。

但是暂存区与工作区有了差异。

git diff –cached

git中暂存区和本地库的区别是什么

同样,用git diff HEAD会发现工作区与本地仓库还是有差异

(3)将修改提交到本地仓库

git commit -m “add a line in file1.txt” 将修改从暂存区提交到本地仓库

git status查看,提示Your branch is ahead of ‘origin/master’ by 1 commit.表明工作区的修改已经提交的本地仓库,但是还没有推送到远程分支。

git中暂存区和本地库的区别是什么

git diff、git diff –cached 、git diff HEAD 会发现提示没有差异。因为工作区的修改已经提交到本地仓库,此时工作区、暂存区、本地仓库的状态是一致的。

逆操作

git add – git checkout 将工作区文件退回到暂存区状态,将工作区文件替换为暂存区文件。

比如工作区修改了文件file1.txt,此时还未提交到暂存区。如果想放弃修改,就可以用

git checkout file1.txt将文件退回到暂存区状态(放弃修改)

git commit – git reset HEAD 拉取最近一次提交到本地仓库的文件到暂存区,不影响工作区。

总结:

如果我们想放弃本地文件(工作区)的某一次修改:

  • 如果修改还未提交到暂存区,就可以使用git checkcout恢复
  • 如果修改已经提交到暂存区,还没提交到本地仓库,就先使用git reset HEAD 将暂存区状态恢复,然后使用git checkout 恢复工作区

推荐学习:《Git教程》

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号