Git教程第4篇-版本控制之版本回退

2019-10-18 04:57:20   Git

你打游戏的时候,有一关很难,每次都死在这里,你肯定不希望每次都从第一关开始打,所以你会在这一关保存一下游戏记录,死掉之后每次从这个记录重新挑战。就像游戏存盘一样,我们工作一段时间也会保存一次记录,以免需要回退到之前的某个时间。

我再写一点东西,添加一行 reset

vim README.md

现在README.md是这样的

write something
back
reset

提交一下

git add .
git commit -m 'add reset'

使用git log看一下当前的日志状态

commit 7558812fa8052de97369c5d0929ccc0dc96057a1 (HEAD -> master)
Author: Vien <xiaowei@magicmoma.com>
Date:   Fri Oct 18 12:31:45 2019 +0800

    add reset

commit b86547ac445e4dbfc31504c6cbc57456271650ac
Author: Vien <xiaowei@magicmoma.com>
Date:   Sat Oct 12 14:29:42 2019 +0800

    back

commit 0e7523345b03fecff4a55898695dd3f3a1540d8d
Author: Vien <xiaowei@magicmoma.com>
Date:   Thu Oct 10 15:45:47 2019 +0800

    first release

commit f870cc5e14ddfe7abbf0c44a096bd11d308637d0
Author: Vien <xiaowei@magicmoma.com>
Date:   Thu Oct 10 15:24:35 2019 +0800

    我的第一次提交
(END)

如果觉得太乱,可以加一个 --pretty=oneline 参数 git log --pretty=oneline

7558812fa8052de97369c5d0929ccc0dc96057a1 (HEAD -> master) add reset
b86547ac445e4dbfc31504c6cbc57456271650ac back
0e7523345b03fecff4a55898695dd3f3a1540d8d first release
f870cc5e14ddfe7abbf0c44a096bd11d308637d0 我的第一次提交
(END)

前面那一串是每次 commit 的 id 也就是版本号,使用sha1计算出来的一个很大的数字,用16进制表示,之所以用很大的数字也是因为Git是一个分布式管理的版本控制系统,为了避免版本号冲突。这个commit的id也就是我们会用来回退版本用到的东西。

如果我们要回退到上一个版本,我们可以指定版本号 b86547ac445e4dbfc31504c6cbc57456271650ac 也可以用 HEAD^

git reset b86547ac445e4dbfc31504c6cbc57456271650ac

或者

git reset --hard HEAD^

HEAD其实可以理解为当前的版本指针,然后 一个^ 就是指HEAD往前一个版本, 两个 ^ 就是往前两个版本,如果太多的话,你也搞不清到底是该退几个,还是指定版本号比较安全一些,也是我喜欢用的方式。另外,版本号其实不必全写,比如 git reset b86547ac44 只用很短的一部分,他也是可以找到的,但是也不要太短,1位2位数可就过分了。

回退后再看一下:

git log --oneline
b86547a (HEAD -> master) back
0e75233 first release
f870cc5 我的第一次提交

果然回退到之前的版本了,刚回退完,后悔了(刚穿越到唐朝,发现还是现代生活好,想重返未来),然而log里已经没有之前的版本id了,如果你之前打印的日志还在,可以轻松找到那个id,但是如果找不到了呢。我们可以使用reflog查看

git reflog
b86547a (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
7558812 HEAD@{1}: commit: add reset
b86547a (HEAD -> master) HEAD@{2}: commit: back
0e75233 HEAD@{3}: reset: moving to 0e7523345b03fecff4a55898695dd3f3a1540d8d
ab07db3 HEAD@{4}: commit: bacj
0e75233 HEAD@{5}: commit: first release
f870cc5 HEAD@{6}: commit (initial): 我的第一次提交

可以看到我们的操作记录,而且也能找到那个消失不见的版本号 7558812 ,我们再回到那个版本:

git reset 7558812

查看日志

git log --oneline
7558812 (HEAD -> master) add reset
b86547a back
0e75233 first release
f870cc5 我的第一次提交
(END)

是不是又出现了!

小结

  • HEAD 指向当前版本,HEAD^ 指前一个版本
  • 我们可以用git reset 版本id 回退到某个版本
  • 要重返未来可以用 git reflog,确定要回到未来的哪个版本
vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/225
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册

标签

AdSense Anaconda Android API Auth AWS B-tree Bandwagon Blog bower brew bytes Caffe Catalina cloudcone Composer conda crontab CSS Cuda cv2 datetime Digitalocean DNS Docker Docker-Compose export Flask GET Git GitHub Gmail GoDaddy Google GTM hash Homebrew Homestead HTML http HTTPS IDEA image imagemagick imagick imgick import InnoDB ISO8601 iTerm2 Java JPG Keras Laravel Laravel-Admin lazyload Linux list lnmp load logs Lravel Mac Markdown matplotlib md5 mix Mojave mongo MongoDB MySQL Namesilo Nginx npm numpy Nvidia Nvidia-Docker onevps OpenCV Openpose Outline parse PayPal PHP php-fpm PhpStorm PHP扩展 PIL Pillow pip PNG POST Protobuf PyCharm pyenv pymongo Python Queue Redis requests save selenium SEO Shadowsock Shadowsocks ShadowsocksR simplemde Spring Boot SQLServer SSH SSL证书 SSR str Sublime sudo swap Tensorflow Terminal Terminator Ubuntu urllib UTC v2ray Valet Validation Validator VienBlog virtualenvs VPN VPS Vultr Web Windows Xcode zip zmq zsh 下载图片 云主机 云服务器 人工智能 优化 优惠码 伪原创 作弊与反作弊 免费ss账号 免费提现 切片 前端 加密 协议 博客 友链 后台运行 命令 图片操作 图片转换 域名 大小写转换 安卓模拟器 定时任务 定时执行 延迟加载 懒加载 提现 搜索引擎 搬瓦工 搭梯子 教程 数据库 文件上传 日志 时区 时间戳 服务器 机器学习 梯子 港版支付宝 生活服务 科学上网 系统升级 索引 编辑器 自动付款 英文伪原创 计划任务 语法 远程连接 重定向 错误异常 错误提示 队列 阿里云 香港 香港手机号
亲情非友情链接