操作失误不要慌,这个命令给你的Git一次反悔的机会
今天我们来介绍git当中两个非常非常好用的工具,git show和reflog。
这两个命令虽然不是必知必会,但是如果熟练使用可以极大地帮助我们查看代码仓库的问题,以及在我们操作失误的时候拯救我们。可以理解成应急技能,一般情况下用不到,关键时候会的话可以救命的那种。
git show
首先来聊聊git show,它解决了我们日常开发场景当中非常常见的一个问题,就是回看某一个提交的内容。我们通过git log只能阅读到commit的时候输入的提示语。但有些开发者不遵守规范,或者是提示语写得非常简略,我们很难get到其中的内容,还是得需要手动checkout过去查看内容,这就非常的不方便。
而有了git show工具之后,我们可以直接通过git show命令查看到代码层面的改动。
git show接收一个参数,表示具体的commit id,比如:
git show 40a91193d
那么git会自动展示出这个commit下所有的改动内容:
这个大家都很好理解,但是有一个小问题,就是我们怎么知道我们要看的提交的id呢?所以我们需要先查到commit id,才能git show,否则盲目乱show一通也很花时间。
查找commit id,我们之前介绍过,这里再简单提一下。一般来说有两种参数非常好用,第一种是--stat参数,它可以列举出每一个commit具体到文件级别的改动:
第二个参数是pretty=oneline,它可以将git的提交记录压缩成一行,方便我们快速查找提交时的备注。
我们之前介绍过,在git实现的内部,分支其实只是一个指向节点的指针。所以我们也可以用git show + 分支名的方法来查看某一个分支的改动,这样查找出来的改动是这个分支最后一个提交节点的。
比如:
git show test
展示的就是test这个分支最后一个提交的改动,如果我们想要查看test分支倒数第二个节点的改动呢?这就需要我们使用祖先引用了。我们之前也介绍过,我们有两种方法可以表示一个节点的祖先。第一种方法是使用^这个符号,它表示某个节点的父节点。这个符号是可以重复引用的,比如我们要选择倒数第三个节点,就可以写成test^^。
第二种方法就是使用~,它和^的意思是一样,一样表示父节点,但是它可以后面跟一个数字表示嵌套。举个例子,比如test^^它等价于test~2。
所以比如我们想要查看test分支倒数第三个节点的提交,我们只需要这样就可以了:
git show test~3
git reflog
今天我们要介绍的第二个功能叫做reflog,这是一个非常非常有用的功能,很多次救了我的命。
reflog是reference log的缩写,含义是引用日志,它会记录下HEAD节点和分支引用所指向的历史。我们可以使用git reflog命令来查看引用日志:
简单解释一下这个展示出来的日志,它最左侧一列表示commit id。它的第二列表示的是分支,也就是这个提交属于哪一个分支。第三列表示的是相对位置,也就是它相对于现在HEAD指针的位置。最后一列是信息,它记录的是HEAD指针移动的情况。
当我们使用reset或者是checkout等命令的时候,都会在这里留下记录。当我们想要反悔了,我们可以通过reflog迅速找到正确的位置。
这个经常出现,比如我们checkout到了一个过去的节点查看了一些代码,或者是使用了reset了过去的节点。当你查看完了想要回去的时候,你会发现你回不去了。使用git log只会展示再之前的日志,因为git log是以HEAD节点往前输出的。所以这个时候我们就只能查看reflog,找到我们checkout过来的commit id,然后再通过checkout将HEAD指针移动过去。
也就是说reflog给了你一次后悔的机会,这也是我们之前说的,只要是提交过的代码,一般情况下都不会丢失,因为我们还可以通过reflog进行查找。
今天的文章就到这里,怎么样,你学会了吗?如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发)
本文使用 mdnice 排版
{{uploading-image-815671.png(uploading...)}}
操作失误不要慌,这个命令给你的Git一次反悔的机会的更多相关文章
- 用xshell操作linux系统的常用命令
(1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...
- 你一定要知道的关于Linux文件目录操作的12个常用命令
写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操 ...
- Git操作简单入门及相关命令
说明:本文内容主要来自文末参考链接内容,此文仅作学习记录.如有转载,请到文末参考链接处. 1 基本概念理解 1.1 Git介绍 Git是分布式版本控制系统. 集中式VS分布式,SVN VS Git. ...
- shell编程系列23--shell操作数据库实战之mysql命令参数详解
shell编程系列23--shell操作数据库实战之mysql命令参数详解 mysql命令参数详解 -u 用户名 -p 用户密码 -h 服务器ip地址 -D 连接的数据库 -N 不输出列信息 -B 使 ...
- git plumbing 更加底层命令解析-深入理解GIT
原文: http://rypress.com/tutorials/git/plumbing 本文详细介绍GIT Plumbing--更加底层的git命令,你将会对git在内部是如何管理和呈现一个项目r ...
- android Git命令家底儿及Git数据通信原理详解
声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 现在大部分使用的都是SVN,也有一部分迁移了Git,虽然挺好的,不过还有其它很多版本控制的工具,并没有谁最好用,最重要的是适合自己的公 ...
- Windows Git Bash命令行下创建git仓库并更新到github
大二的时候就听过老师说有一个叫git的版本管理工具,当时只是听老师说说而已,也没有去使用它,因为当时用过svn,就感觉自己没多少东西需要git管理. 最近几天,我经常在开源中国看别人的帖子,看到别人对 ...
- git 命令 查看历史提交 git log
怎么理解git commit 命令 git commit 相当于 我们虚拟机快照操作,每次执行commit命令 相当于对本地仓库做一次快照,保存了当时仓库的状态, git commit -m 加上的& ...
- 在本地用命令行创建一个git仓库,并推送到远程
首先,进入的gitStore目录下(没有的话自己创建一个) 1.git init 在gitStore目录下 初始化一个git仓库 2.git add 复制一个文件到gitStore目录下,然后执行gi ...
随机推荐
- 54.Qt-将界面程序封装成动态库DLL
1.生成dll 然后选择创建共享库: 创建好后,修改pro文件,改为下面两句(这样就可以创建界面了): 然后修改sharedlib.h: #ifndef SHAREDLIB_H #define SH ...
- Springboot项目集成JPush极光推送(Java SDK)
1.由于项目的需求,需要在Android APP上实现消息推送功能,所以引用了极光推送(官网:https://www.jiguang.cn/, 文档:http://docs.jiguang.cn/) ...
- 快速解读linq语法
在说LINQ之前必须先说说几个重要的C#语言特性 一:与LINQ有关的语言特性 1.隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...
- 提取swagger内容到csv表格,excel可打开
swagger生成的页面api接口统计,有几种方法 直接在前端用js提取出来,较麻烦(不推荐,不同版本的页面生成的标签有可能不一样,因此可能提取不出来) //apilet a = document.g ...
- centos7虚拟机时间和本地时间相差8小时
安装ntp和ntpdate 在安装centos7虚拟机的时候,已经将时区设置为了Asia/shanghai,但还是出现时间不准,相差了8小时 可以安装ntp和ntpdate,使用 NTP 公共时间服务 ...
- python 读取文件时报错UnicodeDecodeError
python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...
- 初试Python
01 Python简介 Python是一种跨平台的计算机程序设计语言.于1989年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido). python具有非常多并且 ...
- 为Linux的文件管理器创建“在此打开终端”菜单
有些Linux的GUI文件管理器没有右键菜单"在此打开终端",或者有却不能自行指定某种终端. 因为文件夹也有其MIME类型(inode/directory),通过文件关联的方式,把 ...
- linux(centos8):使用tree命令查看目录结构
一,tree命令的用途 tree命令以树状图列出文件目录结构 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源 ...
- nginx配置laravel lumen重写
location / { try_files $uri $uri/ /index.php?$query_string;}