版本回退
在我们工作过程中,希望从历史某个时刻重新开始,也就是每当文件修改到一定程度的时间,就可以保存一个快照,这个快照的操作就是Git里面的commit,一旦你的文件改乱了,或者误删除了,还可以从最近一个commit恢复。
下面我们测试一下。
版本1:first
this is a git project
git is a version control system
git can manager project
first
版本2:second
this is a git project
git is a version control system
git can manager project
second
版本3:third
this is a git project
git is a version control system
git can manager project
third
Git中有一个命令可以知道历史这个修改记录 git log
$ git log
commit d8b85103d71747ae167441f431a9678c42eccc1b (HEAD -> master)
Author: xlucas @163.com>
Date: Wed Aug 29 23:35:27 2018 +0800
third
commit 7af7dccdd20424d7ed2bd8453ff189326fab974c
Author: xlucas @163.com>
Date: Wed Aug 29 23:34:04 2018 +0800
second
commit e0153cf7fbbfcedf13d2deb1203175f5405fdf47
Author: xlucas @163.com>
Date: Wed Aug 29 23:33:37 2018 +0800
first
commit c55f116cdfb1389b7d97fc1400b3ff85985a7304
Author: xlucas @163.com>
Date: Mon Aug 27 23:41:51 2018 +0800
add one line
git log 命令显示从最近到最远的提交日志
如果觉得输出信息太多,可以加上 --pretty=oneline
$ git log --pretty=oneline
d8b85103d71747ae167441f431a9678c42eccc1b (HEAD -> master) third
7af7dccdd20424d7ed2bd8453ff189326fab974c second
e0153cf7fbbfcedf13d2deb1203175f5405fdf47 first
c55f116cdfb1389b7d97fc1400b3ff85985a7304 add one line
c976d94bfa9e23181ee26638697f5a6f766a072f put a readme file
现在我们开始回退到指定的版本,first
在回退之前,我首先要知道当前是哪个版本,在git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,如果往上10个版本可以写成HEAD~10
我们把当前版本回退到first就可以使用 git reset
$ git reset --hard HEAD^^
HEAD is now at e0153cf first
查看是不是first版本内容
$ cat readme.txt
this is a git project
git is a version control system
git can manager project
first
我们使用git log
查看,当前版本是first,上面second和third版本不见了
$ git log
commit e0153cf7fbbfcedf13d2deb1203175f5405fdf47 (HEAD -> master)
Author: xlucas @163.com>
Date: Wed Aug 29 23:33:37 2018 +0800
first
commit c55f116cdfb1389b7d97fc1400b3ff85985a7304
Author: xlucas @163.com>
Date: Mon Aug 27 23:41:51 2018 +0800
add one line
commit c976d94bfa9e23181ee26638697f5a6f766a072f
Author: xlucas @163.com>
Date: Mon Aug 27 22:58:00 2018 +0800
put a readme file
如果这个时候你想回到未来的某个版本,只要你命令行还没有关闭,可以使用commit id来回到未来的版本,例如想回到 second版本。可以使用如下操作
$ git reset --hard 7af7d
HEAD is now at 7af7dcc second
commit id 不要补全了,写前面几位,git会自动去找,
现在查看readme.txt内容
$ cat readme.txt
this is a git project
git is a version control system
git can manager project
second
当你回退到某一个版本时候,过了几天又希望回退到目前的版本。当你现在是first版本的时候,如果你要回退到third版本的时候,就必须要找到third的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令
$ git reflog
7af7dcc (HEAD -> master) HEAD@{0}: reset: moving to 7af7d
e0153cf HEAD@{1}: reset: moving to HEAD^^
d8b8510 HEAD@{2}: commit: third
7af7dcc (HEAD -> master) HEAD@{3}: commit: second
e0153cf HEAD@{4}: commit: first
c55f116 HEAD@{5}: commit: add one line
c976d94 HEAD@{6}: commit (initial): put a readme file
在这里你可以找到你需要回退的third 版本的commit id d8b8510
$ git reset --hard d8b8510
HEAD is now at d8b8510 third
$ cat readme.txt
this is a git project
git is a version control system
git can manager project
third
总结
HEAD指向的版本就是当前版本,因此,回退版本,使用命令git reset –hard commit_id。
回退前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。