重命名检测是什么
合并时 Git 会尝试识别文件重命名,并尽量跨文件名把两边的内容改动对齐到一起。识别依据是内容相似度,阈值可以用 -X find-renames=<百分比> 调整;merge.renames 配置能关闭检测,但通常不建议。改名同时大改内容最容易出现双重冲突,先单独提交纯改名再改内容,能显著降低合并难度。
基本信息
| 用途 | 控制合并过程中的重命名识别 |
|---|---|
| 语法 | git merge -X find-renames=40% <分支> |
| 相关配置 | merge.renames(默认开启) |
| 识别依据 | 内容相似度百分比 |
| 历史追踪 | git log --follow 可追踪改名之前的提交 |
典型使用场景
- 合并大范围重命名目录的分支,让内容改动尽量自动对齐
- 重命名后内容又被改动、冲突难懂时调低阈值重试
- 用历史追踪选项查看某文件改名之前的提交记录
- 迁移模块路径时先做纯改名提交,再做内容调整
- 排查「文件被删除又新增」的错觉时,确认是否只是识别失败
常用示例
常用示例
git merge -X find-renames=30% feature/rename-module # 放宽识别阈值后再合并
git merge --no-ff feature/rename-module # 保留合并提交,便于回溯
git log --follow --oneline src/new-name.js # 追踪改名之前的提交历史
git diff --find-renames=50% HEAD~1 HEAD # 查看识别改名后的差异
git config merge.renames # 查看当前重命名检测配置常见现象读法
| 现象 | 原因 | 处理方式 |
|---|---|---|
| 改名被显示为删除加新增 | 相似度低于阈值 | 调低阈值后重试合并 |
| 改名与内容改动双重冲突 | 同一提交里既改名又改内容 | 拆成两次提交后重做 |
| 历史只看得到改名之后的记录 | 未开启历史追踪选项 | 加上追踪选项查看 |
重命名检测只作用于合并与展示层面的判断,仓库里并不存在一份永久的改名记录,历史追踪要靠命令里带上相应选项。
把纯改名单独提交一次,让 Git 有清晰的比对基准,之后再改内容,冲突会明显减少。