首页/开发/Git 与协作速查/git ls-tree 查看提交内容清单
Git 基础与命令88 条

git ls-tree 查看提交内容清单

列出树对象(提交快照)中的文件与子目录:-r 递归、-l 附对象大小、--name-only 只看路径。

Git 与协作速查开发更新于 2026-10-13

git ls-tree 是什么

列出树对象(提交快照)里的文件与子目录:-r 递归展开子目录、-l 附对象大小、--name-only 只输出路径。它看的是提交里的内容而不是工作区,适合做发布清单、核对线上版本对应的文件列表,也是脚本里遍历仓库内容的稳定数据源。

基本信息

用途查看某提交/目录的文件清单
-r递归展开子目录
-l附对象大小(blob 显示字节数)
路径语法git ls-tree HEAD:src(冒号不能省)
--name-only只输出路径,适合接管道统计
配合命令cat-file 看对象内容;rev-parse 解析提交引用

典型使用场景

  • 发布清单:列出 tag 快照中的文件,与制品内容对照。
  • 核对线上版本:确认某提交是否包含目标文件(如新配置)。
  • 仓库摸底:统计快照文件数或查看某目录结构。
  • 排查索引问题:提供「提交侧」视图,与工作区对比分析。
  • 查看子目录:用 HEAD:src 语法直接看子目录树,无需切换分支。
  • 脚本取数:--name-only 与 -z 组合可安全处理含特殊字符的路径。
  • 深挖目录结构:逐层查看子目录哈希,理解大型仓库的树组织。

常用示例

常用示例
git ls-tree HEAD                     # 根目录条目:模式 类型 哈希 名称
git ls-tree -r HEAD -- src/ | head   # 只看 src/ 下的递归条目
git ls-tree -l HEAD:src              # 附对象大小的子目录清单
git ls-tree --name-only -r HEAD | wc -l   # 统计快照里的文件总数

输出逐列读法

列含义备注
模式权限位(100644/100755/040000 等)040000 表示子目录
类型blob/tree/commitcommit 通常是子模块指针
哈希对象 ID可配合 cat-file 进一步查看
名称文件名或目录名(带路径前缀)递归输出时为完整路径
它反映提交内容,未提交改动不在此列;HEAD:src 的冒号语法不能省略,省略后会被当成普通路径过滤参数,含义完全不同,遇到结果异常先复查参数写法。

易错点

  • 它反映的是提交快照,未提交或未跟踪文件不会出现:别用它核对工作区内容,两者对不上时先 git status 看差异来源。
  • 把 HEAD:src 写成 HEAD src/ 是另一种语义(路径过滤),排查问题时先确认参数写法再下结论。
  • 子模块在父树里显示为 commit 类型条目,看不到内部文件,需要进子模块仓库查看,权限不足时会卡在该层。
  • 对比两个提交的清单差异要用 diff --name-status,ls-tree 本身不做比较;跨提交核对前先用 rev-parse 确认两端引用。

数据来源与参考

  • Git 官方文档:git-ls-tree
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