139

を使用してファイルを移動しましたgit mv。ここで、新しいファイルを差分して、古いファイル(古い、現在は存在しない名前)と比較したいと思います。

どうすればよいですか?

4

6 に答える 6

150

差分時にgitが移動したファイルを自動検出できるようにするには、-Mを使用する必要があります。上記のknittlと同じように使用しgit diffても、私には効果がありません。

だから簡単に:git diff -Mそれを行う必要があります。

このスイッチのドキュメントは次のとおりです。

-M[<n>], --find-renames[=<n>]
       Detect renames. If n is specified, it is a threshold on the similarity index 
       (i.e. amount of addition/deletions compared to the file’s size). For example, 
       -M90% means git should consider a delete/add pair to be a rename if more than
       90% of the file hasn’t changed.
于 2012-04-12T09:38:17.097 に答える
92

knittlが書いたものに加えて、いつでも使用できます。

git diff HEAD:./oldfilename newfilename

ここで、HEAD:./oldfilenameは、現在のディレクトリを基準にした、最後のコミット(HEAD内)のoldfilenameを意味します。

新しい十分なgitがない場合は、代わりに次を使用する必要があります。

git diff HEAD:path/to/oldfilename newfilename
于 2011-04-20T14:13:35.707 に答える
20

git 2.9(2016年6月)を使用すると、-Mもう追加する必要はありません。git diffデフォルトで使用-Mします。

Matthieu Moy()によるcommit 5404c11commit 9501d19commit a9276a6commit f07fc9ecommit 62df1e6(2016年2月25日)を参照してください。濱野純雄による合併---コミット5d2a30d2016年4月3日moy
gitster

diffdiff.renames:デフォルトでアクティブ化

名前の変更の検出は非常に便利な機能であり、新しいユーザーはそれを利用するためにドキュメントを掘り下げる必要はありません。

名前変更の検出をアクティブにすることに対する潜在的な反対意見は、失敗することもあれば、遅いこともあるということです。git statusただし、名前変更の検出は、「 」や「」などのいくつかのケースでデフォルトですでにアクティブ化されているgit mergeため、アクティブ化diff.renamesしても状況は根本的に変わりません。git diff名前変更の検出が失敗すると、「 」と「 」の間で一貫して失敗するようになりgit statusました。

この設定は配管コマンドには影響しないため、適切に記述されたスクリプトは影響を受けません。

この機能の新しいテストはこちらです。

于 2016-04-05T19:36:44.077 に答える
4

何らかの理由HEAD:./oldfilenameで(または絶対パス)を使用しても機能しませんでしたが、機能しましHEAD:oldfilenameた(cmnに感謝):

git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename

HTH

于 2011-12-26T04:34:07.497 に答える
1

git diff -M他の人が言っているように名前変更検出をアクティブにします(そして@VonCが指摘したように、デフォルトでgit 2.9からアクティブになります)。ただし、大きなチェンジセットがある場合は、不正確な名前変更の検出が再びオフになる可能性があります。Gitは、次のような警告を表示します。これは、表示している差分の中で見逃しがちです。

warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.

その場合、たとえばgitが提案するように構成オプションを設定します

git config diff.renamelimit 450

diffコマンドを再実行します。

于 2018-10-09T07:15:48.553 に答える
-5

git diff引数なしで実行するか、またはgit diff -- newfilename。gitは、適切なファイル/コンテンツを比較するのに十分スマートです(つまり、名前変更前の元のコンテンツと名前変更後の変更されたコンテンツ)

于 2011-04-20T12:50:34.640 に答える