发布于2026-07-16 阅读(0)
扫一扫,手机访问
文件突然不见了,大部分人的第一反应是赶紧翻 commit 记录。翻来翻去,就算找到了也费半天劲——其实,一条 git log 就能搞定的事,没必要搞得那么复杂。

git log 这命令,说到底是三个东西的组合:在哪个范围内找、按什么条件过滤、用什么格式输出。把这三块拼对了,几条命令就能精准定位。
先看看它的骨架:
git log[过滤参数] [输出参数] --
输出内容一多,git log 默认会走 less 分页。按 j/k 上下滚动(大多数终端也支持鼠标滚轮),看够了按 q 退出。
| 参数 | 说明 |
|---|---|
--all | 遍历所有分支和 tag,兜底用的 |
| 只看指定分支,比 --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 可能查不到 |
--
-- 后面跟路径,用来区分参数和文件名,建议始终写上。支持 glob 通配,但不同 shell 行为有差异,用通配符时注意加引号。
** 匹配任意层级目录,当你记不清文件具体在哪个子目录时特别好用:
# 只记得文件在 cdn 目录下某处,不知道完整路径 git log --name-status "**/cdn/**/axios.min.js"
这条命令会匹配所有含 cdn 的路径,比如 src/cdn/v3/axios.min.js 或 assets/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
文件消失了,按这个顺序查,效率最高:
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
文件“消失”不一定是被删了,常见情况有三种:被 D 标记删除、被 R 重命名/移目录、被 merge 覆盖(普通 log 看不到,要加 --full-history)。
千万别一条条翻 commit。记住:--name-status + --diff-filter + -S 才是正确姿势。
知道文件名就用路径查,不知道路径就用 *filename 通配,连文件都不确定就用 -S 搜代码片段——这几种方法组合下来,基本没有找不到的东西。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8