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

时间:2011-05-16 13:15:27

标签: git

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

7 个答案:

答案 0 :(得分:362)

git log --diff-filter=D --summary

请参阅Find and restore a deleted file in a Git repository

如果您不想要了解删除哪些提交的所有信息,可以在其中添加grep delete

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

答案 1 :(得分:81)

我认为这就是你想要的:

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

...我刚刚从this other answer直接采取了。

答案 2 :(得分:31)

如果您只想查看当前删除的文件,可以使用:

git ls-files --deleted

如果你想删除它们(如果你删除它们不使用“git rm”)管道导致xargs git rm

git ls-files --deleted | xargs git rm

答案 3 :(得分:4)

如果你想以某种方式限制结果,这里是一个很好的结果:

$ 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正则表达式都会这样做(我用它来查找已删除的文件类型等)

答案 4 :(得分:3)

由于Windows没有grep命令,因此这在PowerShell中适用于我:

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

答案 5 :(得分:1)

显示 some_branch

中的所有已删除文件
git diff origin/master...origin/some_branch --name-status|grep D

答案 6 :(得分:0)

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

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。