如何列出Git仓库中所有存在任意文件删除操作的提交记录
如何列出Git仓库中所有删除过任意文件的提交记录
针对开源前全链路敏感信息排查的场景,可通过Git内置的日志筛选能力直接定位所有存在文件删除行为的提交、以及全量曾被跟踪后被删除的文件,具体操作如下:
列出所有含文件删除行为的提交
执行以下命令,会按提交时间从新到旧输出所有存在文件删除操作的提交,同时展示每个提交中被删除的具体文件路径:
git log --diff-filter=D --summary
核心参数说明:
--diff-filter=D:仅筛选差异类型为「删除(Delete)」的提交,自动跳过仅包含新增、修改、重命名行为的提交--summary:在提交信息后附加文件操作概要,明确列出每个提交删除的文件路径
如果只需要精简的提交列表(仅展示短提交哈希+提交说明),可使用简化命令:
git log --diff-filter=D --oneline
如果不希望将文件重命名操作误识别为「删除旧文件+新增新文件」,可添加--no-renames参数过滤重命名场景,仅统计真正被移除的文件:
git log --diff-filter=D --no-renames --summary
导出全量历史被删除的跟踪文件清单
如果需要获取所有曾经被Git跟踪、后续被删除的文件去重列表用于批量核查,执行以下命令即可:
git log --diff-filter=D --pretty=format: --name-only | sort -u > deleted_files_list.txt
核心参数说明:
--pretty=format::关闭提交元信息输出,仅保留文件路径内容--name-only:仅输出改动涉及的文件名,不展示具体diff内容sort -u:对输出的文件路径去重排序,避免同一文件因多次删改重复出现> deleted_files_list.txt:将结果导出到当前目录下的文本文件,不需要导出可删除该段
核查删除提交的具体内容
拿到目标提交的哈希值后,执行以下命令即可查看该次提交的完整改动,包括被删除文件的全部内容,方便核查是否存在敏感信息:
git show <替换为实际的提交哈希>
如果仅需要查看该次提交中被删除文件的内容,不需要展示提交说明和其他类型的改动,可添加筛选参数:
git show <替换为实际的提交哈希> --diff-filter=D
内容的提问来源于stack exchange,提问作者Xavi Montero
相关产品推荐
相关产品推荐

