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

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

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

Ответы [ 3 ]

191 голосов
/ 01 августа 2011

Опция --diff-filter работает как с diff, так и с журналом.

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

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

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

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

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

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

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

git diff --diff-filter=ACM
0 голосов
/ 01 августа 2011

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

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


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

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

...