首页/开发/Git 与协作速查/git mv 移动与重命名
Git 基础与命令88 条

git mv 移动与重命名

移动或重命名文件并同步索引;Git 按内容相似度识别重命名,先 mv 再 add 与 git mv 的最终效果接近。

Git 与协作速查开发更新于 2026-10-13

git mv 是什么

git mv 用于移动或重命名文件目录,并同步更新索引,效果等价于一串「移动文件 + 从索引移除旧路径 + 把新路径加入索引」。要注意 Git 并不在提交里保存「重命名」这个动作本身,展示历史时它是按内容相似度推断出来的,因此改动越少越容易被识别为改名。它是所有 Git 客户端的标准子命令,跨平台一致。

基本信息

语法git mv <源> <目标>
批量git mv a b c 目录/ 把多个源移入目录
等价做法系统 mv 之后 git add -A
追踪改名git log --follow <文件>
平台任意 Git 客户端

典型使用场景

  • 重命名模块文件或调整目录结构,让索引一次性跟上
  • 修正文件命名规范(如统一大小写风格)
  • 把多个文件批量移入新建目录
  • 移动文件同时保留其在历史中的可追溯性
  • 清理散落文件时顺带归位,避免误提交不完整变更

常用示例

常用示例
git mv a.txt b.txt                 # 重命名单个文件
git mv src lib                     # 移动整个目录
git mv a.py b.py c.py pkg/         # 多个文件移入目录
git log --follow docs/README.md    # 追改名之前的历史
# macOS/Windows 上大小写重命名要分两步
git mv README.md README.md.tmp && git mv README.md.tmp readme.md

差异与相似度相关选项

选项作用
git diff -M在差异里启用改名检测
git log --follow跨改名追踪单个文件历史
-C更激进地检测复制来源
重命名靠相似度推断而非显式标记:一次移动大量文件时尽量单独成一个提交,避免与其他改动混在一起导致识别失败。
改名与改内容分开两次提交,历史更清晰也更容易被工具识别;若必须同时做,改动幅度越大越可能被记为删除加新增,--follow 也就追不到更早的记录。

操作前后要做的事

  • 移动前用 git status 确认工作区干净,避免把无关改动带进同一次提交
  • 移动后 git status 应显示为 renamed,而不是一对删除与未跟踪
  • 确认改名合并后,远端旧路径的引用(CI 配置、文档链接)一并更新
  • 跨大小写改名在 Windows/macOS 上走两步中间名,Linux 上可直接改

易错点

  • 用系统 mv 后忘记 git add,status 会显示为删除加未跟踪,很容易只提交了一半的变更
  • --follow 只对单个文件有效,多文件改名时需逐个查历史,目录级改名无法用 --follow
  • 一次提交里既改名又大改内容,会让相似度跌破阈值而被记为删除加新增,历史就此断开
  • 在大小写不敏感的文件系统上进行大小写改名,直接用 git mv 可能无效,必须走两步中间名
  • 改名后忘记同步引用路径,构建脚本或文档链接会指向已不存在的文件,排查时容易误判为代码问题

数据来源与参考

  • Git 官方文档:git-mv
  • Git 官方文档:git-log(--follow)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