现在,我们回顾一下readme.txt
文件一共有几个版本被提交到Git仓库里了
版本1:I wrote a readme file
Git is a version control system.
Git is free software.
版本2:add distributed
Git is a distributed version control system.
Git is free software.
Git 是版本控制系统, 我们可以使用 git log
命令来查看历史记录:
commit bdb7ea89c46da139877218f2522dee7a37906f46
Author: IDeepspace <[email protected]>
Date: Mon Sep 25 20:36:16 2017 +0800
add distributed
commit 6facf52977b5a2e7c749ec5f37aa412d09a24704
Author: IDeepspace <[email protected]>
Date: Mon Sep 25 20:06:32 2017 +0800
I wrote a readme file
我们可以看到两次提交记录. 新记录排在最上方
我们现在的的版本是 add distributed
, 我们准备把readme.txt
回退到上一个版本 , 也就是 I wrote a readme file
我们要怎么做呢?
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交bdb7ea89c46da1...6f46
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
现在我们使用git reset
命令:
$ git reset --hard HEAD^
会提示 :
HEAD 现在位于 6facf52 I wrote a readme file
我们可以使用$ cat readme.txt
命令来验证下:
Git is a version control system.
Git is free software.
我们用git log
再看看现在版本库的状态:
commit 6facf52977b5a2e7c749ec5f37aa412d09a24704
Author: IDeepspace <[email protected]>
Date: Mon Sep 25 20:06:32 2017 +0800
I wrote a readme file
发现已经没有我们之前的 add distributed
版本了.这个时候, 我们要想再回到这个版本, 该怎么办呢?
只要命令行窗口还没有关闭 , 我们就可以往上找到add distributed
版本的commit id , 然后我们执行
$ git reset --hard bdb7ea89c46da139877218f2522dee7a37906f46
会提示 :
HEAD 现在位于 bdb7ea8 add distributed
我们再用 $ cat readme.txt
命令看一下 :
Git is a distributed version control system.
Git is free software.
这样, 我们就回到了我们想要的版本!
但是有个问题 , 如果刚才打开的命令窗口关闭了, 找不到add distributed
版本的 commit id
该怎么办呢?
Git提供了一个命令 $ git reflog
用来记录你的每一次命令:
bdb7ea8 HEAD@{0}: reset: moving to bdb7ea89c46da139877218f2522dee7a37906f46
6facf52 HEAD@{1}: reset: moving to HEAD^
bdb7ea8 HEAD@{2}: commit: add distributed
6facf52 HEAD@{3}: commit (initial): I wrote a readme file
第三行信息显示了add distributed
版本的 commit id