git - “git log --diff-filter=R”和“git log --find-renames”有什么区别?
问题描述
我在一个关于 git 命令的视频教程中学到了
git log --diff-filter=R --find-renames
,
通过阅读文档,我得出的结论是
git log --diff-filter=R
应该产生相同的结果
git log --find-renames
并且第一个组合命令可能被认为是错字。
然而,当我在一个 repo 中尝试它时,两个命令分别产生了相同的结果,而在另一个 repo 中只有后一个产生了任何结果。此外,我找不到任何有关两者之间可能差异的文档。
除了您可以为每个命令添加不同的修饰符这一事实之外,有人可以告诉我这些命令之间的区别吗?
解决方案
区别非常简单:
该
--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
。有关更多详细信息,git config
请参阅文档。Git 2.9.0 中的默认值从diff.rename
更改false
为true
。
推荐阅读
- php - 通过 mqseries 库 php 对 MQ 进行身份验证
- ios - 未找到签名证书“iOS 开发”
- javascript - jQuery根据最近的输入值在许多输入上设置不同的日期
- node.js - TsLint 抱怨调用顶级异步方法
- python - Pandas:将带有 DatetimeIndex 的列表的字典转换为 DataFrame
- java - 包含文件名空间的 Java 进程命令
- java - (三重DES) DESede/CBC/PKCS5Padding Qt Creator中的加解密
- dapper - Dapper 从查询中返回特定字段
- android - 如何在 Firebase UI 中使用带有 FirestorePagingAdapter 的分页按钮?
- r - 读取 Excel 文件并选择特定的行和列