有没有办法限制git diff更改的文件?
我想看看两个提交之间的差异,但排除一个或另一个中不存在的路径(添加/删除).以下Perl单线程说明了我想要的大部分内容:
git diff master.. | perl -lnwe 'print unless /^(new|deleted) file/../^diff/ and not /^diff/'
Run Code Online (Sandbox Code Playgroud)
但是这会diff --git a/path b/path为新文件或删除的文件留下线条.另外,如果我不需要解析它会更好(如果任何hunk包含匹配/ ^ diff /的任何内容,也会失败).
我尝试的另一种选择是:
git diff --name-status (args) | perl -lnwe 'print if s/^M\s+//' | xargs git diff (args) --
Run Code Online (Sandbox Code Playgroud)
它的输出更好,但仍然感觉很乱.
zen*_*zen 186
您正在寻找--diff-filter=M仅显示两个分支之间的文件*M*odified.
从 man git-diff
--diff-filter=[ACDMRTUXB*]仅选择文件
A添加C复制D删除M改性R改名T他们的类型(模式)改变了U取消合并X未知B他们的配对破了*全或无可以使用过滤器字符的任何组合.
当*(全部或全部)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径; 如果没有与其他条件匹配的文件,则不会选择任何内容.
Von*_*onC 15
正如Git 2.10(2016年第3季度)将提醒我们的,有一种更简单的方法来"显示除添加/删除文件之外的所有内容".(实际上自Git 1.8.5,2013年7月)
git diff --diff-filter=ad master..
Run Code Online (Sandbox Code Playgroud)
见Junio C Hamano()提交16726cf(2016年7月14日).(由Junio C Hamano合并- -在提交2f8c654,2016年8月8日)gitster
gitster
diff:文件diff-filter排除在v1.8.5天,7f2ea5f(
diff:允许使用小写字母指定要排除的更改类,2013-07-17) 教会了--diff-filter将小写字母作为排除的机制,但我们忘记记录它.
所以现在的文档diff-options(最后)包括:
这些大写字母可以降级为排除.
例如,--diff-filter=ad排除添加和删除的路径.
小智 6
要查看所有修改过的文件和新文件,您可以使用
git diff --name-only --diff-filter=ACMR PREV_VERSION master
Run Code Online (Sandbox Code Playgroud)
PREV_VERSION是您第一次提交的哈希值。
要导出为 zip,您可以使用此代码
git archive --output=export.zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)
Run Code Online (Sandbox Code Playgroud)
注:.gitignore不在export.zip
您可以使用 --diff-filter 标志来精确执行此操作。git diff --diff-filter=CMRTUXB master..应该显示除添加/删除的文件之外的所有内容。