Git查看已删除文件历史记录的方法

 更新时间:2026年04月22日 08:18:46   作者:KieranYin  
文件不见了,第一反应是翻 commit 记录,翻了半天没找到,即使翻到了也很费功夫——其实 git log 就可以解决,所以本文给大家介绍了Git查看已删除文件历史记录的方法,需要的朋友可以参考下

文件不见了,第一反应是翻 commit 记录。翻了半天没找到,即使翻到了也很费功夫——其实 git log 就可以解决。

git log 本质是三件事的组合:在哪个范围内找按什么条件过滤用什么格式输出。把这三块拼对了,几条命令就能定位。

命令结构

git log <branch | --all> [过滤参数] [输出参数] -- <path>

输出较多时,git log 默认用 less 分页显示。j / k 上下滚动(一般终端都支持鼠标滚动),q 退出。

参数说明

范围控制

参数说明
--all遍历所有分支和 tag,兜底用
<branch>只看指定分支,比 --all 干净
A..B只看 B 有、A 没有的提交,适合查当前分支的新增改动

过滤参数

--diff-filter=<字母> :按文件操作类型筛选

含义
A新增
M修改
D删除
R重命名

查删除用 --diff-filter=D,查重命名用 R,两者都不排除的话文件可能只是被移走了。

-S "text" :查某段文本"出现或消失"的提交。不知道文件路径,只记得某段代码时用这个。

-G "regex" :按正则匹配 diff 内容,比 -S 更宽松。

举个例子,如果某次提交把 baseUrl = "http://a.com" 改成了 baseUrl = "http://b.com"-S "baseUrl" 不会命中(因为该字符串总数没变),但 -G "baseUrl" 会命中(因为 diff 里有包含 baseUrl 的改动行)。

输出参数

参数说明
--name-status显示文件名 + 操作状态(A/M/D/R),最常用
--name-only只列文件名,不带状态
--summary显示 delete mode / create mode,直观看结构变化
--full-history不省略 merge 路径,文件被合并覆盖时普通 log 可能查不到

路径限定

-- <path>

-- 后面跟路径,区分参数和文件名,建议始终写上。支持 glob,但不同 shell 行为有差异,用通配符时注意加引号。

** 匹配任意层级目录,记不清文件具体在哪个子目录时很有用:

# 只记得文件在 cdn 目录下某处,不知道完整路径
git log --name-status "**/cdn/**/axios.min.js"

这条命令会匹配所有含 cdn 的路径,比如 src/cdn/v3/axios.min.jsassets/cdn/axios.min.js 都能命中。

常用命令

# 查当前分支是否删过指定文件(文件名模糊匹配)
git log --diff-filter=D --summary -- '*axios.min.js'
# 精确查某个分支的删除记录
git log main --diff-filter=D --summary -- '*axios.min.js'
# 全局查,所有分支上指定文件的删除记录
git log --all --diff-filter=D --summary -- '*axios.min.js'
# 查所有变更类型,判断是删除还是重命名
git log --all --name-status -- '*axios.min.js'
# 只知道代码片段,不知道文件在哪
git log -S "axios" -p --all
# 记得目录名但不知道完整路径,用 ** 匹配任意层级
git log --name-status "**/cdn/**/axios.min.js"
# 找到 commit 后看具体改了什么
git show <commit-id>

排查套路

文件消失了,按这个顺序查:

Step 1:先确认文件有没有出现过

git log --all --name-status -- '*axios.min.js'

Step 2:看输出里的状态标记

D   src/cdn/axios.min.js     # 被删了
R100 src/cdn/axios.min.js → src/lib/axios.min.js  # 被移走了

Step 3:找到 commit,看具体内容

git show <commit-id>

几个容易踩的坑

文件"消失"不一定是被删了,常见情况有三种:被 D 标记删除、被 R 重命名/移目录、被 merge 覆盖(普通 log 看不到,要加 --full-history)。

不要一条条翻 commit。--name-status + --diff-filter + -S 才是正确姿势。

知道文件名就用路径查,不知道路径就用 *filename 通配,连文件都不确定就用 -S 搜代码片段。

到此这篇关于Git查看已删除文件历史记录的方法的文章就介绍到这了,更多相关Git查看已删除文件历史内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Git的配置及文件传输方法图文详解

    Git的配置及文件传输方法图文详解

    这篇文章主要介绍了Git的配置及文件传输方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • WebSocket部署到服务器出现连接失败问题的分析与解决

    WebSocket部署到服务器出现连接失败问题的分析与解决

    这篇文章主要给大家介绍了关于WebSocket部署到服务器出现连接失败问题的分析与解决方法,文中给出了详细的介绍供大家参考学习,文末也给出了demo下载地址,需要的朋友们可以下载学习,下面随着小编来一起学习学习吧。
    2017-10-10
  • Git Submodule使用完整教程(小结)

    Git Submodule使用完整教程(小结)

    这篇文章主要介绍了Git Submodule使用完整教程(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • IDEA+Git+Gitlab使用详细教程

    IDEA+Git+Gitlab使用详细教程

    这篇文章主要介绍了IDEA+Git+Gitlab使用详细教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • git rebase -i合并多次提交的实现

    git rebase -i合并多次提交的实现

    这篇文章主要介绍了git rebase -i合并多次提交的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • git merge最简洁用法详解

    git merge最简洁用法详解

    git-merge 命令是用于从指定的 commit(s) 合并到当前分支的操作,本文重点给大家介绍git merge最简洁用法,感兴趣的朋友跟随小编一起看看吧
    2020-12-12
  • 基于域名的方式访问Istio服务网格中的多个应用程序的方法详解

    基于域名的方式访问Istio服务网格中的多个应用程序的方法详解

    这篇文章主要介绍了基于域名的方式访问Istio服务网格中的多个应用程序,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 详解git的分支与合并的两种方法

    详解git的分支与合并的两种方法

    这篇文章主要介绍了详解git的分支与合并的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 十分钟内学会 避免用户刷新导致重复POST提交

    十分钟内学会 避免用户刷新导致重复POST提交

    在Web应用中,采用POST提交信息是非常常见的,然而如果目标页面打开得太慢,用户就可能会刷新页面,这时候之前已经提交过的信息就会被重复提交。
    2009-08-08
  • 如何正确使用开源项目?

    如何正确使用开源项目?

    开源项目广受大家喜爱,其实我们在使用开源项目的过程中有不少注意的事项,今天就来给大家介绍下如何正确的使用开源项目。需要的朋友可以参考一下
    2018-09-09

最新评论