我知道Git会存储文件何时被删除的信息,我可以检查单个提交以查看删除了哪些文件,但是否有一条命令可以生成在整个代码库历史中删除的每个文件的列表?
我知道Git会存储文件何时被删除的信息,我可以检查单个提交以查看删除了哪些文件,但是否有一条命令可以生成在整个代码库历史中删除的每个文件的列表?
git log --diff-filter=D --summary
如果您不想得到有关它们被删除的提交信息,您只需添加一个grep delete
即可。
git log --diff-filter=D --summary | grep delete
git log --find-renames --diff-filter=D --summary | grep delete
。 - Slaven Rezicgrep delete
,因为如果提交信息中包含单词 delete,它也会被选中。请改用 grep 'delete mode'
。 - Vadim我认为这个代码可以达到你想要的效果:
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
...
如果你只想查看当前已删除的文件,可以使用以下代码:
git ls-files --deleted
如果你想要删除它们(假设你没有使用 "git rm" 命令删除它们),则可以将结果通过管道传递给 xargs git rm 命令。
git ls-files --deleted | xargs git rm
git rm $(git ls-files --deleted)
- yunzen引用这个 Stack Overflow 回答。
这是一种很妙的方法,可以获取每个更改了的文件的变更类型(A:新增,M:修改,D:删除)。
git diff --name-status HEAD~1000
由于Windows系统没有grep
命令,所以我在PowerShell中使用了以下命令:
git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
git diff origin/master...origin/some_branch --name-status | grep ^D
或者
git diff origin/master...origin/some_branch --name-status --diff-filter=D
git diff origin/master...origin/some_branch --name-status | grep ^D
或者 git diff origin/master...origin/some_branch --name-status --diff-filter=D
。 - nathaneastwood如果您希望在某种程度上限制结果,这是一个不错的方法:
$ 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正则表达式都可以使用(我用它来查找已删除的文件类型等)。git log --diff-filter=D .
- Sebigit 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>
git diff --name-status commit_hash
。 - Gabriel Staples