版本回退说白了就是返回某一次操作前的状态。
首先在新建的readme.txt里输入内容并已经提交的基础上执行以下操作:
先修改readme.txt文档:
Git is a distributed version control system.
Git
is free software distributed under the GPL.
然后提交
$ git add readme.txt
$ git commit -m "append GPL"
[master 3628164] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
git log
命令查看历史记录
$ git log //查看历史记录
commit a34058bf6a73828c46b9383ed29656e5dd4ef823
Author: Amy <qianghongrong@yeah.net>
Date: Thu May 25 10:09:32 2017 +0800
append GPL
commit f973ae85b3ea7d928ba6b14f1b06b37ea1ffcec4
Author: Amy <qianghongrong@yeah.net>
Date: Thu May 25 09:51:40 2017 +0800
add distribed
commit 26a10837cfd1447a34e31a4d1b9c5f6a76337305
Author: Amy <qianghongrong@yeah.net>
Date: Thu May 25 08:57:20 2017 +0800
wrote a readme file
觉得太乱,可以加上
--pretty=oneline
参数:
$ git log --pretty=oneline
a34058bf6a73828c46b9383ed29656e5dd4ef823 append GPL
f973ae85b3ea7d928ba6b14f1b06b37ea1ffcec4 add distribed
26a10837cfd1447a34e31a4d1b9c5f6a76337305 wrote a readme file
前面的
一大串类似
3628164...882e1e0
的是
commit id
(版本号)
现在退回到之前的版本:
1.
Git必须知道当前版本是哪个版本,在Git中,用
HEAD
表示当前版本,也就是最新的提交
3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是
HEAD^
,上上一个版本就是
HEAD^^
,当然往上100个版本写100个
^
比较容易数不过来,所以写成
HEAD~100
。
们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用
git reset
命令:
$ git reset --hard HEAD^
HEAD
is now
at ea34578
add distributed
使用
cat readme.txt
来读取文件内容
:
$ cat readme.txt //读取文件内容
Git is a distributed version control system.
Git is free software.
用
git log
再看看现在版本库的状态
$ git log --pretty=oneline
f973ae85b3ea7d928ba6b14f1b06b37ea1ffcec4 add distribed
26a10837cfd1447a34e31a4d1b9c5f6a76337305 wrote a readme file
最新的那个版本
append GPL
已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个
append GPL
的
commit id
是
3628164...
,于是就可以指定回到未来的某个版本:
$ git re
set --hard
3628164 //版本号没必要写全,前几位就可以了,Git会自动去找
HEAD is now at 3628164 append GPL
再小心翼翼地看看readme.txt的内容:
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的
commit id
怎么办?
在Git中,总是有后悔药可以吃的。当你用
$ git reset --hard HEAD^
回退到
add distributed
版本时,再想恢复到
append GPL
,就必须找到
append GPL
的commit id。Git提供了一个命令
git reflog
用来记录你的每一次命令:
$ git reflogea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file