Git は実際にはリポジトリ内の名前変更を追跡しません。ファイルの名前を別の名前に変更したかどうかを判断するために差分ヒューリスティックを使用します。つまりgit mv
、ファイルの内容を完全に置き換えた場合、それは名前変更とは見なされず、名前変更を検出するために for it を使用する必要はありません。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
、ファイルの名前が変更されるという意味ではなく、引き続き diff アルゴリズムが使用されます。
% 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