Git はファイル ID を追跡しません: リビジョン n のファイルがリビジョン ( n -1) のファイルから名前変更/コピー/移動されたことを示すリポジトリにはbar
何もfoo
ありません。Doingは、新しい名前と古い名前の後にPlaingit mv
を実行するのと同じです。リポジトリは、コミットごとにディレクトリ ツリーのスナップショットを保存するだけであり、異なるコミット内のファイルが互いにどのように関連しているかを決定するのは、リポジトリを調べるツール次第です。mv
git add
git rm
リビジョン履歴を見ていて、git がファイルが移動または名前変更されたと言った場合、古いファイルと新しいファイルの内容の類似性に基づいた推測として、ローカルで判断しています。多くの git コマンド-M
は、同じコミットでの削除と追加を名前変更と見なす必要があるかどうかを決定するための類似性のしきい値を指定できるオプションをサポートしています。デフォルトのしきい値は 50% です。
リポジトリを調べるたびに低いしきい値を指定することなく、変更をデフォルトで名前変更として扱いたい場合は-M
、変更を 2 つのコミットに分割できます。内容を変更せずにファイルの名前を変更します (または、少なくとも 50% 未満の変更)。
もちろん、これを「死後」に行うには、ブランチヘッドを古いコミットの前にリセットし、それを2つの新しいコミットに置き換え、強制プッシュし、元のバージョンをプルした可能性のある人に連絡して、あなたがコミットしたことを知らせる必要があります。歴史を変えた。(これは、他の人に公開されたコミットに他の種類の変更を加えることと同じです。)