我在有关git命令的视频教程中学到了
git log --diff-filter=R --find-renames
,
通过阅读文档得出的结论是
git log --diff-filter=R
应产生与
相同的结果 git log --find-renames
第一个组合命令可能被视为错字。
但是,当我在一个仓库中尝试时,两个命令分别产生了相同的结果,而在另一个仓库中,只有后一个仓库产生了任何结果。 另外,我找不到有关两者之间可能存在差异的任何文档。
除了可以向每个命令添加不同的修饰符之外,有人可以告诉我这些命令之间的区别是什么吗?
答案 0 :(得分:2)
区别真的很简单:
--find-renames
选项使用默认的50%相似文件匹配阈值打开重命名查找机制。重命名查找机制在相当旧的Git版本中默认为关闭,而在较新版本的Git中默认为打开,因此,如果您具有较新版本的Git(并且未更改默认值),请添加--find-renames
到您的git diff
完全没有效果。 1
--diff-filter=
选项设置过滤器,以告诉Git运行内部差异引擎后有选择地显示的文件。选择R
会告诉Git仅显示检测到重命名的文件。
因此,如果您使用的是Git的较旧版本,则需要两个 选项(或参见脚注1),以仅查看重命名的文件,而对于现代的Git,只需--diff-filter=R
该选项就足够了,除非该存储库的配置已禁用重命名检测。
1 还有一些配置旋钮,您可以使用git config
或-c
选项进行设置。这里最相关的是diff.renames
,可以将其设置为false
,true
或copy
或copies
。有关更多详细信息,请参见the git config
documentation。在Git 2.9.0中,diff.rename
的默认值从false
更改为true
。