当前位置: 首页 > news >正文

Git的使用教程(三)查看日志和版本回退

我们使用任何的版本管理工具,原因无外乎就是想要记录文件新增、修改、删除等相关操作,当我们修改文件出现错误的时候,可以及时回到没有出错的“备份”文件。当然Git作为优秀的版本管理工具这样的功能当然不能少,下面我们就来看下与版本管理相关的一些命令吧。

    命令:git log

    git log可以记录我们git commit操作(不会记录git add操作,如果你没有进行过一次git commit,那么git log的时候什么都不会显示),每次git commit都会产生一条记录,每条记录代表一次commit,一条记录共有四部分组成。

    

    commit:是一个由SHA1计算出来的非常大的数字,用十六进制表示,是此次操作的唯一标识符(每次commit的时候该值不会重复),我们可以通过它准确的找到此次提交操作,为恢复到该版本打下坚实的基础。

    Author: 提交该版本的作者以及该作者的邮箱

    在多人协作中,每个人都有可能对文件做出一些调整,如何区分是什么人做了这些调整呢,这就用到了Author。我们可以使用git config user.name和git config user.email来获取当前用户名和用户邮箱,如果没有设置或是需要调整,可以通过git config --global user.name "new name"来进行调整。设置Author很有必要,最好在git init之后就立刻设置,这样在你进行git commit的时候就能记录你设置的Author信息了。

    

    Date:提交的日期。

    最后:最后一行就是关于此次提交的说明,也就是我们git commit -m的内容了,这可以让我们更加清楚为什么做此次提交操作,为以后的版本恢复打下坚实基础。

    直接使用git log,会展示每次提交的详细的信息,但是当commit信息过多,亦或者我们不想要这么详细的信息的时候,此时我们就可以使用git log的另一种用法。

[plain]  view plain  copy
  1. git log --pretty=oneline  

变少了有某有,这样一屏下来就可以展示更多的commit信息了。
     命令:git reset
    git log只是帮我们记录了每次的提交操作,我们想要进行不同的版本切换,还需要用到git reset命令。在此之前,我们先多进行几次提交操作。准备工作做好了,正式开始吧。



     方法一:
[plain]  view plain  copy
  1. git reset --hard HEAD^  
git reset是版本回退命令,--hard是回退命令的一个参数,暂时不用深究它具体代表什么含义,只要记住这样操作可以达到我们回退的目的即可。前面的部分我们暂且把它当做是实现版本回退的一种固定格式,我们重点来说下HEAD^。在Git中,HEAD代表的是当前版本,拿上述例子来说就是"add four line",而加个^,就表示当前版本之前的版本,就是例子中“add third line”,每加一个^就表示更前的一个版本,例如HEAD^^就表示“add second line”这个版本,如果想要回到100个版本前,就需要100个^,当然回退的版本太靠前的话,光写^也是个麻烦事,还有,Git提供了另一种写法解决了这个问题。

     方法二:

[plain]  view plain  copy
  1. git reset --hard HEAD~1  
把HEAD^换成了HEAD~1,其中1代表回退几个版本,如果需要回退到10个之前的版本,只需要把HEAD~1改为HEAD~10即可,是不是比10个^方便了好多呢。看起来是方便了点,但是仍有不足,如果想要回退到某个版本的时候,岂不是还要查一下这个版本和当前版本之间的差。Git也考虑到了这个问题,因此提供了第三种方法供我们使用。

     方法三:
    
[plain]  view plain  copy
  1. git reset --hard 1e7fac4  
还记得刚才git log中提到的commit吗,此时我们就是把HEAD换成了commit。正是由于commit字串的唯一性,我们才能快速准确的回退到我们需要的版本,而不需要查找当前版本和切换版本之间的差值。关于--hard后面的这个字串,相信不少朋友还有疑问,下面小编就一一解答。
     疑问一:该字串从哪里来的?
    每次git commit的时候Git都会生成这样一个字串方便做版本管理,可以通过git log来查看每个版本具体commit字串值。
     疑问二:进行版本回退的时候如何填写该字串?
    其实这个并没有硬性的规定,经过小编测试,这个字串至少是4位,也就是说我们至少需要取commit字串的前4位(4位以下会报错)。其实输入的这个字串是为了确保Git能够准确的找到对应的版本,如果版本中有前4位重复的,那么我们就需要多增加一位,确保Git不会找错了。那么多少位适合呢?如果使用Git时间久了,就会发现,很多操作使用到这个commit的时候都会把它缩略为前7位,因此,我们也可以沿用,使用前7位作为默认位数,当然,如果前7位仍不唯一,就需要输入前8位了。

     命令:git reflog

    一次又一次的回退操作已经使得我们忘乎所以,不知不觉已经快回退到最初的版本了,但这时候我们又怀念起了新版本的好,想要回去,可是git log中已经没有新版本的任何足迹了,我们还回的去吗?答案是肯定的,凡走过必留下痕迹,Git也同样为我们留下了蛛丝马迹。

git reflog是Git提供给我们记录命令历史,commit和reset都在被记录之列。通过git reflog,我们发现了最后一次提交的commit的字串,有了它我们是不是可以找回最新的版本呢?抱着怀疑的态度我们进行了尝试,再看下git log,哇塞,居然回到了进行回退前的状态,这样一来我们岂不是可以自由徜徉在各个版本之间了。

相关文章:

  • Git的使用教程(四)工作区和暂存区
  • Git的使用教程(五)管理修改
  • Git本地分支与远程分支的追踪关系
  • Git-命令行-删除本地和远程分支
  • Git的使用教程(六)远程仓库
  • 如何去解决fatal: refusing to merge unrelated histories
  • QT跨目录编译及多工程集成(动态库的创建、引用及工程间相互依赖关系的pro文件编写方法)
  • Pro文件变量详细说明
  • 浅谈 qmake 之 pro、pri、prf、prl文件
  • android实现点击两次返回键实现退出功能
  • Qt共享内存的使用
  • Qt for android 弹出Detected problems with app native libraries (please consult log for detail): 解决方案
  • qml去掉标题栏后实现窗口拖动
  • Qt for android 在安卓上面运行app启动闪黑屏的解决方法
  • Qt 中文及字符混合加密,双重加密解密
  • 11111111
  • docker python 配置
  • ESLint简单操作
  • JavaScript的使用你知道几种?(上)
  • java多线程
  • Java反射-动态类加载和重新加载
  • mysql外键的使用
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 从0到1:PostCSS 插件开发最佳实践
  • 基于web的全景—— Pannellum小试
  • 利用DataURL技术在网页上显示图片
  • 目录与文件属性:编写ls
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 自制字幕遮挡器
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • #include
  • #stm32整理(一)flash读写
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十六)一篇文章学会Java的常用API
  • (一)Java算法:二分查找
  • (转)http协议
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)视频码率,帧率和分辨率的联系与区别
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .NET下ASPX编程的几个小问题
  • .Net小白的大学四年,内含面经
  • .net知识和学习方法系列(二十一)CLR-枚举
  • ;号自动换行
  • @RequestMapping处理请求异常
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [20171102]视图v$session中process字段含义
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BZOJ4010]菜肴制作
  • [codeforces] 25E Test || hash
  • [Foreman]解决Unable to find internal system admin account