2 (分)阅读

分类

标签

问题

直接修改了文件名或文件夹名时,git 会判定为删除该文件或文件夹,然后添加 untracked 的文件或文件夹,如此导致对应的文件或文件夹的修改历史丢失。

解决方案 -> git mv

image-center

git-mv - 移动或重命名文件,目录或符号链接. 1

描述

git mv [-v] [-f] [-n] [-k] <source> <destination>
git mv [-v] [-f] [-n] [-k] <source> ... <destination directory>

在第一种形式中,它将 <source> 重命名为 <destination> ,它必须存在,并且可以是文件,符号链接或目录。
在第二种形式中,最后一个参数必须是现有目录; 给定的源都将被移动到目标目录中。

PS: 成功完成后更新索引,但仍必须提交更改。

选项

-f
--force
即使目标存在,也要强制重命名或移动文件

-k
跳过移动或重命名会导致错误情况的操作。当源既不存在也不受 Git 控制时,或者除非-f给出,否则会覆盖现有文件时发生错误。

-n
--dry-run
没做什么; 只显示会发生什么

-v
--verbose
报告移动文件的名称。

例子

  1. 重命名文件
     git mv -f 桌面端-面试题.md desktop_interview.md
    
  2. 更新追踪历史(无该步骤将导致历史丢失
     git add -u desktop_interview.md
    
  3. 提交修改
     git commit -m "rename file test"
    

Tips

git mv -f oldfolder newfolder
# -u选项会更新已经追踪的文件和文件夹
git add -u newfolder
git commit -m "changed the foldername whaddup"
# 在大小写不敏感的系统中,如windows,重命名文件的大小写,使用临时文件名
git mv foldername tempname && git mv tempname folderName 
# 显示重命名会发生的改变,不进行重命名操作
git mv -n foldername folderName