Как сделать git -diff и git log игнорировать новые и удаленные файлы?

Иногда есть несколько измененных файлов вместе с некоторыми новыми, удаленными и/или переименованными файлами. При выполнении git diff или git-log я хотел бы опустить их, поэтому я могу лучше заметить изменения.

Фактически, список имен новых и удаленных файлов без их содержимого был бы лучшим. Для "старого", переименованного в "новый", я хотел бы по желанию получить разницу между "старыми" и "новыми".

Ответ 1

Параметр --diff-filter работает как с diff, так и с журналом.

Я часто использую --diff-filter=M, который ограничивает выходы diff только модификациями контента.

Чтобы обнаружить переименования и копии и использовать их на выходе diff, вы можете использовать -M и -C соответственно вместе с параметрами R и C до --diff-filter.

Ответ 2

  • Официальный документ:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

Выберите только те файлы, которые были добавлены (A), скопированы (C), удалены (D), изменены (M), переименованы (R), изменили их тип (то есть обычный файл, символическую ссылку, подмодуль...) T), являются Unmerged (U), являются неизвестными (X) или имеют их спаривание Broken (B).   Можно использовать любую комбинацию символов фильтра (включая ни одного).

Когда в комбинацию добавляется * (All-or-none), все пути выбираются, если есть какой-либо файл, который соответствует другим критериям при сравнении; если файл не соответствует другим критериям, ничего не выбрано.

Кроме того, эти прописные буквы могут быть удалены, чтобы исключить. Например. --diff-filter = ad исключает добавленные и удаленные пути.

Пример: показывать только добавленные, измененные, измененные файлы исключают удаленные файлы:

git diff --diff-filter=ACM

Ответ 3

ОБНОВЛЕНИЕ: приемлемый ответ Чарльза Бейли правильный; желаемая функциональность уже встроена в git.

Я оставлю этот ответ здесь, поскольку он может предоставить идеи для вещей, которые не встроены в git.


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

Переименованные файлы - это другое дело; У меня нет (пока) хорошего ответа.