git学习笔记(二)

来源:互联网 发布:外国人学中文的软件 编辑:程序博客网 时间:2024/06/07 11:33

本篇为git学习笔记的第二篇文章。

一、工作区与暂存区

在Git中暂存区(stage或者index)是重要的概念之一。我们工作的目录称为工作区,还有一个.git隐藏目录称为版本库,里面包含暂存区和各个分支。其中存在一个指向当前分支的指针HEAD。

关系如图所示:
这里写图片描述

如上图所示,当我们使用git add命令时,我们就将工作区的变动添加到暂存区,当使用git commit命令时就将暂存区的变动提交到了当前分支。

了解工作区、暂存区概念便于我们理解许多git命令,下面就学习一些与工作区和暂存区有关的命令。

二、与工作区和暂存区相关的命令

  • git diff 比较文件差异
$ git diff                 #比较工作区和暂存区差异$ git diff HEAD            #比较HEAD和工作区差异$ git diff --cached        #比较暂存区和HEAD差异

验证:新建一个文件diffTest.txt,在文件中写入一个单词one,然后执行git add,接着执行git commit提交到版本库。
然后再在文件第二行写入单词two,保存。执行命令git diff
这里写图片描述

git提示文件发生变化,多了一行two。这时执行命令git add,将变动后的文件添加到暂存区。再次执行git diff

这里写图片描述

发现git没有提示任何内容,这是因为git diff比较的是工作区和暂存的文件。我们已经将变动后的文件添加到了暂存区,这时工作区和暂存区的文件是一致的。

执行命令git diff –cached对比暂存区和HEAD中文件差异,结果如下:

这里写图片描述

接着我们在文件第三行写入单词three。执行命令git diff HEAD,结果如下:

这里写图片描述

git提示有两行存在差异,这也证明了git diff HEAD对比的是工作区和HEAD中文件差异。


  • 撤销文件修改
$ git checkout -- filename  #暂存区覆盖工作区$ git reset HEAD            #HEAD覆盖暂存区$ git checkout HEAD         #HEAD同时覆盖工作区和暂存区

接着刚刚的操作。此时diffTest.txt文件在工作区、暂存区和HEAD中都是不同的,分别为one two threeone twoone

使用命令git checkout – filename用暂存区文件覆盖工作区文件,并查看文件内容,结果如下:

这里写图片描述

可以看到工作区中文件内容已经变成了one two,文件内容被暂存区覆盖。

接着执行命令git reset HEAD,用HEAD文件覆盖暂存区文件,并查看暂存区和HEAD文件差异,结果如下:

这里写图片描述
可以看暂存区中文件内容被覆盖为one

最后我们执行git checkout HEAD,用HEAD中文件同时覆盖工作区和暂存区,结果如下:

这里写图片描述

可以看到这时,工作区、暂存区和HEAD中文件内容保持一致。


  • git rm删除文件
$ git rm filename           #同时删除工作区和暂存区文件$ git rm --cached           #只删除暂存区文件$ rm                        #只删除工作区文件

验证:
新增文件rmTest.txt,并通过git status查看工作区状态,如下如所示:

这里写图片描述

可以看到rmTest.txt 为untracked新增文件状态,执行git addrmTest.txt添加到暂存区,再次通过git status查看状态,接着执行git rm –cached,最后再次执行git status查看状态,发现rmTest.txt又恢复到untracked新增文件状态,说明git rm –cached将暂存区中文件删除了。

这里写图片描述

原创粉丝点击