git暂存区

来源:互联网 发布:sql去掉重复的数据 编辑:程序博客网 时间:2024/05/15 00:37

1、查看提交日志
这里写图片描述
简洁输出日志:
这里写图片描述
2、更改we.txt文件,增加一行:
这里写图片描述
在工作区中,文件变成:
这里写图片描述
3、可以查看修改后的文件 we.txt 与 中间状态的文件(不是版本库中的文件)的比较:
这里写图片描述
比较结果中:三个减号(—)开始的行标识的是 原始文件
三个加号(+++)标识的是 目标文件
以加号(+)开始的行只出现在 目标文件中;
以减号(-)开始的行只出现在 原始文件中;
以空格开始的行是都出现在原始文件和目标文件中;
使用前后两个@作为差异定位,其中 -1 表示原始文件中的第一行。
+1,2 表示从 目标文件的第一行开始的 共 2行。

4、需要将修改后的文件添加到”提交任务”中,然后才能提交:
这里写图片描述
5、在没有commit入库之前,再次修改文件,并查看状态:
这里写图片描述
6、精简的状态输出:
这里写图片描述
上图中,位于第一列的绿色字母M的含义:版本库中的文件与处于中间状态(提交暂存区stage)中的文件 相比有改动。
位于第二列的红色字母M的含义:工作区当前的文件与处于中间状态(提交暂存区stage)中的文件 相比有改动。

7、通过git diff的不同参数查看文件的差异
7.1不带任何参数,显示工作区 与 中间状态(提交暂存区stage)的比较差异:
这里写图片描述
7.2使用HEAD参数,查看 工作区 和 当前工作分支(HEAD)的差异:
这里写图片描述
7.3通过–cached或–staged参数,显示提交暂存区stage和版本库之间的差异:
这里写图片描述
8、将暂存区stage提交到版本库:
这里写图片描述
9、第二个修改还未add到暂存区,暂时不会提交:
这里写图片描述

理解暂存区

在隐藏的 .git目录下有一个index文件,它用于跟踪工作区文件的时间戳、长度信息。依此判断工作区的文件是否修改。如果工作区的时间戳改变了,说明文件的内容可能改变了,需要打开文件,读取文件内容,与更改前的原始文件相比较,判断文件内容是否被更改。

index文件是一个包含文件索引的目录树,像是一个虚拟的工作区,记录了文件名和文件的状态信息。而文件的内容并没有存储在其中,而是保存在另一个object文件中。

这里写图片描述

在上图中:
1、左侧是工作区,右侧是版本库。在版本库中标记为index的区域为暂存区,标记为master的是master分支所代表的目录树,它位于对象库中。
2、图中HEAD实际指向master分支的一个游标,它指向对象库中的某个对象。
3、objects标识为对象库,位于objects目录下.
4、当对工作区中的修改文件执行git add操作时,暂存区的目录树将会被更新,同时,文件内容会被写入到对象库中的一个新对象中。而该对象的ID被记录在暂存区的文件索引中。
5、当执行git commit命令时,暂存区的目录树会写到对象库中,而master分支最新指向的目录树就是提交时原暂存区的目录树。(文件内容一直都在对象库中)
6、执行git reset HEAD 命令时,暂存区的目录树会被重写,会被master分支的目录树所替换。但是工作区不受影响。(暂存区 与 版本库相比较 ,文件内容会没有变化。但是如果工作区中的文件有修改,那工作区与暂存区相比较 会有区别),也就是:
这里写图片描述
7、当执行git rm –cached 《file》命令时,会直接从暂存区删除文件,连内容一起删除,暂存区与版本库比较时,会显示为null;而与工作区进行比较时,不会改变,没有差异;而工作区文件与版本库文件比较时,因为文件内容已经删除,版本库中对象库已经没有内容,也会显示为null。
这里写图片描述
8、执行git checkout . 或 git checkout – 《file》命令时,会用暂存区的全部文件 或 指定文件 替换工作区的文件 。这个操作 会清除工作区中 未添加到暂存区中的改动。
9、执行git checkout HEAD . 或 git checkout HEAD 《file》命令时,会用HEAD指向的master分支中的全部文件或指定文件 替换暂存区和工作区中的文件。这个操作会清除 暂存区和工作区中未提交的改动。

减少使用 git commit -a命令
git commit -a 命令可以对本地所有变更的文件执行提交操作,包括对本地修改的文件和删除的文件,但不包括未被版本库跟踪的文件(也就是没有git add的文件)。

保存当前工作进度 git stash
保存工作进度后,会发现工作区尚未提交(未git add)的改动、暂存区的改动 (未git commit)全都不见了:
这里写图片描述

0 0