git reflog 和 git log 的详解和区别

news2024/9/21 1:07:54

在这里插入图片描述

文章目录

      • 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.coloradmin.cn/o/2146993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rasa对话模型——做一个语言助手

1、Rasa模型 1.1 模型介绍 Rasa是一个用于构建对话 AI 的开源框架&#xff0c;主要用于开发聊天机器人和语音助手。Rasa 提供了自然语言理解&#xff08;NLU&#xff09;和对话管理&#xff08;DM&#xff09;功能&#xff0c;使开发者能够创建智能、交互式的对话系统。 1.2…

JavaScript 基础 - 第20天_Node.js模块化

文章目录 Day02_Node.js模块化目录学习目标01.模块化简介目标讲解小结 02.ECMAScript标准-默认导出和导入目标讲解小结 03.ECMAScript标准-命名导出和导入目标讲解小结 04.包的概念目标讲解小结 05.npm软件包管理器目标讲解小结 06.npm安装所有依赖目标讲解小结 07.npm全局软件…

计算机领域CCF推荐期刊A/B/C类全目录

计算机领域CCF推荐期刊 最新在检的【自动化与控制系统】的64本SCI期刊最新影响因子、期刊分区、自引率 CCF-A类 CCF-B类 CCF-C类 更多期刊解析干货&#xff0c;移步公众号【Unionpub学术】 计算机领域CCF推荐期刊A/B/C类全目录&#xff08;附excel下载&#xff09;

3.使用 VSCode 过程中的英语积累 - Selection 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

多线程篇六

多线程篇六 如笔者理解有误欢迎交流指正~⭐ 什么是单例模式&#xff1f; 单例模式是最常见的 设计模式. 顾名思义&#xff0c;单例模式指的就是单个实例的模式.&#xff08;针对某些类只能使用一个对象的场景【如MySQL、JDBC、DataSource】&#xff09; 设计模式 设计模式是…

CentOS7.9环境上NFS搭建及使用

Linux环境NFS搭建及使用 1. 服务器规划2. NFS服务器配置2.1 主机名设置2.2 nfs安装2.2.1 repo文件替换2.2.2 NFS服务安装 2.3 nfs配置2.4 服务查看2.5 资源发布2.6 配置nfs服务开机自启2.7 端口开放 3.应用服务器配置3.1 主机名设置3.2 nfs安装3.2.1 repo文件替换3.2.2 NFS服务…

Vue学习记录之五(组件/生命周期)

一、组件 在每一个.vue文件可以看作是一个组件&#xff0c;组件是可以复用的&#xff0c;每个应用可以看作是一棵嵌套的组件树。 在Vue3中&#xff0c;组件导入以后即可直接使用。 二、组件的生命周期 生命周期就是从诞生(创建)到死亡(销毁) 的过程。 Vue3 组合式API中(se…

Java中的事务管理

1.1 事务管理 1.1 事务回顾 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功&#xff0c;要么同时失败。 怎么样来控制这组操作&#xff0c;让这组操…

力扣最热一百题——合并两个有序链表

目录 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;比大小放入 Java写法&#xff1a; 运行时间以及复杂度 C写法&#xff1a; 运行时间以及复杂度 总结 题目链接&#xff1a…

Qt/C++事件过滤器与控件响应重写的使用、场景的不同

在Qt/C中&#xff0c;事件过滤器和控件响应重写是两种用于捕获和处理鼠标、键盘等事件的机制&#xff0c;它们的用途和使用场景不同&#xff0c;各有优劣。下面详细介绍它们的区别、各自适用的场景、以及混合使用的场景和注意事项。 1. 事件过滤器&#xff08;Event Filter&…

JavaScript 可选链操作符:深度解读与实战应用( JS 可选链操作符)

前言 在JavaScript开发中&#xff0c;我们经常会遇到访问嵌套对象属性的需求。然而&#xff0c;处理深层嵌套对象时&#xff0c;属性可能为 undefined 或 null&#xff0c;直接访问这些属性时会抛出错误。为了解决这种问题&#xff0c;JavaScript在ES2020中引入了一项新特性—…

104.游戏安全项目-基址的技术原理-基址的本质

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信…

【初阶数据结构】一文讲清楚 “堆” 和 “堆排序” -- 树和二叉树(二)(内含TOP-K问题)

文章目录 前言1. 堆1.1 堆的概念1.2 堆的分类 2. 堆的实现2.1 堆的结构体设置2.2 堆的初始化2.3 堆的销毁2.4 添加数据到堆2.4.1 "向上调整"算法 2.5 从堆中删除数据2.5.1 “向下调整”算法 2.6 堆的其它各种方法接口函数 3. 堆排序3.1 堆排序的代码实现 4. TOP-K问题…

主机和Docker容器之间的文件互传方法汇总

Docker渐渐成为前端的一个工具&#xff0c;它像一个通用包装&#xff0c;可以把各种环境包裹其中&#xff0c;从而实现跨设备的兼容。使用的过程中&#xff0c;往往会需要将本地的文件和docker容器内部的文件互传&#xff1a;将主机的文件传递给容器内&#xff0c;让里面的工具…

【LLM大模型】如何让大模型更好地进行场景落地?

自ChatGPT模型问世后&#xff0c;在全球范围内掀起了AI新浪潮。 有很多企业和高校也随之开源了一些效果优异的大模型&#xff0c;例如&#xff1a;Qwen系列模型、MiniCPM序列模型、Yi系列模型、ChatGLM系列模型、Llama系列模型、Baichuan系列模型、Deepseek系列模型、Moss模型…

sqli-lab靶场学习(二)——Less8-10(盲注、时间盲注)

Less8 第八关依然是先看一般状态 http://localhost/sqli-labs/Less-8/?id1 然后用单引号闭合&#xff1a; http://localhost/sqli-labs/Less-8/?id1 这关的问题在于报错是不显示&#xff0c;那没办法通过上篇文章的updatexml大法处理。对于这种情况&#xff0c;需要用“盲…

从 InnoDB 到 Memory:MySQL 存储引擎的多样性

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;MySQL学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; &#x1f680;前言 &#x1f525…

PSINS,GNSS速度与SINS滤波的MATLAB代码

文章目录 程序说明主要特点适用范围获取方式运行截图 程序说明 基于PSINS工具箱的GNSS和SINS滤波的MATLAB代码&#xff0c;观测量为GNSS的三轴速度。 专为工程师和研究人员设计&#xff0c;助您轻松实现高精度的导航和定位。 主要特点 高精度滤波算法&#xff1a;结合PSINS和…

内存dump文件分析

目录 dumpsneak攻击步骤&#xff1a; dump 打开Volatility工具目录&#xff0c;C:\Users\Administrator\Desktop\应急工具集\volatility 打开运行输入volatility.exe -f 文件 imageinfo&#xff08;花费比较长的时间&#xff0c;对于这个mem文件&#xff0c;可以使用Win2012…

【C++初阶】vector模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…