版本回退

之前已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.```

- 提交

git add readme.pages
git commit -m "change readme.pages file"```

版本回退_第1张图片
Paste_Image.png
  • 到现在为止,我们已经向git中提交了很多内容了,现在我们来看一下历史记录
git log```

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-777ae4107e149b48.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:

git log --pretty=oneline```

Paste_Image.png
  • 一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id
    需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
版本回退
  • 首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
    表示当前版本,也就是最新的提交3628164...882e1e0
    (注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
    ,上上一个版本就是HEAD^^
    ,当然往上100个版本写100个^
    比较容易数不过来,所以写成HEAD~100

  • 现在我们回退到上一个版本

git reset --hard HEAD^```

回退成功!
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-a09c6d86cb420f94.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 再来查看版本库的状态

git log```

  • 只要有版本号 我们可以随便回退
版本回退_第2张图片
Paste_Image.png
  • Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
    指针,当你回退版本的时候,Git仅仅是把HEAD指针指向回退的版本

恢复到新版本

  • 你会退到之前的版本,但是你后悔了,想要恢复到之前的版本怎么办?Git中总有后悔药让你吃的。

首先Git保存你的每一次命令:

git reflog```

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/189984-84e1ff3bed0e1c50.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 这里记录了所有的版本号,我们直接使用命令回退到最新的版本号即可

git reset --hard cf7f320```

版本回退_第3张图片
Paste_Image.png

总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

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

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

你可能感兴趣的:(版本回退)