我知道Git存储文件删除时间的信息,并且我能够检查各个提交以查看哪些文件已被删除,但是是否有一个命令可以在存储库的生命周期内生成每个已删除文件的列表?
当前回答
由于Windows没有grep命令,这在PowerShell中很适用:
git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt
其他回答
如果你想以某种方式约束结果,这里有一个很好的例子:
$ 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正则表达式都可以(我用它来查找被删除的文件类型等)
如果你想用换行符分隔两个名字,你可以像这样使用——name-only标志:
git diff --diff-filter=D --name-only <old-commit-hash> <new-commit-hash>
如果你只对当前删除的文件感兴趣,你可以使用这个:
git ls-files --deleted
如果你想删除它们(如果你没有使用“git rm”删除它们),将结果管道到xargs git rm
git ls-files --deleted | xargs git rm
显示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
这就是你想要的,我认为:
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添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别