现在,我们先复习一下提交改变的整个流程
修改一下readme
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(-)
就是这样,不断的修改,不断的提交,这里就有一个问题,如果发现修改错了,怎么办呢?如何回退到以前的版本呢?
我们仔细想想,readme 一共有多少个版本被我们提交过了
版本1
Git is a version control system.
Git is free software.
版本2
Git is a distributed version control system.
Git is free software.
版本3
Git is a distributed version control system.
Git is free software distributed under the GPL.
现在,版本控制系统的作用就真正发挥啦。。
使用git log命令查看提交的历史(这里我在自己电脑上运行的结果,和廖雪峰官网稍有不同)
git log readme
commit afb53187b21af9e14e8e6bc45a64c290a3e292e2 (HEAD -> master)
Author: 123456789000000@qq.com <123456789000000@qq.com>
Date: Fri Jan 12 09:15:41 2018 +0800
append GPL
commit 2e7d71aaa15a88caf12c004df108ae594870c287
Author: 123456789000000@qq.com <123456789000000@qq.com>
Date: Thu Jan 11 21:46:58 2018 +0800
add distributed
commit cb101fe332c962eb8fe0f6abc29218699ea35503
Author: 123456789000000@qq.com <123456789000000@qq.com>
Date: Thu Jan 11 21:25:09 2018 +0800
wrote a readme file
或者使用精简版的命令,要不然太多了。。
git log --pretty=oneline readme
afb53187b21af9e14e8e6bc45a64c290a3e292e2 (HEAD -> master) append GPL
2e7d71aaa15a88caf12c004df108ae594870c287 add distributed
cb101fe332c962eb8fe0f6abc29218699ea35503 wrote a readme file
需要友情提示的是,你看到的一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
好了,现在开始回退
git reset --hard HEAD~1
这里HEAD~1就是回退到前一个版本啦,点开查看文件,果然回退了
查看版本库的状态
git log
Author: 2470231941@qq.com <2470231941@qq.com>
Date: Thu Jan 11 21:46:58 2018 +0800
add distributed
commit cb101fe332c962eb8fe0f6abc29218699ea35503
Author: 1234567890@qq.com <2470231941@qq.com>
Date: Thu Jan 11 21:25:09 2018 +0800
wrote a readme file
可是,如何回去呢?可以用下面的命令
首先,用下面的命令查看你每个提交的id的前面一段,可以向上翻一下命令行,也可以使用下面的命令
git reflog
2e7d71a (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
afb5318 HEAD@{1}: commit: append GPL
2e7d71a (HEAD -> master) HEAD@{2}: commit: add distributed
cb101fe HEAD@{3}: commit (initial): wrote a readme file
找到appendGPL前面的那行字符串,然后用下面的命令恢复
git reset --hard afb5318
HEAD is now at afb5318 append GPL
再次查看,果然变回来了
cat readme
Git is a distributed version control system.
Git is free software distributed under the GPL.
查看log
git log
commit afb53187b21af9e14e8e6bc45a64c290a3e292e2 (HEAD -> master)
Author: 2470231941@qq.com <2470231941@qq.com>
Date: Fri Jan 12 09:15:41 2018 +0800
append GPL
commit 2e7d71aaa15a88caf12c004df108ae594870c287
Author: 2470231941@qq.com <2470231941@qq.com>
Date: Thu Jan 11 21:46:58 2018 +0800
add distributed
commit cb101fe332c962eb8fe0f6abc29218699ea35503
Author: 2470231941@qq.com <2470231941@qq.com>
Date: Thu Jan 11 21:25:09 2018 +0800
wrote a readme file