回答:
差分をとるときにgitに移動したファイルを自動検出させるには-Mを使う必要があります。git diff
knittlと同じように使用しても機能しません。
だから単純に: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.
~/.gitconfig
か?
git diff
。実行git diff -M
シングル(改称)ファイルには、名前変更を報告しません。
git log --follow -- file_after_move.txt
うまくいきませんが、うまくいきます。移動前を含む、すべての履歴が表示されます。何か案は?私は走っていgit version 2.11.0.windows.1
ます。
-C
コピーを検出するためのオプションは便利で似ています。私-M
は、1つのファイルを2つにリファクタリングした差分を見るためにそれを使用しました(どちらの名前も元のファイルと一致していません)。
git diff HEAD:./oldfilename newfilename
ここHEAD:./oldfilename
で、現在のディレクトリを基準にした、最後のコミット(HEAD内)のoldfilenameを意味します。
十分に新しいgitがない場合は、代わりに使用する必要があります。
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cd
は、ディレクトリ--
に移動し、commit:path
ペアの前に追加しない場合、私にとっては機能します。Gitは構文が非常にうるさいようです。
<commit-ish>:<pathname>
構文はオブジェクト識別子であり、Git風のものです。--
Gitがファイル名のみを期待した後。
git 2.9(2016年6月)では、追加する必要はあり-M
ません。git diff
使用する-M
デフォルトでします。
Matthieu Moy()によるcommit 5404c11、commit 9501d19、commit a9276a6、commit f07fc9e、commit 62df1e6(2016年2月25日)を参照してください。(による合併Junio C浜野- -で5d2a30dコミット、2016年4月3日)moy
gitster
diff
:diff.renames
デフォルトでアクティブ化名前の変更の検出は非常に便利な機能であり、新しいユーザーがドキュメントを掘り下げる必要はありません。
名前の変更の検出をアクティブにすることに対する潜在的な異論は、失敗することもあり、遅いこともあります。ただし、「
git status
」や「git merge
」などのいくつかのケースでは、名前の変更の検出がデフォルトですでにアクティブになっているため、アクティブにdiff.renames
しても状況は根本的に変わりません。名前の変更の検出が失敗すると、「git diff
」と「git status
」の間で一貫して失敗するようになりました。この設定は配管コマンドには影響しないため、適切に記述されたスクリプトは影響を受けません。
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コマンドを再実行します。
何らかの理由でHEAD:./oldfilename
(または絶対パス)を使用してもHEAD:oldfilename
うまくいきませんでしたが(ありがとうcmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename
ませんか?
単に実行git diff
引数なし、またはgit diff -- newfilename
。gitは適切なファイル/コンテンツ(つまり、名前を変更する前の元のコンテンツと名前を変更した後の変更されたコンテンツ)を比較するのに十分スマートです
git mv
単一のファイルを単純に処理してから、ステージングされた状態を別の同じブランチと比較すると、「-M
使用されない限り、すべてが削除され、再作成された」という差分が生成されます。
git diff -- yourRenamedFile
で十分です。以下の私の回答を