git中暂存区和本地库的区别是什么
时间:2021-12-29 17:29
git中暂存区和本地库的区别:暂存区又称索引区,是工作区与本地仓库之间的一个过渡区域,它记录了工作区的代码状态(有无改动,或者做了哪些改动);而本地仓库则记录了本地代码的状态。 本教程操作环境:Windows7系统、Git2.30.0版、Dell G3电脑。 1、git仓库相关概念的理解 要想深入理解git命令,必须理解git仓库相关的几个概念。先看一下一份本地代码目录D:\gittest目录下: 工作区(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 查看工作区与本地仓库之间的差异 一些命令对应的操作如下: 下面以一个具体的例子来说明本地文件修改会导致相关区域的变化 修改之前,工作区、暂存区与本地仓库之间状态是一致的 (1)本地修改文件file1.txt 里面增加一行add this line git status 查看文件在工作区、暂存区、本地仓库仓库之间的变化 上图中可以看到,Changes not staged for commit:,说明文件在工作区已经发生了变化,但是修改还未提交到暂存区 git diff 查看工作区与暂存区的变化 从图中可以看出,工作区与暂存区之间发生了变化,这是由于本地文件修改了,并且还未将修改提交到暂存区 git diff HEAD 查看工作区与本地仓库之间的状态 从上图可以看出,工作区与本地仓库之间也出现了差异。很简单,此时本地仓库与暂存区的状态是一致的 git diff --cached 查看暂存区与本地仓库,会发现它们之间缺失没有差异 (2)将本地修改提交到暂存区 git add . 将本地的修改提交的暂存区 git status 提交之后,用git diff 查看,会发现工作区与暂存区已经没有了差异。 但是暂存区与工作区有了差异。 git diff --cached 同样,用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 diff、git diff --cached 、git diff HEAD 会发现提示没有差异。因为工作区的修改已经提交到本地仓库,此时工作区、暂存区、本地仓库的状态是一致的。 逆操作 git add – git checkout 将工作区文件退回到暂存区状态,将工作区文件替换为暂存区文件。 比如工作区修改了文件file1.txt,此时还未提交到暂存区。如果想放弃修改,就可以用 git checkout file1.txt将文件退回到暂存区状态(放弃修改) git commit – git reset HEAD 拉取最近一次提交到本地仓库的文件到暂存区,不影响工作区。 总结: 如果我们想放弃本地文件(工作区)的某一次修改: 推荐学习:《Git教程》 以上就是git中暂存区和本地库的区别是什么的详细内容,更多请关注gxlsystem.com其它相关文章!
需要注意的是.git是隐藏目录,需要显示隐藏文件才能看到。
可以看到,修改已经提交到了暂存区:Changes to be committed: