git log仅加--follow才显示提交但文件名未变的问题咨询
Git Log --follow 才能看到提交的原因与解决办法
别担心,这种情况我之前也碰到过——哪怕文件名看起来没改,git log --follow能显示更多提交,本质是Git内部靠文件内容哈希跟踪历史,而普通git log只认当前的文件路径/名称,下面给你拆解原因和解决办法:
可能的原因
- 文件曾被移动/重命名后改回原名称:比如这个文件之前被移到其他目录,或者改了名字,后来又改回现在的路径和名称。普通
git log只会追踪当前路径下的文件历史,而--follow会通过内容匹配,把文件之前的历史也拉出来。 - 文件路径发生过变更:你现在的路径是
laravel/resources/views/tickets/stage-options.blade.php,但之前这个文件可能在tickets目录之外,比如laravel/resources/views/stage-options.blade.php,后来被移到tickets下。路径变了但文件名没变,普通git log不会跨路径追踪,--follow却能识别内容关联。 - 文件名大小写隐性变更:如果你的系统是大小写不敏感的(比如Windows、默认设置的macOS),之前可能有人把文件名改成过大小写不同的版本(比如
Stage-Options.blade.php),系统没识别到,但Git内部记录了这个变更。普通git log不会跨大小写追踪,--follow靠内容哈希就能找到这些提交。
解决办法
方法1:用--full-history替代--follow查看完整历史
如果你不想每次都加--follow,可以用--full-history参数,它会显示所有涉及该文件的提交,不管路径或名称是否变化:
git log --full-history --name-only -- laravel/resources/views/tickets/stage-options.blade.php
方法2:排查并修复路径/大小写问题
- 先确认文件的历史变更轨迹,用
--follow结合--name-status看详细操作:
输出里会显示git log --follow --name-status -- laravel/resources/views/tickets/stage-options.blade.phpR(重命名)或M(移动)的记录,帮你定位具体变更。 - 如果是大小写问题,针对当前仓库开启Git大小写敏感(避免全局设置影响其他仓库):
之后如果需要,可以修正文件名的大小写并提交,这样普通git config --local core.ignorecase falsegit log就能正常追踪了。
补充:验证提交内容
你可以用git show <commit-hash>查看具体提交里的文件变更,比如:
git show 8e00c11ef749858a874a7ae4438032e03db5563b
看看这个提交里的文件路径是不是和现在的一致,就能确认是不是路径变更导致的问题。
你执行命令
git log --follow --name-only -- laravel/resources/views/tickets/stage-options.blade.php的输出:commit c946893acef5b626e01256aa98da7e7ae874d96b Author: coder Date: Tue Apr 10 13:00:09 2018 +0100 add bulk sub tasks breaks if url has parameters laravel/resources/views/tickets/stage-options.blade.php commit 8e00c11ef749858a874a7ae4438032e03db5563b Author: coder Date: Fri Apr 6 13:02:47 2018 +0100 get rid of useless buttons in stage/task side popups laravel/resources/views/tickets/stage-...
内容的提问来源于stack exchange,提问作者iateadonut
相关产品推荐
相关产品推荐

