前言
最近接手一个项目,里面的部分文件夹命名实在不算规范,位置也分类有问题。本想直接移动和重命名,但是 git 更改里红一片。原来是 Git 判断我删除了原来的文件,然后在新的地方新建了文件。
其实这样也正常,Git 按记录的路径找不到原来的文件,就直接判定被删除了,而没有被记录的地方又有了新文件。
虽然这样做确实是解决了问题,但是 Git 记录里是挺乱的,有什么办法得到正常的记录呢?
答案是 Git 的一个命令 git mv
命令
git mv [<options>] <source>… <destination>`
具体有两种形式
git mv [-v] [-f] [-n] [-k] <source> <destination>
git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>
第一种是重命名,将原来的文件、目录重命名为新的名字,参数为路径
第二种是移动,可以将除了最后一个参数的源路径的文件、文件夹移动在目标目录下
选项有以下几种:
- -f 强制移动或重命名,即使目标路径存在
- -k 跳过会导致错误情况的移动或重命名操作
- -n 显示命令操作而不执行命令
- -v 命令执行成功时查看具体的操作
示例
我们看一下这个目录,此目录已在 git 仓库内提交
├───A
│ a.txt
│
└───B
b.txt
-
将
a.txt
重命名为c.txt
git mv A/a.txt A/c.txt
执行后目录结构为
├───A │ c.txt │ └───B b.txt
-
将
B
文件夹 重命名为C
git mv B C
执行后目录结构为
├───A │ c.txt │ └───C b.txt
-
将
c.txt
移动到C
文件夹里git mv A/c.txt C
执行后目录结构为
├───A └───C b.txt c.txt
-
将
b.txt
移动到根目录里并重命名为a.txt
git mv C/b.txt a.txt
执行后目录结构为
│ a.txt │ ├───A └───C c.txt
注意
- 该命令执行时相关文件需已提交或者暂存
- 文件夹移动到不存在的路径下会失败,需先建目标文件夹