Получить список измененных файлов и их статус для определенного коммита 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>
,
Документация
Благодаря комментарию hvd к ответу stdcall,
Ваш оригинальный ответ, который включал
git whatchanged SHA-1
форма, была почти права: добавить-1
возможность получить только этот конкретный коммит.
Вот решение для тех, кто заинтересован:
git whatchanged <SHA> -1
Другое решение:
git diff-tree --no-commit-id -r <SHA>