为什么git有些commit记录,只有git reflog可以看到,git log看不到?

在这里插入图片描述

文章目录

      • 原因分析
        • 1. `git log` 只能显示 **可达的** 提交
        • 2. `git reflog` 记录所有引用的变更
      • 常见导致 `git log` 看不到提交的原因
        • 1. `git reset` 操作
        • 2. `git rebase` 操作
        • 3. 分支删除
        • 4. `git commit --amend`
        • 5. 垃圾回收(GC)*
      • 如何恢复 `git log` 看不到的提交?
      • 总结

在 Git 中,有些提交记录只能通过 git reflog 查看,而 git log 无法显示。这种情况通常是因为提交历史已经发生了某种形式的“变更”,导致这些提交不再是当前分支或其他引用(如标签、远程分支)的可达提交。

原因分析

1. git log 只能显示 可达的 提交

git log 的工作机制是基于 可达性(reachability)原则。它只会显示从当前分支 HEAD 或其他引用(如标签、远程分支)可达的提交。所谓“可达”,指的是从某个提交开始,通过提交的父子关系可以沿链条一直追溯到该提交。

  • 如果一个提交从当前分支的链条上“消失”了(例如通过 git resetgit rebase 等操作导致提交链被重写或分支被删除),那么这些提交将不再被视为“可达”。
  • git log 不会显示这些提交,因为它只展示当前分支上的提交历史。
2. git reflog 记录所有引用的变更

git reflog 不同,它记录的是 本地引用(HEAD、分支等)的所有变化,无论提交是否可达。因此,git reflog 可以看到很多“隐藏”的提交,包括被 git resetgit rebase 覆盖掉的提交、误操作后丢失的提交,甚至是分支被删除后的提交。

只要你在本地进行过操作,git reflog 会记录:

  • 提交、合并、拉取等操作。
  • 分支的切换(checkout)。
  • 重置(reset)或变基(rebase)。
  • HEAD 指针的移动。

即便你删除了一个分支或者重置了当前分支,git reflog 依然能显示这些操作的历史。

常见导致 git log 看不到提交的原因

1. git reset 操作

git reset 是一种常用的操作,用于回滚分支到某个特定的提交。它有三种模式:--soft--mixed--hard。其中,git reset --hard 不仅会回滚分支指针,还会重置工作目录。

如果你使用了 git reset --hard 回退到某个较早的提交,那么中间的提交将不再被当前分支所引用,也就是说,这些提交就 不可达 了。在 git log 中你将看不到这些提交,但 git reflog 依然记录了它们。

示例:

git reset --hard HEAD~3  # 回滚到3个提交之前

在执行这个操作后,最近的 3 次提交虽然丢失了,但可以通过 git reflog 找回。

2. git rebase 操作

git rebase 是一个用于重写提交历史的操作,它会将提交重新应用到新的基点上。过程中,原有的提交会被替换为新的提交,这样就导致了原来的提交从分支历史中“消失”。

即使 git log 不再显示这些被替换的提交,它们仍然会保留在 git reflog 中,直到这些提交被垃圾回收(GC)。

3. 分支删除

当你删除一个分支时,该分支上最后的提交不再被任何引用指向,导致这些提交成为“悬空”提交(dangling commit)。这些提交虽然无法在 git log 中看到,但在 git reflog 中,分支的删除和之前的提交历史仍然可以被追踪。

示例:

git branch -d feature_branch

删除 feature_branch 后,你不能再通过 git log 看到该分支的提交记录,但 git reflog 仍然会记录你删除该分支的操作。

4. git commit --amend

使用 git commit --amend 修改最近一次提交时,实际上会创建一个新的提交,原来的提交被替换掉。git log 只能显示修改后的提交,而 git reflog 可以看到原始提交及修改过程。

5. 垃圾回收(GC)*

Git 的垃圾回收机制(git gc)会清理那些没有被引用且过期的对象。当一个提交没有任何分支、标签等引用指向它时,经过一段时间后,这些提交可能会被垃圾回收从 Git 数据库中删除。不过在被 GC 删除之前,git reflog 仍然能看到这些提交。

