Получить список измененных файлов и их статус для определенного коммита Git

Я использую следующую команду Git

git diff-tree --no-commit-id --name-only -r <SHA>

чтобы получить список измененных файлов.

К сожалению, в списке не указан тип изменений для каждого файла: добавлены, изменены или удалены... и т. Д.

Как я могу отобразить список изменений [тип изменения, имя файла] в данном SHA конкретного коммита.

5 ответов

Решение

Использование --name-status вместо --name-only

git diff-tree --no-commit-id --name-status -r <SHA>

Это покажет имя файла с буквой статуса (извлечено из man): 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).

Хотя ответ Джо указывает на то, что вы можете использовать --name-status флаг с git diff-treeВы также можете использовать тот же флаг с git diff вместо.

Чтобы получить измененные файлы с их статусом только для определенного коммита, вы можете просто использовать sha id этого коммита со спецификатором commit-parent, например

git diff --name-status <sha>^ <sha>

Спецификатор ревизии <sha>^ означает первого родителя коммита <sha>так что используя это с git diff эффективно дает вам все изменения, которые были сделаны между коммитом и его родителем.

альтернатива

Вы также можете использовать

git diff --name-status <sha>~ <sha>

где <sha>~ также означает первый родительский коммит <sha>,

Документация

Использование

git whatchanged 

чтобы увидеть последний коммит

git checkout <commit>
git whatchanged -1

Благодаря комментарию hvd к ответу stdcall,

Ваш оригинальный ответ, который включал git whatchanged SHA-1 форма, была почти права: добавить -1 возможность получить только этот конкретный коммит.

Вот решение для тех, кто заинтересован:

git whatchanged <SHA> -1

Другое решение:

git diff-tree --no-commit-id -r <SHA>
Другие вопросы по тегам