三、版本库版本回退

来源:互联网 发布:个人简介的app源码 编辑:程序博客网 时间:2024/05/16 09:31

参考文章
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

本章演示提交3个版本到仓库后如何返回到过去或者未来的某个版本

说明:Git会记录所有修改的内容,但只会展示当前提交的版本,其他历史版本git都在后台默默做记录,不展示出来,如果需要仍可追溯


我们现在再对工作区的README.txt文件做一次修改,修改内容如下:

Git is a distributed version control systemGit is free sofware distributed under the GPL

并将修改提交到仓库

renawu@MININT-EB6G7RN MINGW64 /e/test-material/learngit (master)$ git add README.txtrenawu@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 logcommit b542642080acef476ed7cd549a88b23322c72cb4 (HEAD -> master)Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>Date:   Fri Sep 8 09:05:50 2017 +0800    append GPLcommit 884edf2ab32486fcabbf12add8c4de4533e6ea26Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>Date:   Thu Sep 7 15:25:20 2017 +0800    modified README.txtcommit 888d59a280e4ed0f61130848446bf01b61310016Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>Date:   Thu Sep 7 14:41:27 2017 +0800    wrote 3 filescommit 6b90642ebb19c6234f7da478a93b5aa300f0c19cAuthor: 吴丽娜(视频.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=onelineb542642080acef476ed7cd549a88b23322c72cb4 (HEAD -> master) append GPL884edf2ab32486fcabbf12add8c4de4533e6ea26 modified README.txt888d59a280e4ed0f61130848446bf01b61310016 wrote 3 files6b90642ebb19c6234f7da478a93b5aa300f0c19c 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 logcommit 884edf2ab32486fcabbf12add8c4de4533e6ea26 (HEAD -> master)Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>Date:   Thu Sep 7 15:25:20 2017 +0800    modified README.txtcommit 888d59a280e4ed0f61130848446bf01b61310016Author: 吴丽娜(视频.204858) <renawu@sohu-inc.com>Date:   Thu Sep 7 14:41:27 2017 +0800    wrote 3 filescommit 6b90642ebb19c6234f7da478a93b5aa300f0c19cAuthor: 吴丽娜(视频.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 systemGit is free sofware
  • 那我们怎么再回到append GPL呢?如果命令窗口没有关闭,找到append GPL对应的commit id
    b542642080acef476ed7cd549a88b23322c72cb4(使用时可以不用写全),就可以回到未来的某个版本
$ git reset --hard b542642080aceHEAD is now at b542642 append GPL
Git is a distributed version control systemGit is free sofware distributed under the GPL

说明:Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪

  • 如果命令窗口已关闭,找不到commit id怎么办?不用着急,可以用git reflog命令展示git记录的每一次操作
$ git reflog884edf2 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^b542642 HEAD@{1}: reset: moving to b542642080ace884edf2 (HEAD -> master) HEAD@{2}: reset: moving to HEAD^b542642 HEAD@{3}: commit: append GPL884edf2 (HEAD -> master) HEAD@{4}: commit: modified README.txt888d59a HEAD@{5}: commit: wrote 3 files6b90642 HEAD@{6}: commit (initial): wrote a readme file

我们发现b542642又出现了,直接用命令回退就可以了

$ git reset --hard b542642HEAD is now at b542642 append GPL

小结

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

附件
这里写图片描述

原创粉丝点击