git -如何找到引用了源代码中已不存在的特定文件扩展名的提交

3duebb1j  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(140)

我需要在git log中找到所有引用扩展名为.jar.class的旧二进制文件的提交。
我们确实在源代码中有这些文件,但是不再了!但是,我需要找到所有的提交,它们引用了一些具有该扩展名的文件(例如test.class虽然我不知道这些文件的确切名称,我需要过滤那些对扩展名为**.class**的文件做了一些修改的提交。我不想根据提交消息过滤提交。
我试探着:

git log --oneline -- '*.class'

对于此链接:Using git to see all logs related to a specific file extension within subdirectories
但没有运气(没有结果)
这是我的要求吗?非常感谢!

9jyewag0

9jyewag01#

Git会永远保存每个提交(或者只要你能找到它的哈希ID),每个提交也会永远保存每个文件,所以你想要的所有信息都在仓库里,你的思路是正确的:

git log --oneline -- '*.class'

这里你遇到的问题是,这种git log操作是通过 * 过滤掉 * 一些提交来工作的。也就是说,git log访问提交--也就是历史记录--但并不 * 告诉你 * 其中的一些提交。提交 * 就是 * 历史记录,如果git log没有像这样过滤掉一些提交,你就会得到所有 * 不 * 相关的提交。
到目前为止,没有问题,但是:这种过滤就是Git所称的 *History Simplification *,如果你打开the git log documentation并搜索History Simplification(这个直接链接可能会在某个时候停止工作,但现在可以直接链接到它),你会发现:
Default mode
将历史简化为最简单的历史解释树的最终状态
由于“树的最终状态”已经将*.class文件 * 删除 *,git log通常不会告诉你添加和修改文件的提交。它们已经消失了!你显然不关心它们!🤪🙄
幸运的是,只要稍微往下一点,你就会发现:
--full-history
与默认模式相同,但不清理某些历史记录。
所以添加--full-history是解决Git愚蠢的方法。
您可能 * 还 * 希望从 * 所有分支、标记和远程跟踪名称 *(实际上是所有引用)开始,即在--之前添加--all

git log --oneline --full-history --all -- "*.class"

如果你在Windows上使用CMD.EXE,请确保在这里使用双引号(或不使用引号)。从更明智的CLI中,单引号或双引号都可以(但不使用引号可能不行,这取决于细节)。

相关问题