git学习笔记--版本回退

铺垫:我已经成功给版本库里面添加并且上传了一个文件readme,txt

一.gitstatus

当我们成功的添加并且提交了一个readme.txt文件以后,我们对文件继续进行了修改。修改完成以后我们使用git status命令查看结果(git status可以让我们时刻掌握仓库当前的状态)

git学习笔记--版本回退

上面的显示告诉我们,readme.txt被修改了,但是还没有准备提交我刚才修改的文件。

虽然git status告诉了我们read.txt被修改了,但是我不知道具体修改了些什么内容,假如我第二次修改和第一次修改间隔比较较,我忘记了第二次修改和第一次有什么不同的话,我们可以使用git diff来查看具体修改了什么内容

git学习笔记--版本回退

可以看出来我们新添加了一行hello,windows这句话,+后面的表示我改动的东西。

当我知道前后两次做了什么修改是不是在添加到仓库就放心多了呢

下面我们来git add readme,txt然后在没有使用git commit 之前在使用git status看看发生什么变化了

git学习笔记--版本回退

可以看出它告诉我们,将要被提交的修改包括了readme,txt文件。这句话证明我们已经使用过git add将其提交了,下面我们使用git commit放心的提交,提交以后我们在次使用git status查看仓库当前的情况

git学习笔记--版本回退

Git 告诉我们已经没有需要提交的修改过的文件了,仓库里面的东西和文件是一致的,工作目录是干净的!

二.版本回退

假如我们不断的对文件进行修改,然后不断的提交到版本库当中,这个提交对于我们来说就是Commit,它好比一次快照,记录我们每次的修改状态,假如有一次我把文件改乱了,或者误删除了文件,我们就可以从最近的一个commit中恢复,而不是说没法办了。

铺垫:我继续修改,然后提交

首先我可以使用git log命令查看从最近到最远的提交日志

git学习笔记--版本回退

我们从上图可以看到最近的一次提交hello,linux(这个就是我们commit -m后面的提示语),上一次的是hello,windows,最早的一次是first readme.txt

如果嫌上面这个图输出信息太杂乱,我们就使用git log --pretty=online命令,就会看到简介版的

git学习笔记--版本回退

现在假如我第三个修改 的版本有问题,我想回退到第三个版本修改之前的那个版本该怎么办呢?

对于这个回退的问题,首先Git一定知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新提交的,如上图的HEAD。

所以在这里HEAD表示当前最新的版本,则HEAD^就表示上一个版本,HEAD^^表示上上一个版本,当然有很多版本的话不用一直加^,我们使用HEAD~100表示往上100个版本。知道这个原理以后我们就可以回退到上一个版本了

我们使用git reset命令就可以回退到上一个版本

git学习笔记--版本回退

这个时候就回退到上一个版本了,整个仓库都回到上一个版本了,包括文件内容

git学习笔记--版本回退

现在我们退回去成功了,如何在返回去呢?只要我们知道版本号就可以指定回到回退之前的版本

命令:git  reset --hard  b6bb3f

git学习笔记--版本回退

这不又回去了。

原理其实很简单:因为Git内部有个HEAD指针,指向当前的版本,当前回退或者前进的时候,Git仅仅是把HEAD的指向改动了一下而已,顺便把工作区的文件也更新了。所以让HEAD指向哪个版本号,当前就是哪个版本。如下图

git学习笔记--版本回退


使用git reflog可以查看你每次commit的命令

git学习笔记--版本回退

这样不就可以来回穿梭切换了嘛!


总结这篇用到的命令有:1.git status 2. git log 3.git reset --hard HEAD^/HEAD+版本号4.git reflog 5.git log --pretty=oneline

注意Git追踪的是修改,当你第一次修改以后git add然后继续修改,然后提交git commit,这个时候git status还是会提醒你有一个被修改了,但是没有提交,因为你的git commit只是把第一次添加到缓存区的文件提交了,而第二次修改的并没有添加提交。