git diff - 仅显示更改的目录

时间:2018-05-20 23:54:27

标签: git

有没有办法只列出已更改的目录?

如果我在git root上说~/project

我更改的文件是

~/project/subtool/file1

~/project/subtool/file2

~/project/subtool3/file1

我只想要

~/project/subtool

~/project/subtool3

3 个答案:

答案 0 :(得分:5)

您可以将git-diff--dirstat参数一起使用。

在您的方案中,我们假设您有以下提交:

$ git diff --name-status HEAD~1
M       subtool/file1
M       subtool/file2
M       subtool3/file1

它会产生以下输出:

$ git diff --dirstat=files,0 HEAD~1
  66.6% subtool/
  33.3% subtool3/

确保添加,0,否则git diff默认情况下仅会显示至少有3%更改的目录。我还选择了files,因为这是计算上最便宜的选项,而且您似乎并不关心具体的更改。

如果您能够使用sed,则可以删除百分比值(您可能需要tweak the regular expression以满足您的需求):

$ git diff --dirstat=files,0 HEAD~1 | sed 's/^[ 0-9.]\+% //g'
subtool/
subtool3/

答案 1 :(得分:1)

使用git diff和参数--dirstat,例如

git diff --dirstat HEAD~100..HEAD

答案 2 :(得分:1)

此解决方案也适用于根目录中的文件:

git diff --name-only HEAD~1 | awk -F "/*[^/]*/*$" '{ print ($1 == "" ? "." : $1); }' | sort | uniq

根目录中的更改将列为.

git diff --dirstat=files,0 HEAD~1的局限性在于它不会在根目录中显示更改。

相关问题