git | 工作区、暂存区、版本库之间的关系

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
git工作区、暂存区、版本库之间的关系

区分三者关系

在初始化git版本库之后会生成一个隐藏的目录 .git ,可以将该目录理解为git的版本库 repository,而我们自己建立的项目文件夹即工作区 working directory ,在.git 文件夹里面还有很多文件,其中有一个index 文件 就是暂存区也可以叫做 stage ,git还为我们自动生成了一个分支master(本地仓库的master分支,跟远程github上的master不是一个)以及指向该分支的指针head ,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从图中可以看出来respository包括分支master和stage, working diretory 可以理解为我们打开开发环境如eclipse/idea,里面的内容即工作区的内容,在工作区里面有的代码以及配置文件等我们需要提交到版本库里面,最终是到了分支master上面,暂存区只是一个临时保存变动文件的地方

实例讲解

平时我们使用的命令git add file1 是把文件从工作区提交到暂存区,git commit -m “prompty” file1 是把文件从暂存区提交到了分支master下面,这里因为只有一个分支master,就提交到master上了,下面让我们再来结合具体例子来说明一下。

   我们修改一下tgb.txt文件增加一行 "l love you" ,并新建一个文件 test1.txt,现在还没有执行git add命令,这种修改都还停留在工作区内,用git status查看状态,如图

在这里插入图片描述
解释:
changes not staged for commit:表示工作区相比暂存区已经更改的文件(前提是文件是被跟踪管理的)
Untracked files:表示没有被跟踪管理的文件。

上图表明修改并没有在暂存区里面,当我们执行git add test1.txt ,git add tgb.txt后,再来看一下状态
在这里插入图片描述
解释:
Changes to be committed:表示已经被提交到暂存区的文件。

这两个文件被添加到了暂存区,但是还没有提交,当执行git commit -m “tijiao” 后文件即从暂存区到了master分支上面,如图将看不到暂存区里面有什么内容。
在这里插入图片描述
Git管理的是添加到暂存区里面的修改,包括增删改等等都算是可以跟踪的文件变动,也可以说git只管理我们变动的部分变动的我们才往暂存区提交,这也是git比其他版本系统设计优秀的一点。

通过git diff 命令进一步理解三个分区的关系

  git diff 比较的是工作区和暂存区的差别
  git diff --cached 比较的是暂存区和版本库的差别
  git diff HEAD 可以查看工作区和版本库的差别

通过一个添加文件既可以明显看出他们之间区别,不过这里有一个前提是已经提交到暂存区的文件修改的时候才可以看出明显区别,这也是以为啥git只能跟着提交到暂存区的文件,如果只是在工作区新建一个文件,那么输入这三个命令都没有结果为空白。

我们继续修改tgb.txt,在文件末尾添加 we are good boy.

  分别输入三个命令,效果为:.

在这里插入图片描述
从图中可以看出,工作区与暂存区、工作区与版本库都有变化,而版本库与暂存区并没有变化。进一步执行git add tgb.txt
在这里插入图片描述
执行git add tgb.txt之后发现git diff没有输出内容,表明工作区与暂存区已经同步,暂存区与版本库、版本库与工作区没有同步。最后一步执行git commit
在这里插入图片描述
当执行完git commit后,三个命令都没有输出结果,表明我们修改的文件已经被同步的版本库,已经被版本库管理起来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值