git 使用手册(三)————版本回退
< 返回列表时间: 2020-03-18来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
今天我们对文件进行了下来修改,并做了commit提交。 啦啦啦啦啦 哟哟哟哟 今天天气不错 心情挺好的 我们下午没有课 这的确挺爽的
写代码有灵感了,对文件有做了下列修改并进行了commit 啦啦啦啦啦 哟哟哟哟 今天天气不错 心情挺好的 我们下午没有课 这的确挺爽的 心里琢磨着大学生活是多么美好啊
下面我后悔了,我觉上面的修改不对,我想在第一个版本的基础上进行修改。
我们用 git log 命令来看看git仓库里有了几个版本: $ git log commit 014a84b754fd139e038fb0b29cc3b87ff5d36fa6 (HEAD -> master) Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 15:06:03 2020 +0800 add 心里琢磨着大学生活是多么美好啊 commit 4be47ce96232b1241fa84e20da7aaed398726fd9 Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 14:59:18 2020 +0800 add 心情挺好的 commit 02aabb10c2b91f7ac9f8111f8693a8ea330fd116 Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 13:08:17 2020 +0800 添加 啦啦啦啦啦 哟哟哟哟 commit f2c056f7ba6377aa64786866eb8afb87936ccb51 Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 11:25:17 2020 +0800 添加一个新文件
git log 命令显示从最近到最远的提交日志,我们可以看到4次提交,最近的一次是 add 心里琢磨着大学生活是多么美好啊 ,上一次是 add 心情挺好的 ,再上一次是 添加 啦啦啦啦啦 哟哟哟哟 ,最早的一次是 添加文件 。
注:我们看到的 014a84b754fd139e038fb0b29cc3b87ff5d36fa6 这一大串数字是commit id(版本号),每次commit 就会自动生产一个对应的版本号。
​ 下面我们回退到第一个版本也就是 添加 啦啦啦啦啦 哟哟哟哟 这个版本。
首先,Git必须知道当前版本是哪个版本,在Git中,用 HEAD 表示当前版本,也就是最新的提交 014a84b754fd139e038fb0b29cc3b87ff5d36fa6 ,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100 。
现在我们使用 git reset 命令把当前版本 014a84b754fd139e038fb0b29cc3b87ff5d36fa6 回退到上一个版本 02aabb10c2b91f7ac9f8111f8693a8ea330fd116 : $ git reset --hard HEAD~2 HEAD is now at 02aabb1 添加 啦啦啦啦啦 哟哟哟哟
输出提示我们的HEAT 已经是 02aabb1 添加 啦啦啦啦啦 哟哟哟哟 了。
在看我们的code文件果然回退到指定版本了: 啦啦啦啦啦 哟哟哟哟 今天天气不错 挺风和日丽的 我们下午没有课 这的确挺爽的 我一大中午早早的跑去上自习 心里琢磨着大学生活是多么美好啊
注意,这里的--hard。下面列出reset 的其参数: --mixed reset HEAD and index --soft reset only HEAD --hard reset HEAD, index and working tree --merge reset HEAD, index and working tree --keep reset HEAD but keep local changes
我们用 git log 再看看现在版本库的状态: $ git log commit 02aabb10c2b91f7ac9f8111f8693a8ea330fd116 (HEAD -> master) Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 13:08:17 2020 +0800 添加 啦啦啦啦啦 哟哟哟哟 commit f2c056f7ba6377aa64786866eb8afb87936ccb51 Author: xingshuqiang <xingshuqiang@thtf.com.cn> Date: Sun Mar 15 11:25:17 2020 +0800 添加一个新文件
前面那两个版本已经看不到了!但如果我们想再回到 add 心情挺好的 这个版本怎么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个 add 心情挺好的 的 commit id 是 4be47ce9623... ,于是就可以指定回到未来的某个版本: $ git reset --hard 4be47ce9623 HEAD is now at 4be47ce add 心情挺好的
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的 HEAD 指针,当你回退版本的时候,Git仅仅是把HEAD从指向 add 心情挺好的 : ┌────┐ │HEAD│ └────┘ │ └──> ○ add 心情挺好的 │ ○ 添加 啦啦啦啦啦 哟哟哟哟 │ ○ 添加一个新文件
改为指向 添加 啦啦啦啦啦 哟哟哟哟 : ┌────┐ │HEAD│ └────┘ │ │ ○ add 心情挺好的 │ │ └──> ○ 添加 啦啦啦啦啦 哟哟哟哟 │ ○ 添加一个新文件
然后顺便把工作区的文件更新了。所以你让 HEAD 指向哪个版本号,你就把当前版本定位在那。
因为关闭了Git Bash 或其它原因找不到新版本的 commit id 怎么办?可以用 git reflog 命令来找到版本号。
git reflog 用来查询你的每一次命令: $ git reflog 4be47ce (HEAD -> master) HEAD@{0}: reset: moving to 4be47ce9623 02aabb1 HEAD@{1}: reset: moving to 02aabb10 f0db4be HEAD@{2}: commit: delete 心里琢磨着大学生活是多么美好啊 02aabb1 HEAD@{3}: reset: moving to HEAD~2 014a84b HEAD@{4}: commit: add 心里琢磨着大学生活是多么美好啊 4be47ce (HEAD -> master) HEAD@{5}: commit: add 心情挺好的 02aabb1 HEAD@{6}: commit: 添加 啦啦啦啦啦 哟哟哟哟 f2c056f HEAD@{7}: commit (initial): 添加一个新文件
热门排行