版本控制系统Git 入门(三)
上一篇版本控制系统Git 入门(二)
HEAD的概念
HEAD是指向当前分支上的最新版本的指针,指向关系,它指向了当前分支的当前版本。在上一篇版本控制系统Git 入门(二)中提到一个查看工作区和最新提交(最新版本或者叫当前版本)的区别命令git diff HEAD
,再次复习下继续上一篇的操作查看工作区和当前版本的区别。
解析:没有任何提示,即没有区别。
版本回退git reset
版本回退是一个很有用的功能,第一是可以查看前个版本做了什么或者任何一个你想回退的版本做了什么,第二是当前你版本你觉得有问题那么回退到前个版本重新做修改。
首先用git log --pretty=oneline
查看版本信息
解析:
由上图可以看到2cecc9e版本,fdb6a版本和a16ff9版本,版本是由最近往后排序的,每个版本的版本信息也能看到,这也是之前为什么说再添加版本到分支时尽量的详细说明当前版本的信息。
然后使用命令git reset --hard HEAD^
回溯到上一个版本,还记得HEAD是什么意思吗?加上^是当前版本的上一个版本,如果是上上那么命令则是git reset --hard HEAD^^
,当然如果是上几十个需要写几十个^这样不是很麻烦,可以写git reset --hard HEAD~50
表示回溯到上50个版本。先回溯到上个版本吧。
解析:
提示已经说明HEAD这个指针已经指向了fdb6ad5这个版本了也就是已经回到了版本号为fdb6ad5。
回到了过去,还是可以回到将来的,使用命令git reset --hard 版本号哈希值(前面几位)
就可以回到你想要的版本。现在我们还是回到之前的版本吧。
解析:
ok,根据提示我们回来了。因为现在你可以随时去到随便的版本,只有你知道版本号。可是如果不知道呢?
记录你每一次的命令git reflog
解析:
这个命令可以清楚的知道当前版本,你是做了哪些命令的,也可以通过这个命令知道版本号,可以回溯到你想要的版本号。
撤销修改,回到最近一次的git commit或者git add的状态git checkout -- file
有个场景是这样的,你刚刚提交了版本,然后继续修改改完之后,这时候发现我去这个提交到分支被发现了估计要扣奖金怎么办,这时候你可以撤销这个修改千万不要提交到版本库。
命令git checkout -- git.txt
意思就是,把git.txt文件在工作区的修改全部撤销,这里有两种情况:
- git.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
- git.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。