Git - Git教程 04:版本回退
版本回退
1 - 现在我们一共有 3 个版本被提交到 Git 仓库里:0001G / 3 files added / 0002G
2 - git log 是查看版本历史记录命令
1 $ git log 2 commit 4d050e484b381a069625ec974f5f407c9826ecd0 (HEAD -> master) 3 Author: YourName <Your email> 4 Date: Wed Apr 12 00:40:34 2023 +0800 5 6 0002G 7 8 commit bdb46dea0a589e67699fb7b526ddebeaa3145849 9 Author: bsepoch <bsepoch@163.com> 10 Date: Wed Apr 12 00:28:51 2023 +0800 11 12 3 files added 13 14 commit 3e5794919a980678cebf1c6a3e5ce0f825e97016 15 Author: bsepoch <bsepoch@163.com> 16 Date: Wed Apr 12 00:26:13 2023 +0800 17 18 0001G
如果修改的历史版本过多,以上的显示效果难免会使人眼花缭乱,可使用以下命令
1 $ git log --pretty=oneline 2 4d050e484b381a069625ec974f5f407c9826ecd0 (HEAD -> master) 0002G 3 bdb46dea0a589e67699fb7b526ddebeaa3145849 3 files added 4 3e5794919a980678cebf1c6a3e5ce0f825e97016 0001G
Git 和 SVN 不一样,Git 的 commit id 不是1、2、3……递增的数字,而是一个 SHA1 计算出来的一个非常大的数字,用十六进制表示。为什么 commit id 需要用这么一大串数字表示呢?因为 Git 是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1、2、3……作为版本号,那肯定就冲突了
你每提交一个新版本,实际上 Git 就会把它们自动串成一条时间线。如果使用可视化工具查看 Git 历史,就可以更清楚地看到提交历史的时间线
3 - 回退到上一版本
$ git reset --hard HEAD^ HEAD is now at bdb46de 3 files added
若要回退以前的版本,首先 Git 必须知道当前版本是哪个版本。在 Git 中用 HEAD 表示当前版本,上一个版本就是 HEAD^,那么上上一个版本就是 HEAD^^......当然往上100个版本写100 个^ 就比较蛋疼,所以可写成 HEAD~100
1 $ git reset --hard HEAD~1 2 HEAD is now at c374398 0001G
4 - 这里我们查看 file_D.txt 文本内容,已经变成了初始内容
1 $ cat file_D.txt 2 It's been a long day without you my friend
此时我们用 git log 看一下现在版本库状态会发现最新的那个版本 0002G 消失了
1 $ git log 2 commit bdb46dea0a589e67699fb7b526ddebeaa3145849 (HEAD -> master) 3 Author: bsepoch <bsepoch@163.com> 4 Date: Wed Apr 12 00:28:51 2023 +0800 5 6 3 files added 7 8 commit 3e5794919a980678cebf1c6a3e5ce0f825e97016 9 Author: bsepoch <bsepoch@163.com> 10 Date: Wed Apr 12 00:26:13 2023 +0800 11 12 0001G
5 - 指定回到未来的某个版本。要求:当前命令行窗口未关闭,依旧显示 0002G 的信息
$ git reset --hard 4d050 HEAD is now at 4d050e4 0002G
注:版本号没必要写全,前几位就可以了,Git 会自动去找。当然也不能只写前一两位,因为 Git 可能会找到多个版本号,就无法确定是哪一个了
查看 cat file_D.txt 文本内容
$ cat file_D.txt It's been a long day without you my friend,And I'll tell you all about it when I see you again.
惊不惊喜,意不意外?Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,当你回退版本的时候,Git 仅仅是把 HEAD 重指向所回退的版本
1 $ git reflog 2 4d050e4 (HEAD -> master) HEAD@{0}: reset: moving to 4d050 3 bdb46de HEAD@{1}: reset: moving to HEAD^ 4 4d050e4 (HEAD -> master) HEAD@{2}: commit: 0002G 5 bdb46de HEAD@{3}: commit: 3 files added 6 3e57949 HEAD@{4}: commit (initial): 0001G
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)