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

Tob*_*oby 281 git

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

I82*_*uch 385

git log --diff-filter=D --summary
Run Code Online (Sandbox Code Playgroud)

请参阅在Git存储库中查找并还原已删除的文件

如果您不想要有关删除它们的提交的所有信息,您可以在其中添加一个grep delete.

git log --diff-filter=D --summary | grep delete
Run Code Online (Sandbox Code Playgroud)

  • 你还应该看看**git whatchanged**命令.它太酷了. (23认同)
  • **警告:**这会列出您删除的所有文件.如果你删除了一个文件,然后创建了一个具有相同名称的新文件,它将**显示在这个列表中,即使那里有一个现存的文件. (13认同)
  • 这将列出重命名为删除.要跳过这些,请使用`git log --find-renames --diff-filter = D --summary | grep删除` (6认同)
  • 使用git 2.9,默认情况下会激活重命名检测.要再次看到这些删除使用``git log --no-renames --diff-filter = D --summary | grep删除`` (2认同)
  • 当心使用`grep delete`,因为如果提交消息有删除这个词,它也会被选中。改用`grep '删除模式'`。 (2认同)

Mar*_*air 84

我认为这就是你想要的:

git log --all --pretty=format: --name-only --diff-filter=D | sort -u
Run Code Online (Sandbox Code Playgroud)

......我刚刚从这个其他答案中直接采取了这一点.

  • +1用于排序生成的文件 (8认同)

Jim*_*use 34

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

git ls-files --deleted
Run Code Online (Sandbox Code Playgroud)

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

git ls-files --deleted | xargs git rm
Run Code Online (Sandbox Code Playgroud)

  • 这仅显示索引中已在工作副本中删除的文件.OP希望删除所有已删除的文件. (11认同)
  • 尽管这不是OP想要的,但这至少对我自己来说仍然有用,因为我在搜索中无法正确表达我的查询 (5认同)

aks*_*hay 9

引用 stackoverflow答案.为变更的每个文件获得更改类型(A:已添加,M:已修改,D:已删除)的相当简洁的方法.

git diff --name-status
Run Code Online (Sandbox Code Playgroud)


est*_*ani 5

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

  • 我相信这是一种在日常开发人员生活中变得有用的复杂方法。相反,如果您想列出从当前目录中删除的文件,只需执行:`git log --diff-filter=D .` (2认同)

Jam*_*emp 5

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

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
Run Code Online (Sandbox Code Playgroud)

  • 它是一个 PowerShell cmdlet。请参阅 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string?view=powershell-5.1 (2认同)

小智 5

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

git diff origin/master...origin/some_branch --name-status | grep ^D
Run Code Online (Sandbox Code Playgroud)

或者

git diff origin/master...origin/some_branch --name-status --diff-filter=D 
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的,因为它将包含所有带有 D 的文件。你需要像`git diff origin/master...origin/some_branch --name-status | 这样的东西 grep ^D` 或 `git diff origin/master...origin/some_branch --name-status --diff-filter=D` (3认同)