Подавление различий для удаленных файлов в git

Я хочу получить краткий обзор локальных изменений в моем хранилище, но я не хочу diff, который показывает удаленные файлы, так как каждая строка минус.

В принципе, я хочу что-то вроде 'git diff HEAD <list of modified files only>', В идеальном мире ему будет предшествовать список удаленных и добавленных файлов, но не будет отображаться различия в них.

Я прошел большую часть пути, написав утилиту, которая делает это:

git diff HEAD `git status | grep modified | cut -d : -f 2`

когда я задавался вопросом, есть ли какой-нибудь мерзкий способ сделать это вместо этого. Есть ли флаг, по которому я скучаю? Я бы тоже хотел сохранить цветопередачу.

5 ответов

Решение

Вы можете сделать это с --diff-filter Опция и указание всех, кроме "D" (удаленных) критериев:

$ git diff --diff-filter = ACMRTUXB

git diff (-D|--irreversible-delete) пропустит diff для удаленных файлов. Я не думаю, что есть эквивалент для добавленных файлов.

Почти такой же ответ, как опубликовано Dan Moulding, но вы, вероятно, хотите указать, что вы не хотите показывать, и для скрытия удаленных файлов это будет:

git diff --diff-filter=d

Вы также можете использовать -M, который пытается найти файлы, которые были перемещены

git diff -M -D 

more может получить больше информации с помощью: git diff --help (опция -B также может быть интересной)

В дополнение к предыдущему ответу я хотел бы добавить то, что говорится в документации для git версии 2.33.0

      --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
       Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (i.e. regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had their
       pairing Broken (B). Any combination of the filter characters (including none) can be used. When * (All-or-none) is added to the combination, all paths are selected if there is any file that matches other criteria in
       the comparison; if there is no file that matches other criteria, nothing is selected.

       Also, these upper-case letters can be downcased to exclude. E.g.  --diff-filter=ad excludes added and deleted paths.

       Note that not all diffs can feature all types. For instance, diffs from the index to the working tree can never have Added entries (because the set of paths included in the diff is limited by what is in the index).
       Similarly, copied and renamed entries cannot appear if detection for those types is disabled.
Другие вопросы по тегам