现在,我们回顾一下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

results matching ""

    No results matching ""