今天我们来介绍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进行查找。
今天的文章就到这里,怎么样,你学会了吗?如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)
- END -