我git diff --name-status用来跟踪哪些文件在两次提交之间被修改/添加/删除/重命名/复制,并且效果很好.
现在假设我移动文件file1到newdir/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选项以检测同一目录中的重命名和副本.
将其传递给 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)
如果您愿意,您可以轻松地为其添加别名。