我怎样才能将git-diff限制为只有一个目录,没有它的孩子?

Jea*_*let 12 git git-diff

git diff --name-status用来跟踪哪些文件在两次提交之间被修改/添加/删除/重命名/复制,并且效果很好.

现在假设我移动文件file1newdir/file1,提交,然后运行git的差异,我得到这样的:

$ git diff --name-status -C HEAD~1 HEAD
R100    file1    newdir/file1
Run Code Online (Sandbox Code Playgroud)

有没有办法让git将自己限制在给定目录中的更改列表中,而不是其子项?我想分别知道根目录和newdir目录的确切更改.对于newdir,这很容易:

$ git diff --name-status -C HEAD~1 HEAD -- newdir
A       newdir/file1
Run Code Online (Sandbox Code Playgroud)

...但是如何在根目录中获取"补充"差异信息?即,这个输出:

$ git diff ???
D       file1
Run Code Online (Sandbox Code Playgroud)

请注意,我希望保留-C选项以检测同一目录中的重命名和副本.

Chr*_*ola 1

将其传递给 grep:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$
Run Code Online (Sandbox Code Playgroud)

这将过滤掉包含子目录的任何内容,如果您需要从更深层次获取某些内容,请执行以下操作:

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以轻松地为其添加别名。