如何在Git存储库中列出所有已删除的文件?

我知道Git存储文件删除时间的信息,并且我能够检查各个提交以查看哪些文件已被删除,但是是否有一个命令可以在存储库的生命周期内生成每个已删除文件的列表?

143838 次浏览
git log --diff-filter=D --summary

看到在Git存储库中查找并恢复已删除的文件

如果你不想要关于它们在哪个提交中被删除的所有信息,你可以在那里添加grep delete

git log --diff-filter=D --summary | grep delete

这就是你想要的,我认为:

git log --all --pretty=format: --name-only --diff-filter=D | sort -u

... 我刚刚或多或少直接从另一个答案中取出。

这只打印文件路径,而不打印其他信息:

BETA.md
CONTRIBUTING.md
files/en-us/api/file_api/index.html
files/en-us/games/index/index.md
files/en-us/games/visual-js_game_engine/index.html
files/en-us/games/visual_js_ge/index.html
files/en-us/games/visual_typescript_game_engine/index.html
...

如果你只对当前删除的文件感兴趣,你可以使用这个:

git ls-files --deleted

如果你想删除它们(如果你没有使用“git rm”删除它们),将结果管道到xargs git rm

git ls-files --deleted | xargs git rm

如果你想以某种方式约束结果,这里有一个很好的例子:

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

你将从some_dir中删除所有文件(参见sed命令)以及它发生时的提交号。任何sed正则表达式都可以(我用它来查找被删除的文件类型等)

引用堆栈溢出答案。

这是一种非常简洁的方法,可以为每个被更改的文件获取更改类型(A:新增,M:修改,D:删除)

git diff --name-status HEAD~1000

这将为您提供所有分支中被删除的所有文件的列表,按路径排序:

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

工作在msysgit (2.6.1.windows.1)。注意,我们需要“删除模式100”,因为git文件可能已经被提交为模式100644或100755。

由于Windows没有grep命令,这在PowerShell中为我工作:

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

显示some_branch中所有已删除的文件

git diff origin/master...origin/some_branch --name-status | grep ^D

git diff origin/master...origin/some_branch --name-status --diff-filter=D

如果你想要名称完全由换行符分隔,你可以像这样使用--name-only标志:

git diff --diff-filter=D --name-only <old-commit-hash> <new-commit-hash>