版本回退

上篇博客已经讲解了如何提交修改的文件到git版本库,现在,再练习一次,修改README.md文件如下:

1
2
Git is very good
Git is very nice

提交:

1
2
3
4
$ git add README.md
$ git commit -m "add Git is very nice"
On branch master
nothing to commit, working directory clean

现在,我们回顾一下README.md文件一共有几个版本被提交到Git仓库里了:

版本一:

1
Git is good

版本二:

1
Git is very good

版本三:

1
2
Git is very good
Git is very nice

在实际项目中,每天都会修改,添加一些东西,提交到版本库中,所以每天都会有好几个版本。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ git log
commit b410c561a196c18bcb254f83c26551001e667dda
Author: xybCoder <xyb520zly@gmail.com>
Date: Sat Mar 26 11:07:59 2016 +0800
add Git is very nice
commit 1d0f9ddbb6cd8df93596ba6c1b6e627357110741
Author: xybCoder <xyb520zly@gmail.com>
Date: Fri Mar 25 23:13:23 2016 +0800
add good word
commit d9ece1c0500789ec379db30262c67e161f53cdf2
Author: xybCoder <xyb520zly@gmail.com>
Date: Fri Mar 25 21:48:56 2016 +0800
wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是add Git is very nice,上一次是add good word,最早的一次是wrote a readme file。

假如我们想要回到上个版本,把README.md回退到上一个版本,也就是“add good word”的那个版本,怎么做呢?

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交b410c561a196c18bcb254f83c26551001e667dda,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

现在,我们要把当前版本回退到上一个版本“add good word”,就可以使用git reset命令:

1
2
$ git reset --hard HEAD^
HEAD is now at 1d0f9dd add good word

–hard参数有啥意义?
Git在内部有个指向当前版本的HEAD指针

看看README.md的内容是不是版本add good word:

1
2
$ cat README.md
Git is very good

还可以继续回退到上一个版本wrote a readme file,不过且慢,然我们用git log再看看现在版本库的状态:

1
2
3
4
5
6
7
8
9
10
Author: xybCoder <xyb520zly@gmail.com>
Date: Fri Mar 25 23:13:23 2016 +0800
add good word
commit d9ece1c0500789ec379db30262c67e161f53cdf2
Author: xybCoder <xyb520zly@gmail.com>
Date: Fri Mar 25 21:48:56 2016 +0800
wrote a readme file

最新的那个版本add Git is very nice已经看不到了!如果想回到原来最新版本,怎么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你可以找到那个add Git is very nice版本的commit id是b410c561a196c18bcb254f83c26551001e667dda,于是就可以指定回到未来的某个版本:

1
2
$ git reset --hard b410c56
HEAD is now at b410c56 add Git is very nice

查看下:

1
2
3
$ cat README.md
Git is very good
Git is very nice

现在,你回退到了某个版本,不小心关掉了git bash命令窗,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,如果要回到之前版本就必须找到commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

1
2
3
4
5
6
$ git reflog
b410c56 HEAD@{0}: reset: moving to b410c56
1d0f9dd HEAD@{1}: reset: moving to HEAD^
b410c56 HEAD@{2}: commit: add Git is very nice
1d0f9dd HEAD@{3}: commit: add good word
d9ece1c HEAD@{4}: commit (initial): wrote a readme file

##总结一下:

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

热评文章