git reflog 和 git log 的详解和区别

在这里插入图片描述

文章目录

      • 1. `git log` 介绍
        • 基本用法:
        • 输出内容:
        • 常见选项:
        • `git log` 的局限性:
      • 2. `git reflog` 介绍
        • 基本用法:
        • 输出内容:
        • `git reflog` 输出字段:
        • 常见选项:
        • 主要用途:
        • 示例:
      • 3. `git reflog` 和 `git log` 的主要区别
        • 1. 作用范围不同:
        • 2. 用途不同:
        • 3. 持久性不同:
        • 4. 信息量不同:
      • 4. `git reflog` 和 `git log` 的结合使用
        • 示例:
      • 总结

git refloggit log 是 Git 中两个用于查看提交历史的命令,但它们有不同的作用和用途。下面详细解释这两个命令的区别以及它们各自的功能。

1. git log 介绍

git log 是 Git 中最常用的命令之一,用于查看 Git 仓库的提交历史记录。它会显示一系列与项目历史相关的提交对象(commit),包括提交的哈希值、作者信息、日期和提交消息等。默认情况下,git log 仅显示当前分支的提交历史记录。

基本用法:
git log
输出内容:
  • 提交哈希值 (commit hash): 每次提交对应一个唯一的 SHA-1 哈希值(例如:abc1234),可以用它来标识提交。
  • 提交作者 (Author): 提交代码的人。
  • 提交时间 (Date): 提交发生的时间。
  • 提交信息 (Message): 提交时的说明信息。
常见选项:
  • git log --oneline:以单行形式显示每个提交(只显示提交哈希的前几位和提交信息)。
  • git log --graph:图形化显示提交历史及分支、合并历史。
  • git log --since="2 weeks ago":查看自指定时间以来的提交。
  • git log --author="author name":查看特定作者的提交。
git log 的局限性:
  • 它只会显示提交历史中 可达的提交(reachable commits),即那些还与当前分支相关的提交记录。
  • 如果一个提交被 “丢弃”(比如被 git resetgit rebase 重写了历史,或者分支被删除),这些提交记录将不会出现在 git log 中。

2. git reflog 介绍

git reflog 的作用是记录 本地仓库 中的每一次 “引用”(reference)的变化,包括 HEAD、分支或其他引用的移动。即使某些提交在 git log 中不可见,git reflog 也能跟踪到它们。这使得 git reflog 成为一个强大的工具,特别是在需要恢复被重置的提交、恢复误删的分支或者解决其他复杂历史问题时。

基本用法:
git reflog
输出内容:

git reflog 会显示 HEAD 的历史变更记录。每当你执行了影响 HEAD 的操作,如提交(git commit)、重置(git reset)、检出分支(git checkout)、合并(git merge)、拉取(git pull)等,都会记录在 reflog 中。

git reflog 输出字段:
  • HEAD reference: 每个记录前面的数字是从最近到最远的 HEAD 移动记录的编号,如 HEAD@{0} 表示当前 HEAD 的位置,HEAD@{1} 是 HEAD 上一个位置。
  • 提交哈希值: 与 git log 一样,reflog 记录也包含提交的哈希值。
  • 操作记录: Reflog 会记录所有对 HEAD 的操作,显示出操作类型及其简要信息,比如 commit: updated some filesreset: moving to HEAD~1
常见选项:
  • git reflog show <branch>:查看特定分支的引用日志。
  • git reflog expire --expire=now --all:清除过期的引用日志。
  • git reflog delete:手动删除引用日志中的某些记录。
主要用途:
  • 恢复丢失的提交:如果你用 git reset --hard 移动了 HEAD 并丢失了一些提交,可以通过 git reflog 找到旧的提交哈希值并使用 git resetgit checkout 将它恢复。
  • 恢复误删除的分支:当分支被误删除时,reflog 可以帮助你找到分支的最后一次提交,从而恢复该分支。
  • 查找被 rebasemerge 覆盖的提交git reflog 仍然会跟踪到被变基或合并覆盖的历史记录。
示例:

假设你误用了 git reset --hard 并丢失了一些提交。可以通过以下步骤恢复丢失的提交:

git reflog

找到你想恢复的提交哈希(例如 abc1234),然后使用:

git reset --hard abc1234

3. git refloggit log 的主要区别

1. 作用范围不同:
  • git log 只显示提交历史,它反映了当前分支的提交链条上所有 可达的提交,但不记录对 HEAD 或其他引用的移动。
  • git reflog 不仅显示提交历史,还记录了所有对分支引用(HEAD、refs、branches)的改变,包括那些已丢失或不可见的提交
