我需要在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
但没有运气(没有结果)
这是我的要求吗?非常感谢!
1条答案
按热度按时间9jyewag01#
Git会永远保存每个提交(或者只要你能找到它的哈希ID),每个提交也会永远保存每个文件,所以你想要的所有信息都在仓库里,你的思路是正确的:
这里你遇到的问题是,这种
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
。如果你在Windows上使用
CMD.EXE
,请确保在这里使用双引号(或不使用引号)。从更明智的CLI中,单引号或双引号都可以(但不使用引号可能不行,这取决于细节)。