場合によっては、いくつかの変更されたファイルと、いくつかの新しいファイル、削除されたファイル、および/または名前が変更されたファイルがあります。実行するとき、git diff
またはgit-log
それらを省略したいので、変更をより適切に見つけることができます。
実際には、新しいファイルと削除されたファイルの名前をコンテンツなしでリストするのが最善です。「古い」の名前を「新しい」に変更した場合、オプションで「古い」と「新しい」の違いを取得したいと思います。
この--diff-filter
オプションはdiff
、ログとログの両方で機能します。
私は--diff-filter=M
diff出力をコンテンツの変更のみに制限する多くを使用します。
名前の変更とコピーを検出し、これらをdiff出力で使用するには、-M
とをそれぞれとオプション-C
と一緒に使用できます。R
C
--diff-filter
公式文書:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
追加(A)、コピー(C)、削除(D)、変更(M)、名前変更(R)され、タイプ(つまり、通常のファイル、シンボリックリンク、サブモジュールなど)が変更されたファイルのみを選択します(T)、マージされていない(U)、不明である(X)、またはペアリングが壊れている(B)。フィルタ文字の任意の組み合わせ(なしを含む)を使用できます。
*(All-or-none)が組み合わせに追加されると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。他の基準に一致するファイルがない場合、何も選択されません。
また、これらの大文字は小文字で除外することができます。たとえば、--diff-filter = adは、追加および削除されたパスを除外します。
例:追加、変更、変更されたファイルのみを表示し、削除されたファイルを除外します。
git diff --diff-filter=ACM
また、これらの大文字は小文字で除外することができます。
たとえば--diff-filter=ad
、追加および削除されたパスを除外します。
あなたの場合git diff --diff-filter=ad
はうまくいくでしょうが、Git 2.36(Q2 2022)を持っていない限り、同じフィルターで下文字と上文字を使用しないようにしてください。
" git diff --diff-filter=aR
" (man)が正しく解析されるようになりました。
Johannes Schindelin()によるcommit 75408ca、commit 4d4d4ea、commit d843e31(2022年1月28日)を参照してください。( Junio C Hamanoによってマージされました---コミット9a16099、2022年2月16日)dscho
gitster
diff-filter
:負のビットを探すときはもっと注意してくださいサインオフ-作成者:Johannes Schindelin
この
--diff-filter=<bits>
オプションを使用すると、特定の基準で差分をフィルタリングできます。たとえばR
、名前が変更されたファイルのみを表示できます。
また、小文字を使用したフィルターの否定、つまり名前が変更されたファイル以外のすべて
r
を表示することもサポートしています。ただし、ユーザーが小文字を指定したため、 (man)がすべてのdiff-filtersをオンにして開始する必要があるかどうかを判断しようとすると、コードは少し熱心になります。引数が大文字で始まる場合は、すべてのビットをオンにして開始します。
git diff
--diff-filter
さらに悪いことに、diffフィルターを複数の個別のオプションで指定することができます
--diff-filter=AM [...] --diff-filter=m
。オプションを完全に解析した後、包含/除外フィルターを個別に累積し、「除外フィルターのみが指定された」場合のみを特殊化してみましょう。
更新:チャールズベイリーによって受け入れられた答えは正しいものです。必要な機能はすでにgitに組み込まれています。
gitに組み込まれていないもののアイデアを提供する可能性があるため、この回答はここに残しておきます。
git diff
は、新しいファイルと削除されたファイルをと比較して表示し/dev/null
ます。/dev/null
次のdiffまで次の行を探して除外するもの(私はPerlを自分で使用します)を書くのはそれほど難しいことではありません。次にgit diff ... | the-filter
。
名前が変更されたファイルは別の問題です。私は(まだ)それに対する良い答えを持っていません。