git diff --name-only
或git diff --name-status
将列出所有已更改的文件,但是没有命令可以列出包含更改文件的所有文件夹名称。
例如,在这个目录树中:
test/
|
|__B/
|
|____b1.txt
|
|__C/
|
|____c1.txt
如果
b1.txt
和c1.txt
有更改,我想要输出B
和C
。这里有一种方法:
git diff --name-only | xargs -L1 dirname | uniq
解释
git diff --name-only
: 列出所有更改的文件xargs -L1 dirname
: 移除文件名,只保留目录名uniq
: 移除重复项你可以创建 一个别名,这样每次需要使用该命令时就不必输入整个命令:
alias git-diff-folders="git diff --name-only | xargs -L1 dirname | uniq"
这个命令会给出顶层目录的结果。
git status | cut -d'/' -f1
为了更深入的解决方案,我目前正在使用bash中的${PWD##*/}来找到更正确的解决方案。
尝试为您在git中编写一个类似于npm解决方案的解决方案:
我不再搜索这个问题的答案了,
git diff --name-only | xargs -L1 dirname | uniq
是由Pᴇʜ提供的正确答案。
在他的编辑后,在我的Mac电脑上可以工作。
git diff --name-only | xargs -L1 dirname | sort | uniq
。 - Michał Karpacki