本章演示提交3个版本到仓库后如何返回到过去或者未来的某个版本
说明:Git会记录所有修改的内容,但只会展示当前提交的版本,其他历史版本git都在后台默默做记录,不展示出来,如果需要仍可追溯
我们现在再对工作区的README.txt文件做一次修改,修改内容如下:
Git is a distributed version control system
Git is free sofware distributed under the GPL
并将修改提交到仓库
renawu@MININT-EB6G7RN MINGW64 /e/test-material/learngit (master)
$ git add README.txt
renawu@MININT-EB6G7RN MINGW64 /e/test-material/learngit (master)
$ git commit -m "append GPL"
[master b542642] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
- 如何查看有几个版本被提交到仓库呢?用命令
git log
$ git log
commit b542642080acef476ed7cd549a88b23322c72cb4 (HEAD -> master)
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Fri Sep 8 09:05:50 2017 +0800
append GPL
commit 884edf2ab32486fcabbf12add8c4de4533e6ea26
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 15:25:20 2017 +0800
modified README.txt
commit 888d59a280e4ed0f61130848446bf01b61310016
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 14:41:27 2017 +0800
wrote 3 files
commit 6b90642ebb19c6234f7da478a93b5aa300f0c19c
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 14:07:16 2017 +0800
wrote a readme file
git log
:显示从近到远的提交日志,可以看到共提交了4次,最近一次append GPL
,上一次modified README.txt
,上上次wrote 3 files
,最早的一次wrote a readme file
- 信息输出比较复杂,可以用用命
git log --pretty=oneline
让版本号和备注一行显示
$ git log --pretty=oneline
b542642080acef476ed7cd549a88b23322c72cb4 (HEAD -> master) append GPL
884edf2ab32486fcabbf12add8c4de4533e6ea26 modified README.txt
888d59a280e4ed0f61130848446bf01b61310016 wrote 3 files
6b90642ebb19c6234f7da478a93b5aa300f0c19c wrote a readme file
**现在我们让版本从
append GPL
回退到modified README.txt**
首先需要说明,在Git中用
HEAD
表示当前版本,上一个版本可写为HEAD^
,网上100个版本怎么写呢?可以写成HEAD~100
,当然100个版本很难输,可以直接commit id
- 使用命令
git reset --hard
进行回退
$ git reset --hard HEAD^
HEAD is now at 884edf2 modified README.txt
$ git log
commit 884edf2ab32486fcabbf12add8c4de4533e6ea26 (HEAD -> master)
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 15:25:20 2017 +0800
modified README.txt
commit 888d59a280e4ed0f61130848446bf01b61310016
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 14:41:27 2017 +0800
wrote 3 files
commit 6b90642ebb19c6234f7da478a93b5aa300f0c19c
Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>
Date: Thu Sep 7 14:07:16 2017 +0800
wrote a readme file
现在去查看一下工作区的README.txt文件是不是回退到了上一个版本,答案是肯定的。查看版本库的状态发现最新的append GPL
已经看不到了
Git is a distributed version control system
Git is free sofware
- 那我们怎么再回到
append GPL
呢?如果命令窗口没有关闭,找到append GPL
对应的commit id
是
b542642080acef476ed7cd549a88b23322c72cb4
(使用时可以不用写全),就可以回到未来的某个版本
$ git reset --hard b542642080ace
HEAD is now at b542642 append GPL
Git is a distributed version control system
Git is free sofware distributed under the GPL
说明:Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪
- 如果命令窗口已关闭,找不到
commit id
怎么办?不用着急,可以用git reflog
命令展示git记录的每一次操作
$ git reflog
884edf2 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
b542642 HEAD@{1}: reset: moving to b542642080ace
884edf2 (HEAD -> master) HEAD@{2}: reset: moving to HEAD^
b542642 HEAD@{3}: commit: append GPL
884edf2 (HEAD -> master) HEAD@{4}: commit: modified README.txt
888d59a HEAD@{5}: commit: wrote 3 files
6b90642 HEAD@{6}: commit (initial): wrote a readme file
我们发现b542642又出现了,直接用命令回退就可以了
$ git reset --hard b542642
HEAD is now at b542642 append GPL
小结
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
附件