工作区和暂存区

工作区:

就是你在电脑里能看到的目录,比如:webgit 文件夹 就是一个工作区

GIT 学习第二天 (二)

版本库:

工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

GIT 学习第二天 (二)

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

接下来,我们来验证下:

先回退版本到

GIT 学习第二天 (二)

然后查看一下文本内容

GIT 学习第二天 (二)

更改文本内容

GIT 学习第二天 (二)

git add  

git status

GIT 学习第二天 (二)

再修改文本内容

GIT 学习第二天 (二)

git commit 

GIT 学习第二天 (二)

再查看一次状态 git status

GIT 学习第二天 (二)

发现,第二次的修改并没有提交,

操作过程:

第一次修改 -> git add -> 第二次修改 -> git commit

Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别:

GIT 学习第二天 (二)

——————————————————————————————————

撤销修改:

修改文本内容为:

GIT 学习第二天 (二)

此时,我们还没有添加到暂存区,忽然发现,这样提交上去,boss可能会开除你。。。

用 git  status 查看一下状态。

GIT 学习第二天 (二)

git 告诉我们,可以添加到暂存区,或者也可以从工作区撤销

git checkout -- readme.txt

GIT 学习第二天 (二)

再通过 cat 命令查看一下内容是否更改了

GIT 学习第二天 (二)

果然,git 帮我们删掉了刚写的东西

 

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

如果,文件已经添加到暂存区,想撤销修改应该怎么做呢?

git add 

GIT 学习第二天 (二)

git status

GIT 学习第二天 (二)

现在,文件已经添加到暂存区

如何撤销修改呢?

git reset HEAD file

GIT 学习第二天 (二)

 

git status

GIT 学习第二天 (二)

此时,文件又撤销到工作区了

git checkout -- readme.txt

GIT 学习第二天 (二)

此时,就撤销到工作区没有修改时的内容,

那,如果,不仅添加到暂存区,还提交到了master 分支应该怎么办呢?

我们可以通过版本号,回退到上一个版本。

当然,如果,提交到了远程仓库,那就真的无能为力了。。。

相关文章: