Як зробити так, щоб git-diff та git log ігнорували нові та видалені файли?


155

Іноді є кілька змінених файлів разом з деякими новими, видаленими та / або перейменованими файлами. Коли ви робите git diffабо git-logя хотів би їх опустити, тож я можу краще помітити зміни.

Насправді, найкраще перераховувати назви нових та видалених файлів без їх вмісту. Для "старого", перейменованого на "новий", я б хотів додатково отримати різницю між "старим" і "новим".

Відповіді:


217

--diff-filterОпція працює з обома diffі колодою.

Я використовую --diff-filter=Mбагато, що обмежує різний вихід лише модифікаціями вмісту.

Для виявлення перейменовує і копії і використовувати їх у вихідних відмінностей, ви можете використовувати -Mі , -Cвідповідно, разом з Rі Cваріанти --diff-filter.


3
Якщо використовувати git logце, це призведе до того, що він повністю ігнорує зобов'язання, які лише додають та / або видаляють файли.
qqx

7
Чи є спосіб фактично виключити лише один тип даних? Щось на кшталт--diff-filter=!D
Каміль Дзедзіч

24
@Kamil Так, є. Цитата з документації:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser

62
  • Офіційний документ:
--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 = Оголошення виключає додані та видалені контури.

Приклад: показувати лише додані, змінені, змінені файли, виключаючи видалені файли:

git diff --diff-filter=ACM

2
Хороша примітка щодо використання параметрів малої літери для виключення шляхів та параметрів великої літери для включення шляхів.
stuyam

-3

UPDATE: загальноприйнятий відповідь Чарльз Бейлі є правильним; бажана функціональність вже вбудована в git.

Я залишу цю відповідь тут, оскільки вона може запропонувати ідеї для речей, які не вбудовані в git.


git diffпоказує нові та видалені файли, порівнюючи їх з /dev/null. Написати щось (я б сам користувався Perl) не повинно бути надто складно, що шукає /dev/nullі фільтрує наступні рядки до наступного розл. Потім git diff ... | the-filter.

Перейменовані файли - це інша справа; Я не маю (поки) гарної відповіді на це.


Це нормально, але таким чином я втратив би можливість використовувати пейджер (менше) лише за потреби, чи не так?
maaartinus

@maaartinus: Я гадаю, що так; Я не думав про це. (Особисто я встановив свій git пейджер на "cat" і ... | lessявно використовую .) Ви можете подивитися на less's -Eабо -Foption (хоча в моїй системі це не дозволяє мені бачити вихід).
Кіт Томпсон

Гаразд, це добре, але подивіться на іншу відповідь.
maaartinus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.