I know Git stores information of when files get deleted and I am able to check individual commits to see which files have been removed, but is there a command that would generate a list of every deleted file across a repository's lifespan?
9 Answers
git log --diff-filter=D --summary See Find and restore a deleted file in a Git repository
If you don't want all the information about which commit they were removed in, you can just add a grep delete in there.
git log --diff-filter=D --summary | grep delete 9 Comments
git log --find-renames --diff-filter=D --summary | grep deletegit log --no-renames --diff-filter=D --summary | grep deletegrep delete because if the commit message has the word delete, it'll be picked up as well. Use grep 'delete mode' instead.This does what you want, I think:
git log --all --pretty=format: --name-only --diff-filter=D | sort -u ... which I've just taken more-or-less directly from this other answer.
This prints only file paths without other info:
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 ... Comments
If you're only interested in seeing the currently deleted files, you can use this:
git ls-files --deleted if you then want to remove them (in case you deleted them not using "git rm") pipe that result to xargs git rm
git ls-files --deleted | xargs git rm 3 Comments
git rm $(git ls-files --deleted)Citing this Stack Overflow answer.
It is a pretty neat way to get type-of-change (A:Added, M:Modified, D:Deleted) for each file that got changed.
git diff --name-status HEAD~1000 Comments
And if you want to somehow constrain the results here's a nice one:
$ 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 You'll get all files deleted from some_dir (see the sed command) together with the commit number in which it happen. Any sed regex will do (I use this to find deleted file types, etc)
Since Windows doesn't have a grep command, this worked for me in PowerShell:
git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt 3 Comments
Select-String?Show all deleted files in some_branch
git diff origin/master...origin/some_branch --name-status | grep ^D or
git diff origin/master...origin/some_branch --name-status --diff-filter=D 1 Comment
git diff origin/master...origin/some_branch --name-status | grep ^D or git diff origin/master...origin/some_branch --name-status --diff-filter=DThis will get you a list of all files that were deleted in all branches, sorted by their path:
git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt Works in msysgit (2.6.1.windows.1). Note we need "delete mode 100" as git files may have been commited as mode 100644 or 100755.
git diff --name-status commit_hash.