2. 用途不同:
  • git log 用于查看 项目的提交历史,帮助你理解项目如何演变。
  • git reflog 用于 恢复误操作、调试复杂的提交问题,比如查找丢失的提交、分支或者撤销误操作。
3. 持久性不同:
  • git log 显示的提交历史是持久的,只要提交对象没有被垃圾回收(git gc)或删除,它们就会一直存在。
  • git reflog 是临时的,reflog 记录会在默认情况下保存 90 天,然后会被清理掉(可以通过配置更改这个时间)。
4. 信息量不同:
  • git log 的信息量更集中于提交,主要显示提交信息。
  • git reflog 记录了对 HEAD 位置的所有操作,所以它的信息量更多,包括每次检出、提交、重置、变基等操作的历史。

4. git refloggit log 的结合使用

git loggit reflog 可以配合使用。比如,如果你想通过 reflog 找回一个丢失的提交,可以先用 git reflog 找到相应的提交哈希值,再用 git log 来确认该提交的详细信息。

示例:

假如你想查找并恢复一个被 reset 掉的提交,你可以:

git reflog
# 查找到提交的哈希值,假设是 abc1234
git log abc1234
# 查看该提交的详细信息,确认后恢复该提交
git reset --hard abc1234

总结

  • git log 用于查看分支的提交历史,适合了解项目的历史变化情况,显示所有可达的提交。
  • git reflog 记录本地仓库中所有对 HEAD 的引用变更,适合在复杂操作失误或分支历史混乱时进行恢复与调试,能够追踪到即使已经丢失的提交。

两者各有用途,在 Git 日常使用中,git log 适合做提交历史查看,而 git reflog 则是不可或缺的“后悔药”。


结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427077.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP协议及相关特性

IP协议负责地址管理和路由选择。它的组成为&#xff1a; 接下来我们将对其中较重要的部分进行介绍。 4位版本&#xff1a;这里的四位版本只有两个取值 分别为IPv4和IPv6&#xff0c;这两个额分别为不同的IP协议&#xff0c;但是现在主流的还是IPv4但是近年来IPv6在中国的普及率…

【机器学习】OpenCV高级图像处理

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 OpenCV高级图像处理图像滤波线性滤波高斯滤波均值滤波双边滤波 非线性滤波中值滤…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector(模拟实现)

1.存储结构 https://cplusplus.com/reference/vector/vector/ namespace zone {template<class T> //需要模板class vector{public:private:iterator _start;iterator _finish;iterator _endofstorage;}; } 可见&#xff0c;vector内核是由三个指针实现的 2.默认成员函…

LabVIEW机械产品几何精度质检系统

随着制造业的发展&#xff0c;对产品质量的要求越来越高&#xff0c;机械产品的几何精度成为衡量其品质的重要指标。为了提高检测效率和精度&#xff0c;开发了一套基于LabVIEW的几何精度质检系统&#xff0c;该系统不仅可以自动化地进行几何尺寸的测量&#xff0c;而且能实时分…

高校宿舍电费管理怎么实现

1引言 在大学的象牙塔里&#xff0c;宿舍不仅是学子们休憩的港湾&#xff0c;更是青春记忆的重要载体。然而&#xff0c;随着科技的发展与生活习惯的改变&#xff0c;宿舍内的电器设备日益增多&#xff0c;电费管理成为了一个不可忽视的问题。本文将从高校宿舍电费管理的现状出…

ORA-28032 Your password has expired and the database is set to read only

做个记录。 non-cdb 处于只读状态&#xff0c;CDB创建到noncdb的dblink后产生的报错&#xff0c;dblink可以成功创建&#xff0c;但无法连接到non-cdb。 解决&#xff1a;一开始以为是cdb的密码不正确&#xff0c;mos上找到问题&#xff0c;non-cdb的密码过期了&#xff0c;并且…

【软件测试】测试的岗位有哪些?

求职入口有很多&#xff1a;相关企业官网、求职软件、校招、公众号等等。 下面就在某招聘网站上看看测试有哪些岗位吧&#xff01; 测试只是一个统称&#xff0c;在测试下面还有很多细分岗位。 但是测试的岗位主要分为以下俩个方面&#xff1a; 软件测试开发工程师&#xff…

3.ChatGPT在教育领域的应用:教学辅助与案例分享(3/10)

ChatGPT在教育领域的应用&#xff1a;教学辅助与案例分享 引言 在21世纪的教育领域&#xff0c;技术革新正以前所未有的速度改变着传统的教学和学习方式。随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;教育技术&#xff08;EdTech&#xff09;领域迎来了新的…

Vm软件安装_链接相机

