git暂存区与本地仓库的区别(手把手教你学习git命令)

使用git一年多了,每次提交代码都是那么几个固定步骤,确认对git命令深入的理解,导致每次出现异常情况都不知道怎么快速处理,这显然不是一个打工人该有的态度。于是借此机会重新学习了一下git。主要知识点如下:
(1)git工作目录、暂存区、本地仓库已远程仓库的区别与联系
(2)git常用命令讲解
(3)git命令执之后仓库的变化

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 checkcout恢复
  • 如果修改已经提交到暂存区,还没提交到本地仓库,就先使用git reset HEAD 将暂存区状态恢复,然后使用git checkout 恢复工作区

其它命令补充
git reset --hard HEAD^ (或git reset --hard HEAD~1)回退到上一次提交,工作区以及暂存区都会退到上次提交的状态(本地修改会被覆盖)
git reset --hard HEAD^^ 回退到上上次提交

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值