一、修改文件
1、现在我们在之前提交的readme.txt文件上,做一些修改。修改如下:
2、现在运行git status 命令看看结果:
$ git status
●git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
●git diff命令可以帮助我们查看具体修改了什么内容:
3、知道对readme.txt作了什么修改后,接下来再把它提交到仓库。和提交文件的步骤一样:
$ git add readme.txt
$ git commit -m "add line"
现在我们用git status 再来看一下仓库的当前状态:
●可以看到,Git告诉我们没有需要提交的东西,工作目录是干净 。
工作区与缓存区
工作区就是电脑里能看到的目录,工作区中有一个隐藏目录.git,这个不算工作区,而算Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
二、版本回退和恢复
我们修改完文件后,发现自己还是希望保存修改前的文件,这时候就需要用到版本回退了。
1、我们使用git log命令回顾一下对于readme.txt,我们做了什么修改
$ git log
●git log命令显示从最近到最远的提交日志。如上图,我们可以看到两次提交。如果嫌输出日志太多,还可以加上–pretty=oneline参数,如下:
$ git log --pretty=oneline
●前面的一大串字符串指的是commit id(版本号)。
2、使用git reset命令回退到上一个版本
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,如果回退的版本比较早,比如往上回退100个版本,可以写成HEAD~100。
使用git reset命令回退一个版本
$ git reset --hard HEAD^
上述命令让我们回退了一个版本,现在我们打卡readme.txt查看一下:
●可以看到,我们确实回退到了上一个版本。
版本回退到了上一个版本,这时,你又后悔了,你还是想要修改后的版本,这时候就要回复你回退之前的版本。
1、Git提供了一个命令git reflog用来记录你的每一次命令:
● 第二行显示add line的commit id是404c207
2、使用git reset命令恢复到某个版本
● 可以看到,我们又恢复到了版本回退前的版本。
三、撤销修改
Git会告诉你,git checkout – file可以丢弃工作区的修改:
$ git checkout -- readme.txt
命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
●一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
●一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
●总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。