Command Reference

git mv

用于重命名或移动已跟踪文件,帮助你把文件系统变化和暂存区状态一次保持一致。

适合谁看
  • 已经会基本提交和分支操作的开发者
  • 想理解命令边界与风险的人
前置知识
  • 知道工作区、暂存区、提交的基本关系
  • 能读懂 `git status` 和简单历史图
常见风险
  • 误把本地整理命令用到共享历史
  • 在没确认恢复路径前直接继续改写历史

git mv 把文件移动或重命名,并把这次变化一并放进暂存区。

常见写法

git mv old-name.ts new-name.ts
git mv docs/guide.md docs/intro.md

什么时候值得用

  • 你希望文件移动和 Git 暂存保持一步完成
  • 你在大规模重命名目录,希望操作更一致

它和手动 mv 的关系

手动移动文件后再 git add -A 也可以。Git 最终会通过内容相似度推断 rename。git mv 的价值主要是让命令更直接、暂存状态更清晰。

常见误区

Git 底层真的保存“重命名对象”吗

不完全是。Git 更关注内容和路径变化,rename 更多是比较和展示层面的结果。

git mv 比普通 mv 更“高级”

它主要是更方便,不是完全不同的底层机制。

这条命令在流程里解决什么问题

git mv 在文件系统和暂存区两个层面同时操作:它把文件从源路径移到目标路径(工作区层面),并把这次移动记录到索引中(暂存区层面)。它解决的是"让文件移动和 Git 暂存一步到位"的问题,避免手动 mv 后再 git addgit rm

典型用例

  • 重命名文件并自动暂存(git mv old.ts new.ts),一步完成文件系统移动和 Git 暂存。
  • 移动文件到新目录(git mv docs/guide.md docs/intro.md),适合整理项目结构。
  • 大规模重命名目录时保持暂存状态清晰,git status 会直接显示为 renamed 而非 deleted + added。

图例理解

文件移动的双重影响git mv 同时修改工作区(实际移动文件)和索引(标记为已暂存的 rename),是一次性操作。
输入
源文件路径目标文件路径索引中的跟踪状态
产出
工作区中新路径的文件索引中已暂存的 rename 记录
Git 底层并不存储重命名对象,而是通过内容相似度推断 rename,所以手动 mv + add -A 也能达到相同效果。

特殊情况与边界

  • git mv 只对已跟踪的文件生效,对新文件使用会报错。
  • 目标路径已存在时操作会失败,除非使用 -f 强制覆盖。
  • Git 底层通过内容相似度来识别 rename,所以 mv + git add -Agit mv 在最终提交层面效果一致——git mv 主要胜在一步到位、状态更清晰。
  • 移动带有未暂存改动的文件时,改动会随文件一起迁移,不会丢失。