有没有一种方法可以将 git diff
限制在更改的文件上?
我想看到两个提交之间的差异,但排除在其中一个中不存在的路径(添加/删除)。以下 Perl 一行说明了我想要的大部分内容:
git diff master.. | perl -lnwe 'print unless /^(new|deleted) file/../^diff/ and not /^diff/'
但这会留下 diff --git a/path b/path
行,这些行是针对新建或删除的文件。而且如果我必须解析的话(还有一个问题是,如果任何 hunk 包含与 /^diff/ 匹配的内容,则解析将失败),这样做就不太好了。
另一个我尝试过的选择是:
git diff --name-status (args) | perl -lnwe 'print if s/^M\s+//' | xargs git diff (args) --
输出效果更好了,但仍然感觉像是hackish。
1 --name-only --diff-filter=AMR仍将列出“x”。为什么?因为从HEAD到HEAD1,该文件是添加的,而不是删除的。 - Christoph Grimmerman git diff
,“类型发生更改(即常规文件、符号链接、子模块等)(T)”。 - grimsockR
(重命名文件),你需要使用-M
,它被扩展为--find-renames
。 - ccjjmartin