git log和git reflog的区别

在平时的开发中,经常会遇到代码提交错了需要回滚到一个历史版本,或因为大意回滚错了代码又需要还原等问题,这种回滚和还原操作都离不开git操作命令历史记录的查询。哪git为什么能实现回滚和撤销操作呢?主要跟HEAD有关,可以把HEAD理解成一个指针,HEAD指针通常会指向一个分支指针。这样说不太直观,我们用图来演示一下:

如上图所示,由于当前分支处于master分支,所以HEAD这个指针指向了master分支指针,master分支指针指向具体的版本号;如果我们现在checkout到qa分支,那么HEAD指针就会指向qa分支指针。

git中的HEAD可以理解成一个指针指向的是版本号。因此,Git允许我们在版本的历史和未来之间进行穿梭移动,使用命令 git reset --hard commit_id 就可以实现。穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。下面来看看git log 和 git reflog的使用区别

(1)git log命令

git log命令可以显示当前分支所有提交过的版本信息,不包括已经被删除的 commit 记录和reset的操作。(注意: 只是当前分支操作的信息)。例如下面这个例子: 先在dev_test1分支上修改一次文件,并commit标记提交信息;然后再修改一次文件,并commit标记提交信息;通过git log查到提交的信息如下。

直接使用git log显示的信息太繁琐,可以加上参数 --pretty=oneline 只会显示版本号和提交时的备注信息,这样阅读起来更友好得多。

#命令
git reflog --pretty=oneline

假如现在发现上面的第二次修改提交的代码有问题,需要将代码回滚到第一次提交的版本上,就可以使用git log查询commit_id来进行回滚。如下操作:

#如上图,使用 git reset --hard xxxx 回滚代码后,再使用git log查询提交的信息时,已经看不到被删除的commitid(没有第一次修改的信息)。

到此就实现了git的HEAD穿梭到历史版本上,完成代码的回滚,但是会存在一个问题:假如使用 git reset --hard回滚代码后,发现回滚错了,需要还原本次的回滚(即 git的HEAD需要重返未来),但此时再使用git log来查询commit_id时,会发现查询不到已经被reset的操作版本号了,无法重返未来。解决这个问题就需要用git reflog命令。

(2)git reflog命令

git reflog命令可以查看所有分支的所有操作记录信息(包括已经被删除的 commit 记录和 reset 的操作)。例如:执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,这样我们就可以买后悔药,恢复到被删除的那个版本。

#如上图,即使使用reset回滚代码后,用git reflog可以看到被删除的commitid。

git reflog还有个作用就是:可以查看所有分支的所有操作记录信息。如下图操作是:从dev_test1分支上切到dev_test2分支上修改bug后commit提交,再切换dev_test1进行开发,此时在dev_test1分支上能看到dev_test2分支的提交记录。

总结:git log 和 git reflog的最大区别是能不能查询到被删除的 commit 记录和 reset 的操作记录,log不能,而reflog可以;所以以后要买后悔药就去找reflog。

 

 

                                                                                                                                              2021年03月13号午   于北京记

 

  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值