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

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的精彩世界!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 本地git仓库配置远程仓库的地址
  • 如何在WordPress中添加事件Schema(分步指南)
  • 处理京东商品详情信息爬取中的验证码问题
  • 【基础算法总结】模拟篇
  • Java多线程大全
  • Oracle数据库中什么情况下需要使用游标
  • Hive自定义函数——简单使用
  • 【手机马达共振导致后主摄马达声音异常】
  • 2024自学手册——网络安全(黑客技术)
  • MyBatis-Plus代码生成器
  • Microsoft Edge 五个好用的插件
  • Flyway 校验机制
  • C# Winform调用控制台程序(通过Process类)
  • 使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库
  • Java语言程序设计基础篇_编程练习题**18.30 (找出单词)
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • flask接收请求并推入栈
  • gulp 教程
  • JavaScript 基本功--面试宝典
  • leetcode386. Lexicographical Numbers
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • pdf文件如何在线转换为jpg图片
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • spring boot 整合mybatis 无法输出sql的问题
  • spring boot下thymeleaf全局静态变量配置
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 搞机器学习要哪些技能
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 物联网链路协议
  • 学习笔记TF060:图像语音结合,看图说话
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #pragma multi_compile #pragma shader_feature
  • $jQuery 重写Alert样式方法
  • (2.2w字)前端单元测试之Jest详解篇
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (TOJ2804)Even? Odd?
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二)正点原子I.MX6ULL u-boot移植
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)nsfocus-绿盟科技笔试题目
  • ******之网络***——物理***
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net开发日常笔记(持续更新)