如何恢复 git log 看不到的提交?

如果你在 git log 中看不到某个提交,但它在 git reflog 中依然存在,你可以通过以下方法恢复这些提交:

  1. 使用 git reset 恢复到某个提交

    • git reflog 中找到想要恢复的提交哈希值。
    • 然后使用 git resetgit checkout 恢复。

    例如:

    git reflog
    # 找到需要恢复的提交,假设是 abc1234
    git reset --hard abc1234
    
  2. 创建一个新的分支指向该提交
    如果你不想影响当前的分支,可以创建一个新的分支指向丢失的提交:

    git branch recovered-branch abc1234
    

    这样你就能在新的分支上查看并操作该提交的历史。

总结

  • git log 只显示当前分支上的 可达提交,即有分支或标签引用的提交。
  • git reflog 记录了所有本地引用(如 HEAD)的变化,能够显示 git log 看不到的提交,尤其是那些通过 resetrebase、分支删除等操作被“丢失”的提交。
  • 可以通过 git reflog 找到丢失的提交,并通过 git reset 或创建新分支来恢复这些提交。

git reflog 是一个非常有用的工具,特别是在你需要恢复意外丢失的提交时。


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库系统基础概述

文章目录 前言一、数据库基础概念 1.数据库系统的组成2.数据模型3.数据库的体系结构二、MySQL数据库 1.了解MySQL2.MySQL的特性3.MySQL的应用场景总结 前言 MySQL数据库是一款完全免费的产品,用户可以直接从网上下载使用,不用花费任何费用。这点对于初学…

多语言长文本 AI 关键字提取 API 数据接口

