You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Git仅列出发生变更的目录?

列出Git中变更文件所在的目录

针对你提到的场景——在Git根目录~/project下修改了subtool/file1、subtool/file2和subtool3/file1,想要只输出变更的目录subtool和subtool3,这里有几个实用的命令方案:

方案1:针对未暂存的修改

如果你还没执行git add暂存这些修改,直接用这条命令:

git ls-files -m | awk -F '/' '{print $1}' | sort -u

拆解各部分作用:

  • git ls-files -m:列出所有本地已修改但未暂存的文件路径;
  • awk -F '/' '{print $1}':把每个文件路径按斜杠/拆分,提取第一个部分(也就是根目录下的子目录名);
  • sort -u:对结果排序并去重,确保每个目录只显示一次。

方案2:针对已暂存的修改

如果你已经执行git add把修改暂存了,就换成这条命令:

git diff --cached --name-only | awk -F '/' '{print $1}' | sort -u

这里git diff --cached --name-only会列出所有已暂存但未提交的文件路径,后续的处理和方案1一致。

方案3:同时覆盖暂存和未暂存的修改

如果想一次性获取所有已修改(不管有没有暂存)的文件所在目录,用这个组合命令:

(git ls-files -m; git diff --cached --name-only) | awk -F '/' '{print $1}' | sort -u

通过括号把两个命令的输出合并,再统一处理去重,就能得到所有变更目录的列表。

额外小提示

如果你的项目里有根目录直接修改的文件(比如~/project/readme.md),上面的命令会输出空行。如果想过滤掉这种情况,可以在awk环节加个判断:

... | awk -F '/' '{if($1 != "") print $1}' | sort -u

内容的提问来源于stack exchange,提问作者Nishant Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:12:32