Git实际上并不会跟踪重命名文件的操作,它使用差异启发式算法来检测您是否将一个文件重命名为另一个文件。也就是说,如果您使用git mv
命令重命名文件,然后完全替换了其中的内容,这个操作不会被认为是重命名,因此您不需要再次使用git mv
命令来检测重命名。
例如:
% mv d.txt e.txt
% git rm d.txt
rm 'd.txt'
% git add e.txt
% git commit -m"rename without git mv"
[master f70ae76] rename without git mv
1 file changed, 0 insertions(+), 0 deletions(-)
rename d.txt => e.txt (100%)
% git diff --summary --find-renames HEAD~1 HEAD
rename d.txt => e.txt (100%)
git mv
并不意味着文件将被重命名,它仍然会使用差异算法:% git mv e.txt f.txt
% echo "Completely replacing f.txt" > f.txt
% git add f.txt
% git commit -m"git mv doesn't help here"
[master 068d19c] git mv doesn't help here
2 files changed, 1 insertion(+), 14 deletions(-)
delete mode 100644 e.txt
create mode 100644 f.txt
% git diff --summary --find-renames HEAD~1 HEAD
delete mode 100644 e.txt
create mode 100644 f.txt
git diff
没有检测到我重命名了文件并更改了它们的内容。我的情况是这样的:我有文件 A、B、C,然后插入了一个新的 B,所以旧的 B 现在是 C,旧的 C 现在是 D。 git diff
告诉我 B 和 C 现在完全不同!
我使用的解决方案很繁琐而且需要手动操作,但确实完成了工作。
git mv
将文件重新命名回其新名称。B 重命名为 C,C 重命名为 D。
git mv
的目的。 - ezodgit mv --cached
,但那个命令不存在。当我尝试使用git mv
时,会出现“fatal: bad source, source=...”的错误提示。 - Robin Winslowgit mv
到新路径。 - ezod--cached
的选项似乎有些愚蠢。 - Robin Winslowgit mv
命令,重命名实际上只是在存储库中添加和删除文件。 - Edward Thomson