多语言长文本 AI 关键字提取 API 数据接口 AI / 文本 专有模型极速提取 多语言长文本 / 实时语料库。 1. 产品功能 支持长文本关键词提取;多语言关键词识别;基于 AI 模型,提取精准关键词;全接口支持 HTTPS(TLS v1.0 …

CentOS7更换阿里云yum更新源

目前CentOS内置的更新安装源经常报错无法更新,或者速度不够理想,这个时候更换国内的镜像源就是一个不错的选择。 备份内置更新源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下载阿里云repo源(需要系统…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)

接口文档: https://apifox.com/apidoc/shared-26c67aee-0233-4d23-aab7-08448fdf95ff/api-93850835 接口根路径: http://big-event-vue-api-t.itheima.net 本项目的技术栈 本项目技术栈基于 ES6、vue3、pinia、vue-router 、vite 、axios 和 element-plus http:/…

LeetCode 每周算法 6(图论、回溯)

LeetCode 每周算法 6(图论、回溯) 图论算法: class Solution: def dfs(self, grid: List[List[str]], r: int, c: int) -> None: """ 深度优先搜索函数,用于遍历并标记与当前位置(r, c)相连的所有陆地&…

HTML讲解(二)head部分

目录 1. 2.的使用 2.1 charset 2.2 name 2.2.1 describe关键字 2.2.2 keywords关键字 2.2.3 author关键字 2.2.4 http-equiv 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化&#x…

暴力枚举算法

《啊哈&#xff01;算法》学习笔记 本博客的题目仅用暴力枚举&#xff0c;并不一定是最好的解法&#xff0c;主要是了解枚举算法 例题一&#xff1a;两方框奥数 在两个方框内填入相同的数字使得等式成立&#xff1a; 代码如下&#xff1a; for(i1;i<9;i) {if((i*103)*652…

yolov8模型在Xray图像中关键点检测识别中的应用【代码+数据集+python环境+GUI系统】

yolov8模型在X yolov8模型在Xray图像中关键点检测识别中的应用【代码数据集python环境GUI系统】 1.背景意义 X射线是一种波长极短、穿透能力极强的电磁波。当X射线穿透物体时&#xff0c;不同密度和厚度的物质会吸收不同程度的X射线&#xff0c;从而在接收端产生不同强度的信号…

Python办公自动化教程(003):PDF的加密

【1】代码 from PyPDF2 import PdfReader, PdfWriter# 读取PDF文件 pdf_reader PdfReader(./file/Python教程_1.pdf) pdf_writer PdfWriter()# 对第1页进行加密 page pdf_reader.pages[0]pdf_writer.add_page(page) # 设置密码 pdf_writer.encrypt(3535)with open(./file/P…

Google 扩展 Chrome 安全和隐私功能

过去一周&#xff0c;谷歌一直在推出新特性和功能&#xff0c;旨在让用户在 Chrome 上的桌面体验更加安全&#xff0c;最新的举措是扩展在多个设备上保存密钥的功能。 到目前为止&#xff0c;Chrome 网络用户只能将密钥保存到 Android 上的 Google 密码管理器&#xff0c;然后…

240912-设置WSL中的Ollama可在局域网访问

A. 最终效果 B. 设置Ollama&#xff08;前提&#xff09; sudo vim /etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target[Service] ExecStart/usr/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 Environme…

基于SpringBoot+Vue的时尚美妆电商网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目源码、Python精…

STM32 单片机最小系统全解析

STM32 单片机最小系统全解析 本文详细介绍了 STM32 单片机最小系统&#xff0c;包括其各个组成部分及设计要点与注意事项。STM32 最小系统在嵌入式开发中至关重要&#xff0c;由电源、时钟、复位、调试接口和启动电路等组成。 在电源电路方面&#xff0c;采用 3.3V 直流电源供…

(已解决)vscode如何传入argparse参数来调试/运行python程序

文章目录 前言调试传入参数运行传入参数延申 前言 以前&#xff0c;我都是用Pycharm专业版的&#xff0c;由于其好像在外网的时候&#xff0c;不能够通过VPN来连接内网服务器&#xff0c;我就改用了vscode。改用了之后&#xff0c;遇到一个问题&#xff0c;调试或者运行python…

解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据

导言 在数字化时代&#xff0c;数据安全已成为个人和企业面临的重大挑战之一。随着网络攻击手段的不断演进&#xff0c;勒索病毒的出现尤为引人关注。其中&#xff0c;.bixi、.baxia勒索病毒是一种新型的恶意软件&#xff0c;它通过加密用户的重要文件&#xff0c;迫使受害者支…

redis基本数据结构-sorted set

1. sorted set的简单介绍 参考链接&#xff1a;https://mp.weixin.qq.com/s/srkd73bS2n3mjIADLVg72A Redis的Sorted Set&#xff08;有序集合&#xff09;是一种数据结构&#xff0c;它是一个不重复的字符串集合&#xff0c;每个元素都有一个对应的分数&#xff08;score&…

科研入门学习

学习视频链接 为什么要读论文 读哪些论文 论文的分类 论文质量 如何找论文 根据领域大牛的名字进行搜索查看高水平论文引用的论文&#xff0c;高水平论文引用的论文很大程度也是高水平的论文 如何整理论文 如何读论文 读论文的困境 不同人群阅读差异 读论文的方式 论文的结构…

Day.js时间插件的安装引用与常用方法大全

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

BLE 设备丢包理解

前言 个人邮箱&#xff1a;zhangyixu02gmail.com在学习 BLE 过程中&#xff0c;总能听到 “丢包” 一词&#xff0c;但是我查阅资料又发现&#xff0c;有大佬说&#xff0c;ATT所有命令都是“必达”的&#xff0c;不存在所谓的“丢包”。而且我发现&#xff0c;在宣传 BLE 产品…

SpringBoot 整合 Caffeine 实现本地缓存

目录 1、Caffeine 简介1.1、Caffeine 简介1.2、对比 Guava cache 的性能主要优化项1.3、常见的缓存淘汰算法1.4、SpringBoot 集成 Caffeine 两种方式 2、SpringBoot 集成 Caffeine 方式一2.1、缓存加载策略2.1.1、手动加载2.1.2、自动加载【Loading Cache】2.1.3、异步加载【As…