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


当前回答

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

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
...

其他回答

引用这个Stack Overflow的答案。

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

git diff --name-status HEAD~1000
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
...

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

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

如果你想用换行符分隔两个名字,你可以像这样使用——name-only标志:

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