说我在Git存储库中.我删除了一个文件并提交了更改.我继续工作,并做了一些更多的提交.然后,我发现我需要恢复该文件.
我知道我可以使用签出文件git checkout HEAD^ foo.bar,但我真的不知道该文件何时被删除.
我希望我不必手动浏览我的日志,检查整个项目的给定SHA,然后手动将该文件复制到我原来的项目结帐中.
曾几何时,我的项目中有一个文件,我现在希望能够获得.
问题是:我不知道何时删除它以及它在哪条路径上.
如何存在此文件的提交?
我知道git存储文件何时被删除的信息,我能够检查各个提交以查看哪些文件已被删除但是是否有一个命令可以在存储库的生命周期内生成每个已删除文件的列表?
由于它不再存在于存储库中,我无法做到
git log <filename>
Run Code Online (Sandbox Code Playgroud)
我可以跑
git log --diff-filter='D|R' <directory_that_contained_it>
Run Code Online (Sandbox Code Playgroud)
但这是太多的信息和grepping它似乎没有列出我正在寻找的文件.
有没有办法找到并显示在Github中删除文件的提交,但是没有在本地克隆它?例如,使用网站的在线搜索表单?
我试图列出分支历史记录中任何一点存在但随后被删除且不存在于该分支的最新提交中的所有文件的名称。
其他类似(但不相同)问题的答案表明:
git log --all --pretty=format: --name-only --diff-filter=D
Run Code Online (Sandbox Code Playgroud)
但这列出了分支历史记录中所有提交的所有单个文件删除操作,而不考虑文件是否被重新添加。
我经常使用 git ,这很危险,而且我的术语可能有点偏差,所以这里是我想要做的一个具体例子:
git init
:: add three files
echo aaa > aaa.txt
echo bbb > bbb.txt
echo ccc > ccc.txt
git add --all
git commit -m "initial commit"
:: delete aaa.txt, bbb.txt
del aaa.txt
del bbb.txt
git add --all
git commit -m "delete aaa.txt, bbb.txt"
:: re-add aaa.txt
echo zzz > aaa.txt
git add --all
git commit -m "re-add aaa.txt"
Run Code Online (Sandbox Code Playgroud)
我正在尝试弄清楚我需要列出什么命令bbb.txt- 我不在乎它aaa.txt在某个时候被删除,因为它后来被重新添加,所以它当前存在于分支的尖端。
我也不关心文件的内容 …
在过去的几周里,我得到了一条关于index.lock存在几次的消息.
删除该文件在git index.lock中作为解决方案提到 我尝试提交时存在文件,但无法删除该文件
是否正在删除该文件,或者是否需要执行其他操作(有没有办法验证完整性等等?).
这是在安装了git命令行工具,TortoiseGIT和SourceTree的Windows x64系统(完全修补)上.