Git学习笔记(二)

上次已经学会了如何对本地仓库下的文件进行版本保存,并且查找与上次版本不同等功能,今天,我们来学习,版本回退:
1.版本回退
首先,我们对所需要操作的文件,提交到版本库,给出一个说明。
如:

$ git commit -m "add1 distributed"

接下来,我们对这个文件进行修改,与前一次的内容不同即可,
然后我们提交到版本库,如:

$ git commit -m "append"

我们对一个文件进行了一次修改,接下来我们就要考虑如何回退版本,从当前回到第一次时的状态。
我们首先:

$ git log

这个意思就是显示我们的提交日志,显示我们每一次提交的情况。如果感觉得到的会眼花缭乱,我们也可以采用

$ git log --pretty=oneline

我感觉这种方式出来的看起来更加方便。
得到的像下面这样的:

bfd68a9f0857a7becef40e1537ddf76fc0f17e25 add1 di                                                                    stributed

bfd68a9f0857a7becef40e1537ddf76fc0f17e25是版本号,add1 distributed就是我们提交时自己所加在后面的东西。
接下来我们步入正规,进行版本回退,比如我们现在要回退到上一版本,那么输入:

$ git reset --hard HEAD^                                                                  

这就是回退到上一版本。
当然,如果你想要回退到任何一个版本其实都是可以做到的。
例如:

$ git reset --hard 3628164

后面的3628164就是你所要回退到的版本所对应的commit id号。
当然,在这里提一条指令:

$ git cat 

这条指令可以查看文件中的内容。
另外,如果发生意外情况,你找不到你最新版本的版本号,其实也有一个方法,Git提供了一个命令:

$ git reflog

在这里面,你就又可以看到版本号了。

2.暂存区
暂存区的理解:
关于Git的暂存区,我认为是很厉害的一个设计,当然,这里理解起来也有些难,在你的本地仓库目录下,有一个.git目录,其中的index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的 内容并不存储其中,而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。

Git学习笔记(二)_第1张图片
图中左侧为工作区,右侧为版本库。在版本库中标记为index的区域为暂存区,标记为master的是master分支所代表的目录树。
图中可以看出, 此时HEAD实际是指向master分支的一个“游标”,所以图示的命令中出现HEAD的地方可以用master来替换。
途中的objects标识的区域为git的对象库,世纪位于 .git/objects目录下。
当对工作区修改(或新增)的文件执行git add命令时,暂存区的目录树会被更新,同时工作区修改(或新增)的文件内容会被写入到对象库中的一个新的对象中,而该对象的id被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树会写到版本库(对象库)中,master分支会做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树。
当执行git reset HEAD命令时,暂存区的目录树会被重写,会被master分支指向的目录树所替换,但是工作区不受影响。
当执行git rm –cached 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行git checkout .或git checkout – 命令是,会用暂存区全部的文件或指定的文件替换工作区的文件。这个操作很危险,会清楚工作区中未添加到暂存区的改动。
当执行git checkout HEAD .或git checkout HEAD 命令时,会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是极度危险的。因为不但会清楚工作区中未提交的改动,也会清楚暂存区中未提交的改动。
刚接触Git,相信缺陷很多,请大家指教。

你可能感兴趣的:(git)