Git 移动、重命名文件、目录或软连接

Git 移动、重命名文件、目录或软连接_第1张图片

前言

最近接手一个项目,里面的部分文件夹命名实在不算规范,位置也分类有问题。本想直接移动和重命名,但是 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
  1. a.txt 重命名为c.txt

    git mv A/a.txt A/c.txt
    

    执行后目录结构为

    
    ├───A
    │       c.txt
    │
    └───B
            b.txt
    
  2. B文件夹 重命名为C

    git mv B C
    

    执行后目录结构为

    ├───A
    │       c.txt
    │
    └───C
            b.txt
    
  3. c.txt移动到C文件夹里

    git mv A/c.txt C
    

    执行后目录结构为

    ├───A
    └───C
            b.txt
            c.txt
    
  4. b.txt移动到根目录里并重命名为a.txt

    git mv C/b.txt a.txt
    

    执行后目录结构为

    │   a.txt
    │
    ├───A
    └───C
            c.txt
    

注意

  • 该命令执行时相关文件需已提交或者暂存
  • 文件夹移动到不存在的路径下会失败,需先建目标文件夹

你可能感兴趣的:(git)