简言之:从1 回退到 3,在3版本通过回退记录(git reflog)找到它的上一条回退记录的hash值,复制1的hash值进行回退,执行git reset --hard 粘贴1的hash值进来,此时就回到1的版本了,执行git log即可看到1、2、3、4、5所有提交记录。
举例说明:我总共有1、2、3、4、5,5条提交版本记录,我现在已经回退到3了,可是这个版本我不满意,我要回退到1、2,也就是最近的一次提交;但是自从回退到3版本,我用git log找不到3之前的1、2的提交版本号(每个版本的一长串hash值),那如何才能找回它们的版本号呢?那就是用git reflog查看回退记录,git的撤销回退版本规则是这样的:在git reflog中找到上一条回退记录的,也就是你从哪回退来的这个hash值,复制这个hash值,使用 git reset --hard 粘贴到这里,就可以回到你 回退前的版本,也就是1最近的一次提交,再执行git log就可查到1、2、3、4、5所有提交记录。
实战演示
需求:回退到首次提交所有代码
版本,再从此版本回退到第四次提交
,也就是最近的一次提交。
1、这是我的提交记录
2、回退
git reset --hard d4cbaafd76e7ddd0435d761566d1530426a636c8
或 git reset --hard d4cbaaf // 取上面的前7位
当前回退的版本为d4cbaaf
3、此时用git log已经找不到之前的提交记录了,也就是 修复文档
和 第四次提交
的记录
4、虽然git log没有日志,但是git reflog 记载着每一次版本移动的记录以及对应版本的版本号
执行 git reflog
提示:git的回退是靠hash值的,所以只要有这个值,那一切都好办了。
5、正式从 回退版本撤销到最近提交的版本,即 首次提交所有代码
回到 第四次提交
。换成数字举例就是 从3回到1
当前版本已成功回退到 第四次提交
了,拿下。
git reset --hard f9ae7aa
6、撤销回退之后如果要提交这个版本更新到远端仓库,就执行git push -f,强制推送上去。
git push -f
命令说明:回退版本后使用git push -f强制推送是为了覆盖远程仓库的当前版本。
其实撤销回退
准确来讲还是叫回退
,只是为了方便大家理解,更加语义化、直观的表达方式。
7、此时已经能看到当前版本之前的提交记录了,因为当前已经是 第四次提交
的版本了,不再像 首次提交所有代码
一样。
git log
查看
git log 和 git reflog的区别
git log:只能看到当前版本以及它之前的记录,但是看不到它后来的版本。2看不到最新的1,但能看到2、3、4、5老的。如果当前是1,那就能看到1、2、3、4、5。
git reflog:查看每次版本移动的轨迹,回退时专用。
这个查看回退记录功能我就知道git设计者肯定不会随便的将部分版本删除掉了,肯定是需要用一些办法才能让不见天日的版本起死回生。
拓展:命令行如何复制hash值
鼠标选中复制的内容右键 => 选Paste
(复制) => Copy
(粘贴)
后言
今天在用git处理仓库的东西,突然就钻研了一下,把之前懂得不是很全的知识点补充了一下。至少我个人觉得这篇挺精髓的,这个撤销回退版本操作,不需要自己去备份老版本就可以自由回退不同版本,游刃有余。记录一下,方便以后遇到或者正在遇到找这个方案的小伙伴,就这样。😊