时光机穿梭

我们修改了readme的内容,是可以用git status来查看仓库当前的状态的

当然我们还可以查看具体修改了哪些内容:git diff

在改了之后继续重复上面的操作,就可以把改过的内容重新提交上去了

版本回退

我们再修改一下:append GPL

现在我们有三个版本:1.wrote a readme file 2. add distributed 3. append GPL

当然我们在实际工作中脑子里不可能记住所有的改动,不然我们要版本控制系统干什么。

所以我们用git log来查看我们的历史记录,如果觉得眼花缭乱,那么我们可以加上--pretty=oneline的参数

首先我们要知道用HEAD来表示当前的版本,上一个版本就是HEAD^ ,再上一个版本就是HEAD^^,那么我们现在就用git reset来回退到上一个版本:git reset --hard HEAD^这里的HEAD也可以用版本号来替代。

在穿梭前可以用git log来查看提交历史,以便确认要回退到哪个版本。

可以用git reflog来查看命令历史

工作区和暂存区

工作区:我们在电脑中能看到的目录

版本库:repository,处于工作区的隐藏目录.git中。里面存放了很多东西,其中最重要的就是stage暂存区。还有git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

根据前面的内容中把文件添加进GIT版本库中的两个操作:
第一步add其实是把文件修改添加到暂存区;
第二步commit实际上就是把暂存区的所有内容提交到当前分支。
我们就可以理解成,需要提交的文件修改统统放到暂存区,然后一次性提交暂存区的所有修改。

管理修改

现在,假设已经完全掌握了暂存区的概念,下面我们要讨论的就是为什么Git比其他版本控制系统设计的游戏,因为Git跟踪的兵管理的是修改,而不是文件。

利用例子来解决这个问题。

首先我们先修改一遍readme.txt,然后在git bush中把这个版ADD了,在commit之前再修改一次readme.txt,这个时候再commit,结束之后输入git status会发现我们的第二次修改并没有被提交。

我们第一次的操作:第一次修改 ---> add -----> 第二次修改 ------> commit

我们前面说了,git管理的是修改,所以我们在使用了add命令之后这个修改被放到了暂存区(index)准备提交,但是在工作区的第二次修改并没有被放入了暂存区,所以在我们commit的时候只负责把暂存区的修改提交了。我们可以利用git diff HEAD -- readme.txt来查看工作区和版本库里面最新版本的区别。

那我们该怎么提交第二次修改呢?我们可以继续git add git commit,当然也可以凑到一起

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

撤销修改

当我们需要撤销工作区的文件的时候,我们可以用git checkout -- file来丢弃工作区的修改。

但是这里有两种情况:

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

一种是readme.txt已经被添加到暂存区了,但是我们又做了修改,现在,撤销修改之后就回到了添加到暂存区的状态

所以,可以总结说这个就是让文件回到最近一次git commit或者git add的状态。

在另一种情况下:我们已经add到暂存区了,但是还没有commit,我们就可以用git reset HEAD <file>来把暂存区的修改来撤销掉。(unstage)

如果把它从暂存区提交到了版本库,可以利用版本回退。

删除文件