1

誰かがファイル名とその内容を変更して、それが同じファイルであることを git が検出できないようにしました。

彼らも を使っていなかったgit mvので、pull request を受け取ったとき、新しいファイルが追加され、古いファイルが削除されているのを見たので、レビューするのは現実的ではありませんでした。

ナイスガイとして、私は彼らのコードを引っ張って遅らせようとしたので git mv、彼らのプルリクエストにコミットを追加して、Github レビューページで物事を美しく見ることができましたが、それはうまくいきませんでした.

ファイルの死後の名前を変更する方法はありますか?

4

1 に答える 1

3

Git はファイル ID を追跡しません: リビジョン n のファイルがリビジョン ( n -1) のファイルから名前変更/コピー/移動されたことを示すリポジトリにはbarfooありません。Doingは、新しい名前と古い名前の後にPlaingit mvを実行するのと同じです。リポジトリは、コミットごとにディレクトリ ツリーのスナップショットを保存するだけであり、異なるコミット内のファイルが互いにどのように関連しているかを決定するのは、リポジトリを調べるツール次第です。mvgit addgit rm

リビジョン履歴を見ていて、git がファイルが移動または名前変更されたと言った場合、古いファイルと新しいファイルの内容の類似性に基づいた推測として、ローカルで判断しています。多くの git コマンド-Mは、同じコミットでの削除と追加を名前変更と見なす必要があるかどうかを決定するための類似性のしきい値を指定できるオプションをサポートしています。デフォルトのしきい値は 50% です。

リポジトリを調べるたびに低いしきい値を指定することなく、変更をデフォルトで名前変更として扱いたい場合は-M、変更を 2 つのコミットに分割できます。内容を変更せずにファイルの名前を変更します (または、少なくとも 50% 未満の変更)。

もちろん、これを「死後」に行うには、ブランチヘッドを古いコミットの前にリセットし、それを2つの新しいコミットに置き換え、強制プッシュし、元のバージョンをプルした可能性のある人に連絡して、あなたがコミットしたことを知らせる必要があります。歴史を変えた。(これは、他の人に公開されたコミットに他の種類の変更を加えることと同じです。)

于 2015-11-04T03:16:51.190 に答える