Command Reference

git-ls-tree 教程

解释如何用 git-ls-tree 列出某个树对象中的目录和文件条目。

适合谁看
  • 已经会基本提交和分支操作的开发者
  • 想理解命令边界与风险的人
前置知识
  • 知道工作区、暂存区、提交的基本关系
  • 能读懂 `git status` 和简单历史图
常见风险
  • 误把本地整理命令用到共享历史
  • 在没确认恢复路径前直接继续改写历史

一句话理解

git-ls-tree 用于列出某个树对象中的目录和文件条目。

什么时候适合用

  • 当你需要列出某个树对象中的目录和文件条目
  • 当你想把这类操作做成稳定流程而不是手工重复
  • 当你需要更准确地理解 Git 在这一步到底记录了什么

基本示例

git ls-tree -r HEAD

读这条命令时最该注意什么

底层命令更接近实现细节,读写前要先确认自己是不是只需要一个更安全的高层命令。

一个更稳的实践建议

先把它当作只读检查工具理解,再决定是否进入修改引用或索引的用法。

补充理解角度

  • 理解底层对象和引用
  • 写脚本或排查高级问题
  • 验证 Git 内部状态

这条命令在流程里解决什么问题

git ls-tree 解决的是"需要查看某个树对象(提交或目录)中包含哪些文件和子目录"的问题。它列出指定树对象的目录和文件条目,显示每个条目的类型、模式和 blob hash。

典型用例

  • 想查看某个提交中完整的目录结构,用 git ls-tree -r HEAD 递归列出所有文件和子目录。
  • 在脚本中解析某个目录的内容,用 git ls-tree HEAD:src/ 查看特定目录下的文件条目。
  • 验证某个文件在特定提交中的 blob hash,用 git ls-tree HEAD path/to/file 获取其对象 ID。

图例理解

列出树对象内容ls-tree 读取对象数据库中的树对象,输出其包含的目录和文件条目。它是纯只读操作。
树对象
树对象引用递归选项目标路径
产出
文件模式对象类型(blob/tree)对象 hash文件路径
ls-tree 只读取树对象内容,不修改任何内容。它展示的是某个快照时刻的目录结构。

特殊情况与边界

  • git ls-tree 是纯只读命令,不会修改对象数据库、索引或工作区的任何内容。
  • 默认只显示指定层级的内容,需要用 -r(recursive)才能递归列出所有子目录中的文件。
  • 可以用 TREE:PATH 语法查看特定路径下的内容,如 git ls-tree HEAD:src/
  • 输出包含文件模式(如 100644 表示普通文件,100755 表示可执行文件,040000 表示目录)。
  • 它展示的是对象数据库中的树结构,与工作区当前状态无关——即使工作区有未提交的修改,ls-tree 仍然显示树对象中的内容。

延伸阅读

继续搭配 git status、git log、git show 一起看,通常更容易判断这条命令对历史、索引和工作区分别造成了什么影响。