工业相机的驱动连接 下载安装MVS MVS 客户端支持安装在 Windows XP/7/10 32/64bit&#xff0c;Linux 32/64bits 以及MacOS64bits操作系统上。本文以 Windows 系统为例进行介绍。 具体操作步骤如下&#xff1a; 请从海康机器人官网&#xff08;www.hikrobotics.com&#xff0…

前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)

图形验证码是网站安全防护的重要组成部分&#xff0c;能有效防止自动化脚本进行恶意操作&#xff0c;如何实现一个简单的运算图形验证码&#xff1f;本文封装了一个简单的js类&#xff0c;可以用于生成简单但安全的图形验证码。它支持自定义验证码样式&#xff0c;包括字体大小…

硬件工程师笔试面试——保险丝

目录 10、保险丝 10.1 基础 保险丝原理图 保险丝实物图 10.1.1 概念 10.1.2 保险丝的工作原理 10.1.3 保险丝的主要类型 10.1.4 保险丝的选择和使用注意事项 10.2 相关问题 10.2.1 保险丝的额定电流和额定电压是如何确定的? 10.2.2 保险丝的熔断速度对电路保护有何…

Arthas thread(查看当前JVM的线程堆栈信息)

文章目录 二、命令列表2.1 jvm相关命令2.1.2 thread&#xff08;查看当前JVM的线程堆栈信息&#xff09;举例1&#xff1a;展示[数字]线程的运行堆栈&#xff0c;命令&#xff1a;thread 线程ID举例2&#xff1a;找出当前阻塞其他线程的线程 二、命令列表 2.1 jvm相关命令 2.…

USB摄像头视频流转RTSP流

一、VLC查看USB摄像头视频流原理&#xff1a; USB摄像头的工作原理与VLC播放其他视频文件类似&#xff0c;主要区别在于视频流的来源是实时捕获的&#xff0c;而不是预先录制的文件。如果使用VLC将USB摄像头的视频流作为RTSP服务器广播&#xff0c;需要进一步配置 二、VLC查看…

【machine learning-六-supervise learning之线性回归模型】

监督学习之线性回归模型 线性回归模型线性模型回归模型 如何使用线性模型实现智能化预测呢寻找数据训练模型输入、特征、目标、预测值、模型代价函数 线性模型是人工智能监督学习中最广泛的应用&#xff0c;所以有必要先学习一下这个基础模型&#xff0c;做好基石。 线性回归模…

Reactor介绍,如何从简易版本的epoll修改成Reactor模型(demo版本代码+详细介绍)

目录 Reactor demo​​​​​​​ 引入 比喻 修改代码 connection tcp_server ET模式 主逻辑 处理事件 运行结果 代码 完善功能 读取数据 运行结果 ​编辑 代码 处理数据 回指指针 如何处理写事件 引入 循环内 处理对写事件的关心 异常处理 代码 se…

C# 携手 7-Zip 命令行:大文件压缩的终极武器?

前言 嗨&#xff0c;大家好&#xff01; 今天咱们来聊聊如何用 C# 调用 7-Zip 命令行来压缩大文件&#xff0c;这是个既高效又稳定的好办法&#xff0c;亲测有效&#xff01; 在实际工作中&#xff0c;压缩文件几乎是家常便饭&#xff0c;但可惜的是&#xff0c;许多常用的方…

【科技论文写作与发表】论文分类

目录 一、实验性论文特点写作结构适用学科方向 二、报道性论文特点写作结构适用学科方向 三、理论性论文特点写作结构适用学科方向 一、实验性论文 通过科学实验获得的数据和结果进行详细阐述和分析&#xff0c;检验某一科学理论或假说。 特点 详细描述实验目的、实验设计、实…

ORM框架详解:为什么不直接写SQL?

想象一下&#xff0c;你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者&#xff0c;你可能会想&#xff1a;“我已经学会了SQL&#xff0c;为什么还要使用ORM框架呢&#xff1f;直接写SQL语句不是更简单、更直接吗&#xff1f;” 如…

Uniapp的alertDialog返回值+async/await处理确定/取消问题

今天在使用uniui的alertDialog时&#xff0c;想添加一个确定/取消的警告框时 发现alertDialog和下面的处理同步进行了&#xff0c;没有等待alaertDialog处理完才进行 查询后发现问题在于 await 关键字虽然被用来等待 alertDialog.value.open() 的完成&#xff0c;但是 alertDi…

前端mock了所有……

目录 一、背景描述 二、开发流程 1.引入Mock 2.创建文件 3.需求描述 4.Mock实现 三、总结 一、背景描述 前提&#xff1a; 事情是这样的&#xff0c;老板想要我们写一个demo拿去路演/拉项目&#xff0c;有一些数据&#xff0c;希望前端接一下&#xff0c;写几个表格&a…