如何使用git diff命令显示所有受影响的文件路径?
Git 仅显示移动/删除文件的所有受影响路径
当仓库中存在文件移动(如project/olddir/file被移至project/newdir/file)或删除(如some/file/deleted被删除)操作时,执行以下命令可查看带状态标识的受影响文件:
$ git --no-pager diff --diff-filter="DR" --find-renames --name-status HEAD R100 project/olddir/file project/newdir/file D some/file/deleted
但--name-only参数仅会显示移动文件的新路径,无法获取原路径,因此只能依赖--name-status输出,可我们只需要纯路径列表,不需要状态标识。
实现目标格式的方法
Git本身没有直接参数能一步输出每行一个的完整受影响路径列表,但可以通过简单的文本处理工具快速实现:
方式1:输出每行一个路径(便于后续逐行处理)
$ git --no-pager diff --diff-filter="DR" --find-renames --name-status HEAD | awk '{for(i=2;i<=NF;i++) print $i}' project/olddir/file project/newdir/file some/file/deleted
方式2:输出单行空格分隔的路径(如你提供的示例)
$ git --no-pager diff --diff-filter="DR" --find-renames --name-status HEAD | awk '{$1=""; print $0}' | xargs project/olddir/file project/newdir/file some/file/deleted
内容的提问来源于stack exchange,提问作者Alex Tereshenkov
相关产品推荐
相关产品推荐

