如何在项目提交历史中找回已删除的文件?

1874
从前,我的项目中有一个文件,现在我想找回它。
问题是:我不知道我什么时候删除了它,也不知道它的路径在哪里。
当这个文件存在时,我该如何定位它的提交记录呢?

24
这里的回答对我比“重复问题”的回答更有用。 - Felipe Alvarez
17
同意,无论是否有重复内容,它们在谷歌搜索中都没有出现,而这一个出现了。希望我们能停止浪费时间追寻重复的问题,只有时间和谷歌的算法才能确定哪个问题最好。 - Tim Boland
哪个重复了@FelipeAlvarez?望向地平线,却没有发现一个..也许曾经有过一个重复。 - Timo
11个回答

0

我曾经遇到过这种情况,甚至不知道文件的名称,所以我想查看所有已删除的文件...

总的来说,我强烈建议熟悉git-filter-repo。它有许多用途来重写历史记录,但其中一个分析功能包括非常快速地识别存储库中所有已删除的文件,并显示它们的大小和删除日期。(在非Windows操作系统上使用它相当直接, 这里有专门针对Windows的安装说明。)

一旦您在路径中运行它,您只需运行:

git filter-repo --analyze

这将在您的.git文件夹中输出一些文件,而您想查看的文件是:

.git\filter-repo\analysis\path-deleted-sizes.txt

此文件显示您的存储库中所有已删除文件,按大小反向排序,并显示删除日期。以下是示例输出:

=== Deleted paths by reverse accumulated size ===
Format: unpacked size, packed size, date deleted, path name(s)
    57151421   44898377 2022-07-22 somdirectory/somefileA
    46034619   42929136 2022-01-18 somdirectory/somefileB
    65332368   29102439 2020-09-28 somdirectory/somefileC
    23686432   21681498 2022-07-22 somdirectory/somefileD
    23681272   21678818 2022-07-22 somdirectory/somefileE
    23676153   21670502 2022-07-22 somdirectory/somefileF
    43232768   21439037 2020-07-10 somdirectory/somefileG
    18714315   14299243 2019-01-10 somdirectory/somefileH
    16788104   13035176 2019-01-10 somdirectory/somefileI

显然,您可以使用此功能找到您要查找的文件,或者在重写历史的情况下,基于第二列的大小,我知道如果我从历史记录中删除这9个已删除的文件,我将恢复约220 MB。

一旦您确定了要查找的文件,您可以使用此功能查找提交:

git log --all --full-history -- <filename>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接