を使用してファイルを移動しましたgit mv
。ここで、新しいファイルを差分して、古いファイル(古い、現在は存在しない名前)と比較したいと思います。
どうすればよいですか?
を使用してファイルを移動しましたgit mv
。ここで、新しいファイルを差分して、古いファイル(古い、現在は存在しない名前)と比較したいと思います。
どうすればよいですか?
差分時に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.
knittlが書いたものに加えて、いつでも使用できます。
git diff HEAD:./oldfilename newfilename
ここで、HEAD:./oldfilename
は、現在のディレクトリを基準にした、最後のコミット(HEAD内)のoldfilenameを意味します。
新しい十分なgitがない場合は、代わりに次を使用する必要があります。
git diff HEAD:path/to/oldfilename newfilename
git 2.9(2016年6月)を使用すると、-M
もう追加する必要はありません。git diff
デフォルトで使用-M
します。
Matthieu Moy()によるcommit 5404c11、commit 9501d19、commit a9276a6、commit f07fc9e、commit 62df1e6(2016年2月25日)を参照してください。(濱野純雄による合併---コミット5d2a30d、2016年4月3日)moy
gitster
diff
diff.renames
:デフォルトでアクティブ化名前の変更の検出は非常に便利な機能であり、新しいユーザーはそれを利用するためにドキュメントを掘り下げる必要はありません。
名前変更の検出をアクティブにすることに対する潜在的な反対意見は、失敗することもあれば、遅いこともあるということです。
git status
ただし、名前変更の検出は、「 」や「」などのいくつかのケースでデフォルトですでにアクティブ化されているgit merge
ため、アクティブ化diff.renames
しても状況は根本的に変わりません。git diff
名前変更の検出が失敗すると、「 」と「 」の間で一貫して失敗するようになりgit status
ました。この設定は配管コマンドには影響しないため、適切に記述されたスクリプトは影響を受けません。
何らかの理由HEAD:./oldfilename
で(または絶対パス)を使用しても機能しませんでしたが、機能しましHEAD:oldfilename
た(cmnに感謝):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
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コマンドを再実行します。
git diff
引数なしで実行するか、またはgit diff -- newfilename
。gitは、適切なファイル/コンテンツを比較するのに十分スマートです(つまり、名前変更前の元のコンテンツと名前変更後の変更されたコンテンツ)