资讯动态

TIL 项目实践:用 `git show --name-only` 只列文件名、跳过 diff 输出

发布时间:2026/10/5 1:49:00 来源:尧图企业网站定制
文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载本篇技术指南围绕 TILToday I Learned仓库中记录的 Git 技巧展开核心讲解如何用git show的--name-only标志在查看某个提交commit时只输出涉及的文件列表、彻底省略冗长的 diff 内容。读完本文你将掌握--name-only与--name-status、--stat、--pretty的配合用法并能在分支对比、时间范围统计、脚本自动化等场景中灵活套用。一、问题背景git show默认输出为何冗长git show会针对给定的引用reference列出其全部变更内容包括每个文件的完整 diff。这对大多数情况是有用的但当提交涉及的文件多、改动大时输出会迅速膨胀——大段的大块hunk代码挤满终端而你想看的其实只是这次提交动了哪些文件。TIL 仓库中的原文给出了典型场景只想快速扫一眼某个提交改动了哪些路径而不关心具体改了什么内容。二、核心操作git show HEAD --name-only给git show加上--name-only标志命令就会抑制 diff 细节只输出变更涉及的文件名列表。这是 git/list-filenames-without-the-diffs.md 记录的核心用法$ git show HEAD --name-only commit c563bafb511bb984c4466763db7e8937e7c3a509 Author: jbranchaud jbranchaudgmail.com Date: Sat May 16 20:56:07 2015 -0500 This is my sweet commit message app/models/user.rb README.md spec/factories/user.rb从输出可以看到提交头部SHA、作者、日期、提交信息依然保留方便你定位这次提交diff 内容被完全省略文件路径按提交内出现的顺序逐一列出每个路径独占一行。这种提交元数据 纯文件列表的输出格式非常适合快速回顾提交、做代码审查前的文件级预判或者给后续脚本提供待处理路径。三、彻底去掉头部组合--pretty得到纯净文件列表默认输出里还有提交头部信息。如果你的目标是纯文件路径例如喂给脚本做进一步处理可以配合--pretty把头部置空。这一组合在 git/list-just-the-files-involved-in-a-commit.md 中也有记载$ git show --pretty --name-only SHA此时输出就只有文件路径一行一个直接可以管道交给xargs、awk、while read等后续处理。注意 TIL 仓库的惯例是使用SHA占位符表示任意提交哈希完整或缩写均可实际使用时替换成真实哈希即可。四、姊妹标志--name-status与--stat除了--name-onlygit show还有几个相近标志按需取舍标志输出内容适用场景--name-only仅文件名只需要路径清单最简洁--name-status文件名 状态字母A/M/D/R 等需要区分新增、修改、删除、重命名--statdiffstat 直方图每个文件增删行数 汇总需要每个文件改了多少的量化概览其中--stat的输出形态取自 git/show-the-diffstat-summary-of-a-commit.md大致如下$ git show 8a1f36a1ce --stat commit 8a1f36a1ce71d708d1d82afbc2191de9aefba021 Author: Derek Parker derek.parkercoreos.com Date: Wed Jan 27 23:47:04 2016 -0800 dlv: Flag to print stacktrace on trace subcommand cmd/dlv/main.go | 45 ----------------------------------- terminal/command.go | 7 -- 2 files changed, 15 insertions(), 37 deletions(-)三者的共同点都是只看文件清单、不看正文 diff只是信息粒度不同。日常快速浏览用--name-only最省心想给提交写总结、评估改动量时--stat更有价值。五、按路径模式筛选只列出匹配特定模式的文件git show还支持在命令末尾追加 pathspec 模式将输出限定在符合条件的文件上。TIL 仓库的 git/show-changes-for-files-that-match-a-pattern.md 展示了两种写法# 只看 CSS 文件的变更 $ git show abcd1234 *.css # 只看某个目录下的变更 $ git show abcd1235 src/css把模式与--name-only组合例如git show HEAD --name-only -- *.md就能在一个大型提交中快速定位这次改了哪些 Markdown 文件。这在 TIL 这类以 Markdown 笔记为主体的仓库里尤为实用。六、同一思路的横向扩展git diff --name-only--name-only并不只属于git show它同样适用于git diff、git log等命令而且这个思路可以解决更多问题。6.1 对比两个分支的文件差异TIL 仓库的 git/list-all-files-changed-between-two-branches.md 记录在当前特性分支的 HEAD 上想看与master分支同步之后都改了哪些文件直接写$ git diff --name-only master约定是把较旧的分支写在前面、当前分支写在后表达从原始状态演化到当前状态的方向。除了分支名任何 git 引用tag、SHA、reflog 记法都可以参与对比。6.2 按时间范围统计新增文件TIL 仓库的作者曾用 git 统计自己一年内写了多少篇笔记——每一篇 TIL 都是一个受版本控制的 Markdown 文件。核心命令记录在 git/list-all-files-added-during-span-of-time.md# 2024 年全年新增的所有文件 $ git diff --diff-filterA --name-only HEAD{2024-01-01}..HEAD{2025-01-01} # 只统计其中的 Markdown 文件 $ git diff --diff-filterA --name-only HEAD{2024-01-01}..HEAD{2025-01-01} -- *.md # 再进一步限定到 postgres 目录 $ git diff --diff-filterA --name-only HEAD{2024-01-01}..HEAD{2025-01-01} -- postgres/*.md这里的关键要素--diff-filterA只保留状态为Added新增的文件--name-only剥离 diff 细节只留路径HEAD{日期}gitrevisions 语法中的日期后缀指向该引用在指定时刻的历史取值..双点区间给出对比的起止边界末尾的-- 模式pathsoc 过滤。由于输出是纯路径还可以继续管道给awk等工具做二次加工原文示例中就用awk拼出了每个文件的访问链接。6.3 配合--no-pager让输出留在终端当文件名列表较长时git 可能用less之类的 pager 分页显示看完后输出即消失不利于回滚终端引用。TIL 仓库的 git/turn-off-the-output-pager-for-one-command.md 建议对一次性命令使用--no-pager$ git --no-pager show --name-only HEAD这样完整列表会直接打印到终端之后可以随意上下滚动查阅。七、脚本场景从 porcelain 切换到 plumbing 命令如果你写的是可复用脚本而非手工操作TIL 仓库提醒git show属于面向终端用户的 porcelain 命令输出格式并非为程序消费而设计。更稳妥的做法是使用 plumbing 层级的git diff-tree。同样是 git/list-just-the-files-involved-in-a-commit.md 给出的形式$ git diff-tree --no-commit-id --name-only -r SHA各标志含义--no-commit-id不输出提交 ID我们只想要文件--name-only抑制其他文件信息只显示文件名-r递归进入子树输出完整路径而非仅顶层目录名。它与git show的对应关系为git show --pretty --name-only SHA但 plumbing 版更适合脚本化调用。这一思路与 git/list-untracked-files-for-scripting.md 中脚本场景优先选 plumbing 命令如git ls-files --others --exclude-standard的取舍原则一脉相承。八、历史视角git whatchanged与git log --name-only从历史角度看git 还保留着git whatchanged这个旧命令它以原始格式展示每个提交涉及的文件见 git/what-changed.md。其 man page 明确建议新用户改用git log——而git log --name-only正是把--name-only思路推广到遍历整个提交历史的写法相关用法见 git/show-all-commits-for-a-file-beyond-renaming.md 中的git log --name-only示例。由此可见--name-only是贯穿show、diff、log、diff-tree的一组统一输出开关掌握了它就能在不同命令间灵活切换。九、小结与实战提示回到 git/list-filenames-without-the-diffs.md 的核心结论当git show的完整输出显得过于冗长时--name-only是你只想要文件清单时的首选标志。几条实战提示快速查看当前提交动了哪些文件git show HEAD --name-only脚本消费纯路径git show --pretty --name-only SHA或改用git diff-tree --no-commit-id --name-only -r SHA分支/时间范围统计git diff --name-only refA..refB可叠加--diff-filterA与 pathspec 模式需要量化概览时选--stat需要区分增删改时选--name-status输出过长时用git --no-pager让完整列表直接打印到终端。需要深入了解细节时可查阅各命令的手册man git-show、man git-diff、man git-diff-tree、man git-log。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐Git TIL用 git diff --name-only 列出两个分支之间变更的所有文件Git TIL用 git diff name only 列出两个分支之间变更的所有文件 本篇指南聚焦于 Git 中的一个高频实战场景如何快速、干净地列出两个文档教程知识库Google Compute Engine v1small 最小化 API为客户端库测试而生的 GCE 接口定义剖析Google Compute Engine v1small 最小化 API为客户端库测试而生的 GCE 接口定义剖析 本文以 googleapis 仓库中 g文档教程知识库使用 Git Pathspec 按文件模式过滤 git show 输出只看指定文件或目录的提交改动使用 Git Pathspec 按文件模式过滤 git show 输出只看指定文件或目录的提交改动 导读 在代码评审或回溯提交历史时 git show c文档教程知识库上一篇如何用Emscripten实现跨团队WebAssembly代码共享终极指南下一篇roslibjs TF客户端详解在Web应用中实现机器人坐标变换可视化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