繁体   English   中英

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

[英]How can I list all the deleted files in a Git repository?

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

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

...我刚刚或多或少地直接从另一个答案中获取了它

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

git ls-files --deleted

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

git ls-files --deleted | xargs git rm

引用这个Stack Overflow 的答案。

这是为每个更改的文件获取更改类型(A:添加,M:修改,D:删除)的非常巧妙的方法。

git diff --name-status

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

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

由于 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 

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

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 提交。

如果您希望名称完全由换行符分隔,则可以使用--name-only标志,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM