• 技术文章 >开发工具 >git

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

    青灯夜游青灯夜游2021-12-29 17:29:08原创2118

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

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

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

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

    在这里插入图片描述
    需要注意的是.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 查看工作区与本地仓库之间的差异

    一些命令对应的操作如下:
    在这里插入图片描述

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

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

    (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

    在这里插入图片描述
    可以看到,修改已经提交到了暂存区:Changes to be committed:

    提交之后,用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中暂存区和本地库的区别是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:git 暂存区 本地仓库
    上一篇:git中分支是什么意思 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • git属于什么版本的控制系统• go语言项目是怎么配置Gitlab CI的• 如何解决linux git中文乱码问题• 悄悄分享怎么加速访问Github!(推荐)• 用这个技巧,git clone就能提速几十倍!• 一文快速教你用VuePress + Github Pages搭建一个博客(实战)
    1/1

    PHP中文网