git diff 对于文件状态是否为重命名主要是根据路径推测,也就是说diff结果中删除了一个文件,又新增了另一个文件,且这两个文件的哈希一致,就可以认为这两个变更是重命名的结果。所以它不能保证始终是正确的。例如我把/dir1/a.svg重命名为/dir1/b.svg,这时diff结果是重命名,这是对的。但如果把/dir1/a.svg复制并重命名为/c.svg,同时把/dir1/a.svg重命名为/dir1/b.svg,这时diff的结果是/dir1/a.svg重命名为/c.svg,而/dir1/b.svg的状态是新增的。
感兴趣的话可以去试试~