版本回退
延续之前的文件,重新练习修改提交,修改 readme.txt 的文本内容如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
相比较上个版本的 readme.txt 的内容:
Git is a distributed version control system.
Git is free software
添加了新内容 distributed under the GPL
。
这时尝试提交:
commit
部分添加的说明内容为 append GPL
。
$ git add readme.txt
$ git commit -m "append GPL"
[master a58b4d1] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
使用 Git 进行操作时,修改到一定程度可进行保存,在 Git 当中这个保存的方式就是 commit
。一旦文件修改出现错误,或者误删文件,可以从最近的 commit
中恢复。
在 Git 中,可用 git log
命令,查看版本控制系统历史记录
$ git log
Author: lion <username@xxx.com>
Date: Wed Oct 9 14:14:44 2019 +0800
append GPL
commit f99120a42d3aa6c4f18b4bd7dbdfab80a011ce0c
Author: lion <username@xxx.com>
Date: Wed Oct 9 14:02:04 2019 +0800
add distributed
commit ddc374f50574afa159853eb950643b68d6a273dc
Author: lion <username@xxx.com>
Date: Wed Oct 9 11:30:32 2019 +0800
wrote a readme file
git log
命令显示从最近到最远的提交日志。
同时,git log
输出的信息比较多,这时可以加上 --pretty=oneline
参数,以缩减内容,只显示关键的信息。
$ git log --pretty=oneline
a58b4d17ac618b23f3ce3db177a773df1b08d93f append GPL
f99120a42d3aa6c4f18b4bd7dbdfab80a011ce0c add distributed
ddc374f50574afa159853eb950643b68d6a273dc wrote a readme file
Git 会将提交的每个版本串成一条时间线。
在 Git 中,用 HEAD
表示当前版本,HEAD^
表示上个版本,依次类推。当版本多的时候,可以写成 HEAD~100
,这里 100
代表的就是哪个版本。
现在,将当前版本 append GPL
回退到上一个版本 add distributed
,就可以使用 git reset
命令
$ git reset --hard HEAD^
HEAD is now at f99120a add distributed
查看 readme.txt 的内容,的确是 add distributed
$ cat readme.txt
Git is a distributed version control system.
Git is free software.
此时用 git log
查看下当前版本库的状态
$ git log
commit f99120a42d3aa6c4f18b4bd7dbdfab80a011ce0c
Author: lion <username@xxx.com>
Date: Wed Oct 9 14:02:04 2019 +0800
add distributed
commit ddc374f50574afa159853eb950643b68d6a273dc
Author: lion <username@xxx.com>
Date: Wed Oct 9 11:30:32 2019 +0800
wrote a readme file
这里会发现 append GPL
这个版本无法查看。
Git 的版本回退速度非常快,因为 Git 内部有个指向当前版本的 HEAD
指针,当回退版本的时候,Git 仅仅是把 HEAD 从指向 append GPL
改为指向 add distributed
。
不过在 Git 中,提供了一个命令 git reflog
用来记录每一次命令,可以查看 append GPL
的 commit id
,使用 git reset --hard commit_id
回到对应 commit_id
的版本。
小结
- HEAD 指向的版本就是当前的版本,Git 允许在版本之间进行切换,使用命令
git reset --hard commit_id
。 - 切换版本前,用
git log
查看提交历史,以确定回退到哪个版本。 - 要重新回到回退前的版本,用
git reflog
查看命令历史,找到对应的commit_id
,用第一条提到的git reset --hard commit_id
回到某个版本。